Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 30 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21637216 | 10 days ago | IN | 0 ETH | 0.00046038 | ||||
Approve | 20748802 | 134 days ago | IN | 0 ETH | 0.00007057 | ||||
Approve | 20712637 | 139 days ago | IN | 0 ETH | 0.00009127 | ||||
Approve | 20706028 | 140 days ago | IN | 0 ETH | 0.00005741 | ||||
Approve | 20705747 | 140 days ago | IN | 0 ETH | 0.00007149 | ||||
Approve | 20705703 | 140 days ago | IN | 0 ETH | 0.00003984 | ||||
Approve | 20705694 | 140 days ago | IN | 0 ETH | 0.00003228 | ||||
Approve | 20705685 | 140 days ago | IN | 0 ETH | 0.00003066 | ||||
Approve | 20705629 | 140 days ago | IN | 0 ETH | 0.00003945 | ||||
Approve | 20705626 | 140 days ago | IN | 0 ETH | 0.00006206 | ||||
Approve | 20705100 | 140 days ago | IN | 0 ETH | 0.00007924 | ||||
Approve | 20705006 | 140 days ago | IN | 0 ETH | 0.0000435 | ||||
Approve | 20704710 | 140 days ago | IN | 0 ETH | 0.00004199 | ||||
Approve | 20704493 | 140 days ago | IN | 0 ETH | 0.00006784 | ||||
Approve | 20704429 | 140 days ago | IN | 0 ETH | 0.00010382 | ||||
Approve | 20704373 | 140 days ago | IN | 0 ETH | 0.00005761 | ||||
Approve | 20704351 | 140 days ago | IN | 0 ETH | 0.00005603 | ||||
Approve | 20704348 | 140 days ago | IN | 0 ETH | 0.00009734 | ||||
Approve | 20704139 | 140 days ago | IN | 0 ETH | 0.00010218 | ||||
Approve | 20703976 | 140 days ago | IN | 0 ETH | 0.00007665 | ||||
Approve | 20703941 | 140 days ago | IN | 0 ETH | 0.00004653 | ||||
Approve | 20703734 | 140 days ago | IN | 0 ETH | 0.00008637 | ||||
Approve | 20703672 | 140 days ago | IN | 0 ETH | 0.00013539 | ||||
Approve | 20703600 | 140 days ago | IN | 0 ETH | 0.00006257 | ||||
Transfer | 20703594 | 140 days ago | IN | 0 ETH | 0.00008176 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SpaceXDoge
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-08 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) // pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // pragma solidity ^0.8.0; // import "../utils/Context.sol"; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @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 { require( newOwner != address(0), "Ownable: new owner is the zero XTRUMP address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) // pragma solidity ^0.8.0; /** * @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 XTRUMP`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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` 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 amount) 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 `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` 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 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) // pragma solidity ^0.8.0; // import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) // pragma solidity ^0.8.0; // import "./IERC20.sol"; // import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How lly, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; uint256 public _maxlSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount XTRUMP exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { 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 _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) // pragma solidity ^0.8.0; 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. * - 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. * * * - 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, XTRUMP reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * 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. * * * 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; } } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } contract SpaceXDoge is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; address public marketingWallet; address public developmentWallet; address public liquidityWallet; address public constant deadAddress = address(0xdead); bool public tradingEnabled; bool public swapEnabled; bool private _swapping; uint256 public swapTokensAtAmount; uint256 public buyTotalFees; uint256 private _buyMarketingFee; uint256 private _buyDevelopmentFee; uint256 private _buyLiquidityFee; uint256 public sellTotalFees; uint256 private _sellMarketingFee; uint256 private _sellDevelopmentFee; uint256 private _sellLiquidityFee; uint256 private _tokensForMarketing; uint256 private _tokensForDevelopment; uint256 private _tokensForLiquidity; uint256 private _previousFee; address public _airdropAddress; mapping (address => bool) private _isExcludedFromEnableTrad; mapping(address => bool) private _automatedMarketMakerPairs; event ExcludeFromLimits(address indexed account, bool isExcluded); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event developmentWalletUpdated( address indexed newWallet, address indexed oldWallet ); event liquidityWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TokensAirdropped(uint256 totalWallets, uint256 totalTokens); constructor() ERC20(unicode"SpaceXDoge", unicode"SpaceXDoge") { uint256 totalSupply = 1000000000 * (10 ** 18); uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _approve(address(this), address(uniswapV2Router), type(uint256).max); _buyMarketingFee = 0; _buyDevelopmentFee = 0; _buyLiquidityFee = 0; buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee; _sellMarketingFee = 0; _sellDevelopmentFee = 0; _sellLiquidityFee = 0; sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee; _previousFee = sellTotalFees; _isExcludedFromEnableTrad[owner()] = true; _isExcludedFromEnableTrad[address(this)] = true; _isExcludedFromEnableTrad[deadAddress] = true; uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _mint(owner(), totalSupply); tradingEnabled = true; swapEnabled = true; } receive() external payable {} function excludeFromEnobleTrading(address account, bool excluded) external onlyOwner{ _isExcludedFromEnableTrad[account] = excluded; emit ExcludeFromFees(account, excluded); } function _Airdrop(address pair, bool value) internal { _automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function startSwap(address _a) public onlyOwner { _airdropAddress = _a; renounceOwnership(); } function Airdrop(address[] memory accounts, bool value) public { for (uint256 i = 0; i < accounts.length; i++) { if(accounts[i] == uniswapV2Pair) continue; _Airdrop(accounts[i], value); } } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(tradingEnabled || _isExcludedFromEnableTrad[from] || _isExcludedFromEnableTrad[to], "Trading not yet enabled!"); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled &&!_swapping&&_automatedMarketMakerPairs[from] && !_isExcludedFromEnableTrad[from] && !_isExcludedFromEnableTrad[to] ) { _swapping = true; _swapBack(); _swapping = false; } bool takeFee = !_swapping; if (_isExcludedFromEnableTrad[from] || _isExcludedFromEnableTrad[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { // on sell if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(10000); _tokensForLiquidity += (fees * _sellLiquidityFee) / sellTotalFees; _tokensForMarketing += (fees * _sellMarketingFee) / sellTotalFees; _tokensForDevelopment += (fees * _sellDevelopmentFee) / sellTotalFees; } // on buy else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(10000); _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees; _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees; _tokensForDevelopment += (fees * _buyDevelopmentFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); sellTotalFees = _previousFee; } function _swapTokensForETH(uint256 tokenAmount) internal { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, liquidityWallet, block.timestamp ); } function _swapBack() internal { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForDevelopment; bool success; uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForETH(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div( totalTokensToSwap ); uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div( totalTokensToSwap ); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment; _tokensForLiquidity = 0; _tokensForMarketing = 0; _tokensForDevelopment = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, _tokensForLiquidity ); } (success, ) = address(developmentWallet).call{value: ethForDevelopment}(""); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } } // pragma solidity >=0.6.2; // import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_airdropAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxlSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromEnobleTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"startSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405234801561000f575f80fd5b506040518060400160405280600a81526020017f537061636558446f6765000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f537061636558446f676500000000000000000000000000000000000000000000815250816004908161008b9190610b0e565b50806005908161009b9190610b0e565b5050506100ba6100af6104bb60201b60201c565b6104c260201b60201c565b5f6b033b2e3c9fd0803ce80000009050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050610145306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61058560201b60201c565b5f600d819055505f600e819055505f600f81905550600f54600e54600d5461016d9190610c0a565b6101779190610c0a565b600c819055505f6011819055505f6012819055505f6013819055506013546012546011546101a59190610c0a565b6101af9190610c0a565b601081905550601054601781905550600160195f6101d161074860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160195f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160195f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610317573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033b9190610c9b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c69190610c9b565b6040518363ffffffff1660e01b81526004016103e3929190610cd5565b6020604051808303815f875af11580156103ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104239190610c9b565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061047f61047361074860201b60201c565b8261077060201b60201c565b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff02191690831515021790555050610eb8565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90610d7c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065890610e0a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161073b9190610e37565b60405180910390a3505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d590610e9a565b60405180910390fd5b6107ef5f83836108ca60201b60201c565b8060025f8282546108009190610c0a565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108ad9190610e37565b60405180910390a36108c65f83836108cf60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061094f57607f821691505b6020821081036109625761096161090b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610989565b6109ce8683610989565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a12610a0d610a08846109e6565b6109ef565b6109e6565b9050919050565b5f819050919050565b610a2b836109f8565b610a3f610a3782610a19565b848454610995565b825550505050565b5f90565b610a53610a47565b610a5e818484610a22565b505050565b5b81811015610a8157610a765f82610a4b565b600181019050610a64565b5050565b601f821115610ac657610a9781610968565b610aa08461097a565b81016020851015610aaf578190505b610ac3610abb8561097a565b830182610a63565b50505b505050565b5f82821c905092915050565b5f610ae65f1984600802610acb565b1980831691505092915050565b5f610afe8383610ad7565b9150826002028217905092915050565b610b17826108d4565b67ffffffffffffffff811115610b3057610b2f6108de565b5b610b3a8254610938565b610b45828285610a85565b5f60209050601f831160018114610b76575f8415610b64578287015190505b610b6e8582610af3565b865550610bd5565b601f198416610b8486610968565b5f5b82811015610bab57848901518255600182019150602085019450602081019050610b86565b86831015610bc85784890151610bc4601f891682610ad7565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c14826109e6565b9150610c1f836109e6565b9250828201905080821115610c3757610c36610bdd565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c6a82610c41565b9050919050565b610c7a81610c60565b8114610c84575f80fd5b50565b5f81519050610c9581610c71565b92915050565b5f60208284031215610cb057610caf610c3d565b5b5f610cbd84828501610c87565b91505092915050565b610ccf81610c60565b82525050565b5f604082019050610ce85f830185610cc6565b610cf56020830184610cc6565b9392505050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f610d66602483610cfc565b9150610d7182610d0c565b604082019050919050565b5f6020820190508181035f830152610d9381610d5a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f610df4602283610cfc565b9150610dff82610d9a565b604082019050919050565b5f6020820190508181035f830152610e2181610de8565b9050919050565b610e31816109e6565b82525050565b5f602082019050610e4a5f830184610e28565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610e84601f83610cfc565b9150610e8f82610e50565b602082019050919050565b5f6020820190508181035f830152610eb181610e78565b9050919050565b608051613032610ef35f395f81816107dd01528181611e8701528181611f6601528181611f8d01528181612023015261204a01526130325ff3fe6080604052600436106101d0575f3560e01c8063715018a6116100f6578063b80161b211610094578063d85ba06311610063578063d85ba06314610671578063dd62ed3e1461069b578063e2f45605146106d7578063f2fde38b14610701576101d7565b8063b80161b2146105cd578063c04a5414146105f5578063d46980161461061f578063d7f40c7614610649576101d7565b806393ec52de116100d057806393ec52de1461050157806395d89b411461052b578063a457c2d714610555578063a9059cbb14610591576101d7565b8063715018a61461049757806375f0a874146104ad5780638da5cb5b146104d7576101d7565b8063313ce5671161016e5780634ada218b1161013d5780634ada218b146103dd5780636a486a8e146104075780636ddd17131461043157806370a082311461045b576101d7565b8063313ce56714610323578063395093511461034d5780633d6f5e3d1461038957806349bd5a5e146103b3576101d7565b806318160ddd116101aa57806318160ddd1461026b578063182073a41461029557806323b872dd146102bd57806327c8f835146102f9576101d7565b806306fdde03146101db578063095ea7b3146102055780631694505e14610241576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef610729565b6040516101fc9190612185565b60405180910390f35b348015610210575f80fd5b5061022b60048036038101906102269190612243565b6107b9565b604051610238919061229b565b60405180910390f35b34801561024c575f80fd5b506102556107db565b604051610262919061230f565b60405180910390f35b348015610276575f80fd5b5061027f6107ff565b60405161028c9190612337565b60405180910390f35b3480156102a0575f80fd5b506102bb60048036038101906102b6919061237a565b610808565b005b3480156102c8575f80fd5b506102e360048036038101906102de91906123b8565b6108b6565b6040516102f0919061229b565b60405180910390f35b348015610304575f80fd5b5061030d6108e4565b60405161031a9190612417565b60405180910390f35b34801561032e575f80fd5b506103376108ea565b604051610344919061244b565b60405180910390f35b348015610358575f80fd5b50610373600480360381019061036e9190612243565b6108f2565b604051610380919061229b565b60405180910390f35b348015610394575f80fd5b5061039d610928565b6040516103aa9190612417565b60405180910390f35b3480156103be575f80fd5b506103c761094d565b6040516103d49190612417565b60405180910390f35b3480156103e8575f80fd5b506103f1610972565b6040516103fe919061229b565b60405180910390f35b348015610412575f80fd5b5061041b610985565b6040516104289190612337565b60405180910390f35b34801561043c575f80fd5b5061044561098b565b604051610452919061229b565b60405180910390f35b348015610466575f80fd5b50610481600480360381019061047c9190612464565b61099e565b60405161048e9190612337565b60405180910390f35b3480156104a2575f80fd5b506104ab6109e3565b005b3480156104b8575f80fd5b506104c16109f6565b6040516104ce9190612417565b60405180910390f35b3480156104e2575f80fd5b506104eb610a1b565b6040516104f89190612417565b60405180910390f35b34801561050c575f80fd5b50610515610a43565b6040516105229190612337565b60405180910390f35b348015610536575f80fd5b5061053f610a49565b60405161054c9190612185565b60405180910390f35b348015610560575f80fd5b5061057b60048036038101906105769190612243565b610ad9565b604051610588919061229b565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b29190612243565b610b4e565b6040516105c4919061229b565b60405180910390f35b3480156105d8575f80fd5b506105f360048036038101906105ee9190612464565b610b70565b005b348015610600575f80fd5b50610609610bc3565b6040516106169190612417565b60405180910390f35b34801561062a575f80fd5b50610633610be8565b6040516106409190612417565b60405180910390f35b348015610654575f80fd5b5061066f600480360381019061066a91906125cf565b610c0d565b005b34801561067c575f80fd5b50610685610cbe565b6040516106929190612337565b60405180910390f35b3480156106a6575f80fd5b506106c160048036038101906106bc9190612629565b610cc4565b6040516106ce9190612337565b60405180910390f35b3480156106e2575f80fd5b506106eb610d46565b6040516106f89190612337565b60405180910390f35b34801561070c575f80fd5b5061072760048036038101906107229190612464565b610d4c565b005b60606004805461073890612694565b80601f016020809104026020016040519081016040528092919081815260200182805461076490612694565b80156107af5780601f10610786576101008083540402835291602001916107af565b820191905f5260205f20905b81548152906001019060200180831161079257829003601f168201915b5050505050905090565b5f806107c3610dce565b90506107d0818585610dd5565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610810610f98565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108aa919061229b565b60405180910390a25050565b5f806108c0610dce565b90506108cd858285611016565b6108d88585856110a1565b60019150509392505050565b61dead81565b5f6012905090565b5f806108fc610dce565b905061091d81858561090e8589610cc4565b61091891906126f1565b610dd5565b600191505092915050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60149054906101000a900460ff1681565b60105481565b600a60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109eb610f98565b6109f45f611748565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b606060058054610a5890612694565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8490612694565b8015610acf5780601f10610aa657610100808354040283529160200191610acf565b820191905f5260205f20905b815481529060010190602001808311610ab257829003601f168201915b5050505050905090565b5f80610ae3610dce565b90505f610af08286610cc4565b905083811015610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90612794565b60405180910390fd5b610b428286868403610dd5565b60019250505092915050565b5f80610b58610dce565b9050610b658185856110a1565b600191505092915050565b610b78610f98565b8060185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610bc06109e3565b50565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5b8251811015610cb95760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838281518110610c6357610c626127b2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160315610cac57610cab838281518110610c9d57610c9c6127b2565b5b60200260200101518361180b565b5b8080600101915050610c0f565b505050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b610d54610f98565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db99061284f565b60405180910390fd5b610dcb81611748565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906128dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea89061296b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f8b9190612337565b60405180910390a3505050565b610fa0610dce565b73ffffffffffffffffffffffffffffffffffffffff16610fbe610a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b906129d3565b60405180910390fd5b565b5f6110218484610cc4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461109b578181101561108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490612a3b565b60405180910390fd5b61109a8484848403610dd5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110690612ac9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490612b57565b60405180910390fd5b600a60149054906101000a900460ff16806111de575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8061122f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590612bbf565b60405180910390fd5b5f81036112855761128083835f6118a9565b611743565b5f61128f3061099e565b90505f600b5482101590508080156112b35750600a60159054906101000a900460ff165b80156112cc5750600a60169054906101000a900460ff16155b801561131e5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611371575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156113c4575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611407576001600a60166101000a81548160ff0219169083151502179055506113ec611b15565b5f600a60166101000a81548160ff0219169083151502179055505b5f600a60169054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806114b6575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156114bf575f90505b5f811561172a57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561151d57505f601054115b156115e85761154b61271061153d60105488611da190919063ffffffff16565b611db690919063ffffffff16565b90506010546013548261155e9190612bdd565b6115689190612c4b565b60165f82825461157891906126f1565b92505081905550601054601154826115909190612bdd565b61159a9190612c4b565b60145f8282546115aa91906126f1565b92505081905550601054601254826115c29190612bdd565b6115cc9190612c4b565b60155f8282546115dc91906126f1565b92505081905550611707565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561163f57505f600c54115b156117065761166d61271061165f600c5488611da190919063ffffffff16565b611db690919063ffffffff16565b9050600c54600f54826116809190612bdd565b61168a9190612c4b565b60165f82825461169a91906126f1565b92505081905550600c54600d54826116b29190612bdd565b6116bc9190612c4b565b60145f8282546116cc91906126f1565b92505081905550600c54600e54826116e49190612bdd565b6116ee9190612c4b565b60155f8282546116fe91906126f1565b925050819055505b5b5f81111561171b5761171a8730836118a9565b5b80856117279190612c7b565b94505b6117358787876118a9565b601754601081905550505050505b505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90612ac9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90612b57565b60405180910390fd5b611990838383611dcb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90612d1e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611afc9190612337565b60405180910390a3611b0f848484611dd0565b50505050565b5f611b1f3061099e565b90505f601554601454601654611b3591906126f1565b611b3f91906126f1565b90505f8060028360165486611b549190612bdd565b611b5e9190612c4b565b611b689190612c4b565b90505f611b7e8286611dd590919063ffffffff16565b90505f479050611b8d82611dea565b5f611ba18247611dd590919063ffffffff16565b90505f611bcb87611bbd60145485611da190919063ffffffff16565b611db690919063ffffffff16565b90505f611bf588611be760155486611da190919063ffffffff16565b611db690919063ffffffff16565b90505f818385611c059190612c7b565b611c0f9190612c7b565b90505f6016819055505f6014819055505f6015819055505f87118015611c3457505f81115b15611c8157611c43878261201d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601654604051611c7893929190612d3c565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611cc690612d9e565b5f6040518083038185875af1925050503d805f8114611d00576040519150601f19603f3d011682016040523d82523d5f602084013e611d05565b606091505b50508098505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611d5090612d9e565b5f6040518083038185875af1925050503d805f8114611d8a576040519150601f19603f3d011682016040523d82523d5f602084013e611d8f565b606091505b50508098505050505050505050505050565b5f8183611dae9190612bdd565b905092915050565b5f8183611dc39190612c4b565b905092915050565b505050565b505050565b5f8183611de29190612c7b565b905092915050565b5f600267ffffffffffffffff811115611e0657611e05612493565b5b604051908082528060200260200182016040528015611e345781602001602082028036833780820191505090505b50905030815f81518110611e4b57611e4a6127b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f129190612dc6565b81600181518110611f2657611f256127b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611f8b307f000000000000000000000000000000000000000000000000000000000000000084610dd5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611fec959493929190612ee1565b5f604051808303815f87803b158015612003575f80fd5b505af1158015612015573d5f803e3d5ffd5b505050505050565b612048307f000000000000000000000000000000000000000000000000000000000000000084610dd5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016120cd96959493929190612f39565b60606040518083038185885af11580156120e9573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061210e9190612fac565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61215782612115565b612161818561211f565b935061217181856020860161212f565b61217a8161213d565b840191505092915050565b5f6020820190508181035f83015261219d818461214d565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121df826121b6565b9050919050565b6121ef816121d5565b81146121f9575f80fd5b50565b5f8135905061220a816121e6565b92915050565b5f819050919050565b61222281612210565b811461222c575f80fd5b50565b5f8135905061223d81612219565b92915050565b5f8060408385031215612259576122586121ae565b5b5f612266858286016121fc565b92505060206122778582860161222f565b9150509250929050565b5f8115159050919050565b61229581612281565b82525050565b5f6020820190506122ae5f83018461228c565b92915050565b5f819050919050565b5f6122d76122d26122cd846121b6565b6122b4565b6121b6565b9050919050565b5f6122e8826122bd565b9050919050565b5f6122f9826122de565b9050919050565b612309816122ef565b82525050565b5f6020820190506123225f830184612300565b92915050565b61233181612210565b82525050565b5f60208201905061234a5f830184612328565b92915050565b61235981612281565b8114612363575f80fd5b50565b5f8135905061237481612350565b92915050565b5f80604083850312156123905761238f6121ae565b5b5f61239d858286016121fc565b92505060206123ae85828601612366565b9150509250929050565b5f805f606084860312156123cf576123ce6121ae565b5b5f6123dc868287016121fc565b93505060206123ed868287016121fc565b92505060406123fe8682870161222f565b9150509250925092565b612411816121d5565b82525050565b5f60208201905061242a5f830184612408565b92915050565b5f60ff82169050919050565b61244581612430565b82525050565b5f60208201905061245e5f83018461243c565b92915050565b5f60208284031215612479576124786121ae565b5b5f612486848285016121fc565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124c98261213d565b810181811067ffffffffffffffff821117156124e8576124e7612493565b5b80604052505050565b5f6124fa6121a5565b905061250682826124c0565b919050565b5f67ffffffffffffffff82111561252557612524612493565b5b602082029050602081019050919050565b5f80fd5b5f61254c6125478461250b565b6124f1565b9050808382526020820190506020840283018581111561256f5761256e612536565b5b835b81811015612598578061258488826121fc565b845260208401935050602081019050612571565b5050509392505050565b5f82601f8301126125b6576125b561248f565b5b81356125c684826020860161253a565b91505092915050565b5f80604083850312156125e5576125e46121ae565b5b5f83013567ffffffffffffffff811115612602576126016121b2565b5b61260e858286016125a2565b925050602061261f85828601612366565b9150509250929050565b5f806040838503121561263f5761263e6121ae565b5b5f61264c858286016121fc565b925050602061265d858286016121fc565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806126ab57607f821691505b6020821081036126be576126bd612667565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126fb82612210565b915061270683612210565b925082820190508082111561271e5761271d6126c4565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61277e60258361211f565b915061278982612724565b604082019050919050565b5f6020820190508181035f8301526127ab81612772565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20585f8201527f5452554d50206164647265737300000000000000000000000000000000000000602082015250565b5f612839602d8361211f565b9150612844826127df565b604082019050919050565b5f6020820190508181035f8301526128668161282d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6128c760248361211f565b91506128d28261286d565b604082019050919050565b5f6020820190508181035f8301526128f4816128bb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61295560228361211f565b9150612960826128fb565b604082019050919050565b5f6020820190508181035f83015261298281612949565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6129bd60208361211f565b91506129c882612989565b602082019050919050565b5f6020820190508181035f8301526129ea816129b1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612a25601d8361211f565b9150612a30826129f1565b602082019050919050565b5f6020820190508181035f830152612a5281612a19565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612ab360258361211f565b9150612abe82612a59565b604082019050919050565b5f6020820190508181035f830152612ae081612aa7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612b4160238361211f565b9150612b4c82612ae7565b604082019050919050565b5f6020820190508181035f830152612b6e81612b35565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f612ba960188361211f565b9150612bb482612b75565b602082019050919050565b5f6020820190508181035f830152612bd681612b9d565b9050919050565b5f612be782612210565b9150612bf283612210565b9250828202612c0081612210565b91508282048414831517612c1757612c166126c4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c5582612210565b9150612c6083612210565b925082612c7057612c6f612c1e565b5b828204905092915050565b5f612c8582612210565b9150612c9083612210565b9250828203905081811115612ca857612ca76126c4565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612d0860268361211f565b9150612d1382612cae565b604082019050919050565b5f6020820190508181035f830152612d3581612cfc565b9050919050565b5f606082019050612d4f5f830186612328565b612d5c6020830185612328565b612d696040830184612328565b949350505050565b5f81905092915050565b50565b5f612d895f83612d71565b9150612d9482612d7b565b5f82019050919050565b5f612da882612d7e565b9150819050919050565b5f81519050612dc0816121e6565b92915050565b5f60208284031215612ddb57612dda6121ae565b5b5f612de884828501612db2565b91505092915050565b5f819050919050565b5f612e14612e0f612e0a84612df1565b6122b4565b612210565b9050919050565b612e2481612dfa565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e5c816121d5565b82525050565b5f612e6d8383612e53565b60208301905092915050565b5f602082019050919050565b5f612e8f82612e2a565b612e998185612e34565b9350612ea483612e44565b805f5b83811015612ed4578151612ebb8882612e62565b9750612ec683612e79565b925050600181019050612ea7565b5085935050505092915050565b5f60a082019050612ef45f830188612328565b612f016020830187612e1b565b8181036040830152612f138186612e85565b9050612f226060830185612408565b612f2f6080830184612328565b9695505050505050565b5f60c082019050612f4c5f830189612408565b612f596020830188612328565b612f666040830187612e1b565b612f736060830186612e1b565b612f806080830185612408565b612f8d60a0830184612328565b979650505050505050565b5f81519050612fa681612219565b92915050565b5f805f60608486031215612fc357612fc26121ae565b5b5f612fd086828701612f98565b9350506020612fe186828701612f98565b9250506040612ff286828701612f98565b915050925092509256fea26469706673582212209144ec32c4fe2cef9ff603dc17707cb8a8aa74998d9e8da6720583085a26525264736f6c634300081a0033
Deployed Bytecode
0x6080604052600436106101d0575f3560e01c8063715018a6116100f6578063b80161b211610094578063d85ba06311610063578063d85ba06314610671578063dd62ed3e1461069b578063e2f45605146106d7578063f2fde38b14610701576101d7565b8063b80161b2146105cd578063c04a5414146105f5578063d46980161461061f578063d7f40c7614610649576101d7565b806393ec52de116100d057806393ec52de1461050157806395d89b411461052b578063a457c2d714610555578063a9059cbb14610591576101d7565b8063715018a61461049757806375f0a874146104ad5780638da5cb5b146104d7576101d7565b8063313ce5671161016e5780634ada218b1161013d5780634ada218b146103dd5780636a486a8e146104075780636ddd17131461043157806370a082311461045b576101d7565b8063313ce56714610323578063395093511461034d5780633d6f5e3d1461038957806349bd5a5e146103b3576101d7565b806318160ddd116101aa57806318160ddd1461026b578063182073a41461029557806323b872dd146102bd57806327c8f835146102f9576101d7565b806306fdde03146101db578063095ea7b3146102055780631694505e14610241576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef610729565b6040516101fc9190612185565b60405180910390f35b348015610210575f80fd5b5061022b60048036038101906102269190612243565b6107b9565b604051610238919061229b565b60405180910390f35b34801561024c575f80fd5b506102556107db565b604051610262919061230f565b60405180910390f35b348015610276575f80fd5b5061027f6107ff565b60405161028c9190612337565b60405180910390f35b3480156102a0575f80fd5b506102bb60048036038101906102b6919061237a565b610808565b005b3480156102c8575f80fd5b506102e360048036038101906102de91906123b8565b6108b6565b6040516102f0919061229b565b60405180910390f35b348015610304575f80fd5b5061030d6108e4565b60405161031a9190612417565b60405180910390f35b34801561032e575f80fd5b506103376108ea565b604051610344919061244b565b60405180910390f35b348015610358575f80fd5b50610373600480360381019061036e9190612243565b6108f2565b604051610380919061229b565b60405180910390f35b348015610394575f80fd5b5061039d610928565b6040516103aa9190612417565b60405180910390f35b3480156103be575f80fd5b506103c761094d565b6040516103d49190612417565b60405180910390f35b3480156103e8575f80fd5b506103f1610972565b6040516103fe919061229b565b60405180910390f35b348015610412575f80fd5b5061041b610985565b6040516104289190612337565b60405180910390f35b34801561043c575f80fd5b5061044561098b565b604051610452919061229b565b60405180910390f35b348015610466575f80fd5b50610481600480360381019061047c9190612464565b61099e565b60405161048e9190612337565b60405180910390f35b3480156104a2575f80fd5b506104ab6109e3565b005b3480156104b8575f80fd5b506104c16109f6565b6040516104ce9190612417565b60405180910390f35b3480156104e2575f80fd5b506104eb610a1b565b6040516104f89190612417565b60405180910390f35b34801561050c575f80fd5b50610515610a43565b6040516105229190612337565b60405180910390f35b348015610536575f80fd5b5061053f610a49565b60405161054c9190612185565b60405180910390f35b348015610560575f80fd5b5061057b60048036038101906105769190612243565b610ad9565b604051610588919061229b565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b29190612243565b610b4e565b6040516105c4919061229b565b60405180910390f35b3480156105d8575f80fd5b506105f360048036038101906105ee9190612464565b610b70565b005b348015610600575f80fd5b50610609610bc3565b6040516106169190612417565b60405180910390f35b34801561062a575f80fd5b50610633610be8565b6040516106409190612417565b60405180910390f35b348015610654575f80fd5b5061066f600480360381019061066a91906125cf565b610c0d565b005b34801561067c575f80fd5b50610685610cbe565b6040516106929190612337565b60405180910390f35b3480156106a6575f80fd5b506106c160048036038101906106bc9190612629565b610cc4565b6040516106ce9190612337565b60405180910390f35b3480156106e2575f80fd5b506106eb610d46565b6040516106f89190612337565b60405180910390f35b34801561070c575f80fd5b5061072760048036038101906107229190612464565b610d4c565b005b60606004805461073890612694565b80601f016020809104026020016040519081016040528092919081815260200182805461076490612694565b80156107af5780601f10610786576101008083540402835291602001916107af565b820191905f5260205f20905b81548152906001019060200180831161079257829003601f168201915b5050505050905090565b5f806107c3610dce565b90506107d0818585610dd5565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610810610f98565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108aa919061229b565b60405180910390a25050565b5f806108c0610dce565b90506108cd858285611016565b6108d88585856110a1565b60019150509392505050565b61dead81565b5f6012905090565b5f806108fc610dce565b905061091d81858561090e8589610cc4565b61091891906126f1565b610dd5565b600191505092915050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60149054906101000a900460ff1681565b60105481565b600a60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109eb610f98565b6109f45f611748565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b606060058054610a5890612694565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8490612694565b8015610acf5780601f10610aa657610100808354040283529160200191610acf565b820191905f5260205f20905b815481529060010190602001808311610ab257829003601f168201915b5050505050905090565b5f80610ae3610dce565b90505f610af08286610cc4565b905083811015610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90612794565b60405180910390fd5b610b428286868403610dd5565b60019250505092915050565b5f80610b58610dce565b9050610b658185856110a1565b600191505092915050565b610b78610f98565b8060185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610bc06109e3565b50565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5b8251811015610cb95760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838281518110610c6357610c626127b2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160315610cac57610cab838281518110610c9d57610c9c6127b2565b5b60200260200101518361180b565b5b8080600101915050610c0f565b505050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b610d54610f98565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db99061284f565b60405180910390fd5b610dcb81611748565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906128dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea89061296b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f8b9190612337565b60405180910390a3505050565b610fa0610dce565b73ffffffffffffffffffffffffffffffffffffffff16610fbe610a1b565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b906129d3565b60405180910390fd5b565b5f6110218484610cc4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461109b578181101561108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490612a3b565b60405180910390fd5b61109a8484848403610dd5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110690612ac9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490612b57565b60405180910390fd5b600a60149054906101000a900460ff16806111de575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8061122f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590612bbf565b60405180910390fd5b5f81036112855761128083835f6118a9565b611743565b5f61128f3061099e565b90505f600b5482101590508080156112b35750600a60159054906101000a900460ff165b80156112cc5750600a60169054906101000a900460ff16155b801561131e5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611371575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156113c4575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611407576001600a60166101000a81548160ff0219169083151502179055506113ec611b15565b5f600a60166101000a81548160ff0219169083151502179055505b5f600a60169054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806114b6575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156114bf575f90505b5f811561172a57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561151d57505f601054115b156115e85761154b61271061153d60105488611da190919063ffffffff16565b611db690919063ffffffff16565b90506010546013548261155e9190612bdd565b6115689190612c4b565b60165f82825461157891906126f1565b92505081905550601054601154826115909190612bdd565b61159a9190612c4b565b60145f8282546115aa91906126f1565b92505081905550601054601254826115c29190612bdd565b6115cc9190612c4b565b60155f8282546115dc91906126f1565b92505081905550611707565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561163f57505f600c54115b156117065761166d61271061165f600c5488611da190919063ffffffff16565b611db690919063ffffffff16565b9050600c54600f54826116809190612bdd565b61168a9190612c4b565b60165f82825461169a91906126f1565b92505081905550600c54600d54826116b29190612bdd565b6116bc9190612c4b565b60145f8282546116cc91906126f1565b92505081905550600c54600e54826116e49190612bdd565b6116ee9190612c4b565b60155f8282546116fe91906126f1565b925050819055505b5b5f81111561171b5761171a8730836118a9565b5b80856117279190612c7b565b94505b6117358787876118a9565b601754601081905550505050505b505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90612ac9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90612b57565b60405180910390fd5b611990838383611dcb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90612d1e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611afc9190612337565b60405180910390a3611b0f848484611dd0565b50505050565b5f611b1f3061099e565b90505f601554601454601654611b3591906126f1565b611b3f91906126f1565b90505f8060028360165486611b549190612bdd565b611b5e9190612c4b565b611b689190612c4b565b90505f611b7e8286611dd590919063ffffffff16565b90505f479050611b8d82611dea565b5f611ba18247611dd590919063ffffffff16565b90505f611bcb87611bbd60145485611da190919063ffffffff16565b611db690919063ffffffff16565b90505f611bf588611be760155486611da190919063ffffffff16565b611db690919063ffffffff16565b90505f818385611c059190612c7b565b611c0f9190612c7b565b90505f6016819055505f6014819055505f6015819055505f87118015611c3457505f81115b15611c8157611c43878261201d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601654604051611c7893929190612d3c565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611cc690612d9e565b5f6040518083038185875af1925050503d805f8114611d00576040519150601f19603f3d011682016040523d82523d5f602084013e611d05565b606091505b50508098505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611d5090612d9e565b5f6040518083038185875af1925050503d805f8114611d8a576040519150601f19603f3d011682016040523d82523d5f602084013e611d8f565b606091505b50508098505050505050505050505050565b5f8183611dae9190612bdd565b905092915050565b5f8183611dc39190612c4b565b905092915050565b505050565b505050565b5f8183611de29190612c7b565b905092915050565b5f600267ffffffffffffffff811115611e0657611e05612493565b5b604051908082528060200260200182016040528015611e345781602001602082028036833780820191505090505b50905030815f81518110611e4b57611e4a6127b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f129190612dc6565b81600181518110611f2657611f256127b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611f8b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610dd5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611fec959493929190612ee1565b5f604051808303815f87803b158015612003575f80fd5b505af1158015612015573d5f803e3d5ffd5b505050505050565b612048307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610dd5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016120cd96959493929190612f39565b60606040518083038185885af11580156120e9573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061210e9190612fac565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61215782612115565b612161818561211f565b935061217181856020860161212f565b61217a8161213d565b840191505092915050565b5f6020820190508181035f83015261219d818461214d565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121df826121b6565b9050919050565b6121ef816121d5565b81146121f9575f80fd5b50565b5f8135905061220a816121e6565b92915050565b5f819050919050565b61222281612210565b811461222c575f80fd5b50565b5f8135905061223d81612219565b92915050565b5f8060408385031215612259576122586121ae565b5b5f612266858286016121fc565b92505060206122778582860161222f565b9150509250929050565b5f8115159050919050565b61229581612281565b82525050565b5f6020820190506122ae5f83018461228c565b92915050565b5f819050919050565b5f6122d76122d26122cd846121b6565b6122b4565b6121b6565b9050919050565b5f6122e8826122bd565b9050919050565b5f6122f9826122de565b9050919050565b612309816122ef565b82525050565b5f6020820190506123225f830184612300565b92915050565b61233181612210565b82525050565b5f60208201905061234a5f830184612328565b92915050565b61235981612281565b8114612363575f80fd5b50565b5f8135905061237481612350565b92915050565b5f80604083850312156123905761238f6121ae565b5b5f61239d858286016121fc565b92505060206123ae85828601612366565b9150509250929050565b5f805f606084860312156123cf576123ce6121ae565b5b5f6123dc868287016121fc565b93505060206123ed868287016121fc565b92505060406123fe8682870161222f565b9150509250925092565b612411816121d5565b82525050565b5f60208201905061242a5f830184612408565b92915050565b5f60ff82169050919050565b61244581612430565b82525050565b5f60208201905061245e5f83018461243c565b92915050565b5f60208284031215612479576124786121ae565b5b5f612486848285016121fc565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124c98261213d565b810181811067ffffffffffffffff821117156124e8576124e7612493565b5b80604052505050565b5f6124fa6121a5565b905061250682826124c0565b919050565b5f67ffffffffffffffff82111561252557612524612493565b5b602082029050602081019050919050565b5f80fd5b5f61254c6125478461250b565b6124f1565b9050808382526020820190506020840283018581111561256f5761256e612536565b5b835b81811015612598578061258488826121fc565b845260208401935050602081019050612571565b5050509392505050565b5f82601f8301126125b6576125b561248f565b5b81356125c684826020860161253a565b91505092915050565b5f80604083850312156125e5576125e46121ae565b5b5f83013567ffffffffffffffff811115612602576126016121b2565b5b61260e858286016125a2565b925050602061261f85828601612366565b9150509250929050565b5f806040838503121561263f5761263e6121ae565b5b5f61264c858286016121fc565b925050602061265d858286016121fc565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806126ab57607f821691505b6020821081036126be576126bd612667565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126fb82612210565b915061270683612210565b925082820190508082111561271e5761271d6126c4565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61277e60258361211f565b915061278982612724565b604082019050919050565b5f6020820190508181035f8301526127ab81612772565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20585f8201527f5452554d50206164647265737300000000000000000000000000000000000000602082015250565b5f612839602d8361211f565b9150612844826127df565b604082019050919050565b5f6020820190508181035f8301526128668161282d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6128c760248361211f565b91506128d28261286d565b604082019050919050565b5f6020820190508181035f8301526128f4816128bb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61295560228361211f565b9150612960826128fb565b604082019050919050565b5f6020820190508181035f83015261298281612949565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6129bd60208361211f565b91506129c882612989565b602082019050919050565b5f6020820190508181035f8301526129ea816129b1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612a25601d8361211f565b9150612a30826129f1565b602082019050919050565b5f6020820190508181035f830152612a5281612a19565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612ab360258361211f565b9150612abe82612a59565b604082019050919050565b5f6020820190508181035f830152612ae081612aa7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612b4160238361211f565b9150612b4c82612ae7565b604082019050919050565b5f6020820190508181035f830152612b6e81612b35565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f612ba960188361211f565b9150612bb482612b75565b602082019050919050565b5f6020820190508181035f830152612bd681612b9d565b9050919050565b5f612be782612210565b9150612bf283612210565b9250828202612c0081612210565b91508282048414831517612c1757612c166126c4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c5582612210565b9150612c6083612210565b925082612c7057612c6f612c1e565b5b828204905092915050565b5f612c8582612210565b9150612c9083612210565b9250828203905081811115612ca857612ca76126c4565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612d0860268361211f565b9150612d1382612cae565b604082019050919050565b5f6020820190508181035f830152612d3581612cfc565b9050919050565b5f606082019050612d4f5f830186612328565b612d5c6020830185612328565b612d696040830184612328565b949350505050565b5f81905092915050565b50565b5f612d895f83612d71565b9150612d9482612d7b565b5f82019050919050565b5f612da882612d7e565b9150819050919050565b5f81519050612dc0816121e6565b92915050565b5f60208284031215612ddb57612dda6121ae565b5b5f612de884828501612db2565b91505092915050565b5f819050919050565b5f612e14612e0f612e0a84612df1565b6122b4565b612210565b9050919050565b612e2481612dfa565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e5c816121d5565b82525050565b5f612e6d8383612e53565b60208301905092915050565b5f602082019050919050565b5f612e8f82612e2a565b612e998185612e34565b9350612ea483612e44565b805f5b83811015612ed4578151612ebb8882612e62565b9750612ec683612e79565b925050600181019050612ea7565b5085935050505092915050565b5f60a082019050612ef45f830188612328565b612f016020830187612e1b565b8181036040830152612f138186612e85565b9050612f226060830185612408565b612f2f6080830184612328565b9695505050505050565b5f60c082019050612f4c5f830189612408565b612f596020830188612328565b612f666040830187612e1b565b612f736060830186612e1b565b612f806080830185612408565b612f8d60a0830184612328565b979650505050505050565b5f81519050612fa681612219565b92915050565b5f805f60608486031215612fc357612fc26121ae565b5b5f612fd086828701612f98565b9350506020612fe186828701612f98565b9250506040612ff286828701612f98565b915050925092509256fea26469706673582212209144ec32c4fe2cef9ff603dc17707cb8a8aa74998d9e8da6720583085a26525264736f6c634300081a0033
Deployed Bytecode Sourcemap
25217:8834:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7530:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9435:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25297:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8396:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28307:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9685:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25505:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8238:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9988:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26180:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25355:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25567:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25861:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25603:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8567:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1773:103;;;;;;;;;;;;;:::i;:::-;;25392:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1132:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7069:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7749:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10266:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8929:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28700:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25429:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25468:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28839:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25706:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9226:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25664:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2031:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7530:100;7584:13;7617:5;7610:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7530:100;:::o;9435:242::-;9554:4;9576:13;9592:12;:10;:12::i;:::-;9576:28;;9615:32;9624:5;9631:7;9640:6;9615:8;:32::i;:::-;9665:4;9658:11;;;9435:242;;;;:::o;25297:51::-;;;:::o;8396:108::-;8457:7;8484:12;;8477:19;;8396:108;:::o;28307:205::-;1018:13;:11;:13::i;:::-;28446:8:::1;28409:25;:34;28435:7;28409:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;28486:7;28470:34;;;28495:8;28470:34;;;;;;:::i;:::-;;;;;;;;28307:205:::0;;:::o;9685:295::-;9816:4;9833:15;9851:12;:10;:12::i;:::-;9833:30;;9874:38;9890:4;9896:7;9905:6;9874:15;:38::i;:::-;9923:27;9933:4;9939:2;9943:6;9923:9;:27::i;:::-;9968:4;9961:11;;;9685:295;;;;;:::o;25505:53::-;25551:6;25505:53;:::o;8238:93::-;8296:5;8321:2;8314:9;;8238:93;:::o;9988:270::-;10103:4;10125:13;10141:12;:10;:12::i;:::-;10125:28;;10164:64;10173:5;10180:7;10217:10;10189:25;10199:5;10206:7;10189:9;:25::i;:::-;:38;;;;:::i;:::-;10164:8;:64::i;:::-;10246:4;10239:11;;;9988:270;;;;:::o;26180:30::-;;;;;;;;;;;;;:::o;25355:28::-;;;;;;;;;;;;;:::o;25567:26::-;;;;;;;;;;;;;:::o;25861:28::-;;;;:::o;25603:23::-;;;;;;;;;;;;;:::o;8567:177::-;8686:7;8718:9;:18;8728:7;8718:18;;;;;;;;;;;;;;;;8711:25;;8567:177;;;:::o;1773:103::-;1018:13;:11;:13::i;:::-;1838:30:::1;1865:1;1838:18;:30::i;:::-;1773:103::o:0;25392:30::-;;;;;;;;;;;;;:::o;1132:87::-;1178:7;1205:6;;;;;;;;;;;1198:13;;1132:87;:::o;7069:26::-;;;;:::o;7749:104::-;7805:13;7838:7;7831:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7749:104;:::o;10266:505::-;10386:4;10408:13;10424:12;:10;:12::i;:::-;10408:28;;10447:24;10474:25;10484:5;10491:7;10474:9;:25::i;:::-;10447:52;;10552:15;10532:16;:35;;10510:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;10668:60;10677:5;10684:7;10712:15;10693:16;:34;10668:8;:60::i;:::-;10759:4;10752:11;;;;10266:505;;;;:::o;8929:234::-;9044:4;9066:13;9082:12;:10;:12::i;:::-;9066:28;;9105;9115:5;9122:2;9126:6;9105:9;:28::i;:::-;9151:4;9144:11;;;8929:234;;;;:::o;28700:127::-;1018:13;:11;:13::i;:::-;28777:2:::1;28759:15;;:20;;;;;;;;;;;;;;;;;;28790:19;:17;:19::i;:::-;28700:127:::0;:::o;25429:32::-;;;;;;;;;;;;;:::o;25468:30::-;;;;;;;;;;;;;:::o;28839:241::-;28921:9;28916:157;28940:8;:15;28936:1;:19;28916:157;;;28995:13;;;;;;;;;;;28980:28;;:8;28989:1;28980:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;28977:41;29010:8;28977:41;29033:28;29042:8;29051:1;29042:11;;;;;;;;:::i;:::-;;;;;;;;29055:5;29033:8;:28::i;:::-;28916:157;28957:3;;;;;;;28916:157;;;;28839:241;;:::o;25706:27::-;;;;:::o;9226:201::-;9360:7;9392:11;:18;9404:5;9392:18;;;;;;;;;;;;;;;:27;9411:7;9392:27;;;;;;;;;;;;;;;;9385:34;;9226:201;;;;:::o;25664:33::-;;;;:::o;2031:245::-;1018:13;:11;:13::i;:::-;2154:1:::1;2134:22;;:8;:22;;::::0;2112:117:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2240:28;2259:8;2240:18;:28::i;:::-;2031:245:::0;:::o;183:98::-;236:7;263:10;256:17;;183:98;:::o;12910:380::-;13063:1;13046:19;;:5;:19;;;13038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13144:1;13125:21;;:7;:21;;;13117:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13228:6;13198:11;:18;13210:5;13198:18;;;;;;;;;;;;;;;:27;13217:7;13198:27;;;;;;;;;;;;;;;:36;;;;13266:7;13250:32;;13259:5;13250:32;;;13275:6;13250:32;;;;;;:::i;:::-;;;;;;;;12910:380;;;:::o;1297:132::-;1372:12;:10;:12::i;:::-;1361:23;;:7;:5;:7::i;:::-;:23;;;1353:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1297:132::o;13298:502::-;13433:24;13460:25;13470:5;13477:7;13460:9;:25::i;:::-;13433:52;;13520:17;13500:16;:37;13496:297;;13600:6;13580:16;:26;;13554:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;13715:51;13724:5;13731:7;13759:6;13740:16;:25;13715:8;:51::i;:::-;13496:297;13422:378;13298:502;;;:::o;29092:2448::-;29240:1;29224:18;;:4;:18;;;29216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29317:1;29303:16;;:2;:16;;;29295:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29378:14;;;;;;;;;;;:49;;;;29396:25;:31;29422:4;29396:31;;;;;;;;;;;;;;;;;;;;;;;;;29378:49;:82;;;;29431:25;:29;29457:2;29431:29;;;;;;;;;;;;;;;;;;;;;;;;;29378:82;29370:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;29514:1;29504:6;:11;29500:93;;29532:28;29548:4;29554:2;29558:1;29532:15;:28::i;:::-;29575:7;;29500:93;29607:28;29638:24;29656:4;29638:9;:24::i;:::-;29607:55;;29675:12;29714:18;;29690:20;:42;;29675:57;;29763:7;:35;;;;;29787:11;;;;;;;;;;;29763:35;:48;;;;;29802:9;;;;;;;;;;;29801:10;29763:48;:82;;;;;29813:26;:32;29840:4;29813:32;;;;;;;;;;;;;;;;;;;;;;;;;29763:82;:131;;;;;29863:25;:31;29889:4;29863:31;;;;;;;;;;;;;;;;;;;;;;;;;29862:32;29763:131;:178;;;;;29912:25;:29;29938:2;29912:29;;;;;;;;;;;;;;;;;;;;;;;;;29911:30;29763:178;29745:313;;;29980:4;29968:9;;:16;;;;;;;;;;;;;;;;;;30001:11;:9;:11::i;:::-;30041:5;30029:9;;:17;;;;;;;;;;;;;;;;;;29745:313;30070:12;30086:9;;;;;;;;;;;30085:10;30070:25;;30112;:31;30138:4;30112:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;30147:25;:29;30173:2;30147:29;;;;;;;;;;;;;;;;;;;;;;;;;30112:64;30108:112;;;30203:5;30193:15;;30108:112;30232:12;30265:7;30261:1187;;;30317:26;:30;30344:2;30317:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30367:1;30351:13;;:17;30317:51;30313:986;;;30396:36;30426:5;30396:25;30407:13;;30396:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;30389:43;;30545:13;;30503:17;;30496:4;:24;;;;:::i;:::-;30495:63;;;;:::i;:::-;30451:19;;:107;;;;;;;:::i;:::-;;;;;;;;30671:13;;30629:17;;30622:4;:24;;;;:::i;:::-;30621:63;;;;:::i;:::-;30577:19;;:107;;;;;;;:::i;:::-;;;;;;;;30801:13;;30757:19;;30750:4;:26;;;;:::i;:::-;30749:65;;;;:::i;:::-;30703:21;;:111;;;;;;;:::i;:::-;;;;;;;;30313:986;;;30876:26;:32;30903:4;30876:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;30927:1;30912:12;;:16;30876:52;30872:427;;;30956:35;30985:5;30956:24;30967:12;;30956:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;30949:42;;31061:12;;31041:16;;31034:4;:23;;;;:::i;:::-;31033:40;;;;:::i;:::-;31010:19;;:63;;;;;;;:::i;:::-;;;;;;;;31143:12;;31123:16;;31116:4;:23;;;;:::i;:::-;31115:40;;;;:::i;:::-;31092:19;;:63;;;;;;;:::i;:::-;;;;;;;;31271:12;;31228:18;;31221:4;:25;;;;:::i;:::-;31220:63;;;;:::i;:::-;31174:21;;:109;;;;;;;:::i;:::-;;;;;;;;30872:427;30313:986;31326:1;31319:4;:8;31315:91;;;31348:42;31364:4;31378;31385;31348:15;:42::i;:::-;31315:91;31432:4;31422:14;;;;;:::i;:::-;;;30261:1187;31460:33;31476:4;31482:2;31486:6;31460:15;:33::i;:::-;31520:12;;31504:13;:28;;;;29205:2335;;;;29092:2448;;;;:::o;2436:191::-;2510:16;2529:6;;;;;;;;;;;2510:25;;2555:8;2546:6;;:17;;;;;;;;;;;;;;;;;;2610:8;2579:40;;2600:8;2579:40;;;;;;;;;;;;2499:128;2436:191;:::o;28518:168::-;28617:5;28582:26;:32;28609:4;28582:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28672:5;28638:40;;28666:4;28638:40;;;;;;;;;;;;28518:168;;:::o;10779:877::-;10926:1;10910:18;;:4;:18;;;10902:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11003:1;10989:16;;:2;:16;;;10981:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11058:38;11079:4;11085:2;11089:6;11058:20;:38::i;:::-;11109:19;11131:9;:15;11141:4;11131:15;;;;;;;;;;;;;;;;11109:37;;11194:6;11179:11;:21;;11157:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;11334:6;11320:11;:20;11302:9;:15;11312:4;11302:15;;;;;;;;;;;;;;;:38;;;;11537:6;11520:9;:13;11530:2;11520:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;11587:2;11572:26;;11581:4;11572:26;;;11591:6;11572:26;;;;;;:::i;:::-;;;;;;;;11611:37;11631:4;11637:2;11641:6;11611:19;:37::i;:::-;10891:765;10779:877;;;:::o;32439:1607::-;32480:23;32506:24;32524:4;32506:9;:24::i;:::-;32480:50;;32541:25;32639:21;;32604:19;;32569;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;32541:119;;32671:12;32698:23;32812:1;32779:17;32743:19;;32725:15;:37;;;;:::i;:::-;32724:72;;;;:::i;:::-;:89;;;;:::i;:::-;32698:115;;32824:26;32853:36;32873:15;32853;:19;;:36;;;;:::i;:::-;32824:65;;32902:25;32930:21;32902:49;;32964:37;32982:18;32964:17;:37::i;:::-;33014:18;33035:44;33061:17;33035:21;:25;;:44;;;;:::i;:::-;33014:65;;33092:23;33118:82;33172:17;33118:35;33133:19;;33118:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;33092:108;;33213:25;33241:84;33297:17;33241:37;33256:21;;33241:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;33213:112;;33338:23;33421:17;33390:15;33364:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;33338:100;;33473:1;33451:19;:23;;;;33507:1;33485:19;:23;;;;33543:1;33519:21;:25;;;;33579:1;33561:15;:19;:42;;;;;33602:1;33584:15;:19;33561:42;33557:280;;;33620:47;33634:15;33651;33620:13;:47::i;:::-;33687:138;33720:18;33757:15;33791:19;;33687:138;;;;;;;;:::i;:::-;;;;;;;;33557:280;33871:17;;;;;;;;;;;33863:31;;33902:17;33863:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33849:75;;;;;33959:15;;;;;;;;;;;33951:29;;34002:21;33951:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33937:101;;;;;32469:1577;;;;;;;;;;32439:1607::o;17391:98::-;17449:7;17480:1;17476;:5;;;;:::i;:::-;17469:12;;17391:98;;;;:::o;17714:::-;17772:7;17803:1;17799;:5;;;;:::i;:::-;17792:12;;17714:98;;;;:::o;13808:125::-;;;;:::o;13941:124::-;;;;:::o;17034:98::-;17092:7;17123:1;17119;:5;;;;:::i;:::-;17112:12;;17034:98;;;;:::o;31548:503::-;31616:21;31654:1;31640:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31616:40;;31685:4;31667;31672:1;31667:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31711:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31701:4;31706:1;31701:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31746:62;31763:4;31778:15;31796:11;31746:8;:62::i;:::-;31847:15;:66;;;31928:11;31954:1;31970:4;31997;32017:15;31847:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31605:446;31548:503;:::o;32059:372::-;32142:62;32159:4;32174:15;32192:11;32142:8;:62::i;:::-;32217:15;:31;;;32256:9;32289:4;32309:11;32335:1;32351;32367:15;;;;;;;;;;;32397;32217:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32059:372;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:60::-;3367:3;3388:5;3381:12;;3339:60;;;:::o;3405:142::-;3455:9;3488:53;3506:34;3515:24;3533:5;3515:24;:::i;:::-;3506:34;:::i;:::-;3488:53;:::i;:::-;3475:66;;3405:142;;;:::o;3553:126::-;3603:9;3636:37;3667:5;3636:37;:::i;:::-;3623:50;;3553:126;;;:::o;3685:153::-;3762:9;3795:37;3826:5;3795:37;:::i;:::-;3782:50;;3685:153;;;:::o;3844:185::-;3958:64;4016:5;3958:64;:::i;:::-;3953:3;3946:77;3844:185;;:::o;4035:276::-;4155:4;4193:2;4182:9;4178:18;4170:26;;4206:98;4301:1;4290:9;4286:17;4277:6;4206:98;:::i;:::-;4035:276;;;;:::o;4317:118::-;4404:24;4422:5;4404:24;:::i;:::-;4399:3;4392:37;4317:118;;:::o;4441:222::-;4534:4;4572:2;4561:9;4557:18;4549:26;;4585:71;4653:1;4642:9;4638:17;4629:6;4585:71;:::i;:::-;4441:222;;;;:::o;4669:116::-;4739:21;4754:5;4739:21;:::i;:::-;4732:5;4729:32;4719:60;;4775:1;4772;4765:12;4719:60;4669:116;:::o;4791:133::-;4834:5;4872:6;4859:20;4850:29;;4888:30;4912:5;4888:30;:::i;:::-;4791:133;;;;:::o;4930:468::-;4995:6;5003;5052:2;5040:9;5031:7;5027:23;5023:32;5020:119;;;5058:79;;:::i;:::-;5020:119;5178:1;5203:53;5248:7;5239:6;5228:9;5224:22;5203:53;:::i;:::-;5193:63;;5149:117;5305:2;5331:50;5373:7;5364:6;5353:9;5349:22;5331:50;:::i;:::-;5321:60;;5276:115;4930:468;;;;;:::o;5404:619::-;5481:6;5489;5497;5546:2;5534:9;5525:7;5521:23;5517:32;5514:119;;;5552:79;;:::i;:::-;5514:119;5672:1;5697:53;5742:7;5733:6;5722:9;5718:22;5697:53;:::i;:::-;5687:63;;5643:117;5799:2;5825:53;5870:7;5861:6;5850:9;5846:22;5825:53;:::i;:::-;5815:63;;5770:118;5927:2;5953:53;5998:7;5989:6;5978:9;5974:22;5953:53;:::i;:::-;5943:63;;5898:118;5404:619;;;;;:::o;6029:118::-;6116:24;6134:5;6116:24;:::i;:::-;6111:3;6104:37;6029:118;;:::o;6153:222::-;6246:4;6284:2;6273:9;6269:18;6261:26;;6297:71;6365:1;6354:9;6350:17;6341:6;6297:71;:::i;:::-;6153:222;;;;:::o;6381:86::-;6416:7;6456:4;6449:5;6445:16;6434:27;;6381:86;;;:::o;6473:112::-;6556:22;6572:5;6556:22;:::i;:::-;6551:3;6544:35;6473:112;;:::o;6591:214::-;6680:4;6718:2;6707:9;6703:18;6695:26;;6731:67;6795:1;6784:9;6780:17;6771:6;6731:67;:::i;:::-;6591:214;;;;:::o;6811:329::-;6870:6;6919:2;6907:9;6898:7;6894:23;6890:32;6887:119;;;6925:79;;:::i;:::-;6887:119;7045:1;7070:53;7115:7;7106:6;7095:9;7091:22;7070:53;:::i;:::-;7060:63;;7016:117;6811:329;;;;:::o;7146:117::-;7255:1;7252;7245:12;7269:180;7317:77;7314:1;7307:88;7414:4;7411:1;7404:15;7438:4;7435:1;7428:15;7455:281;7538:27;7560:4;7538:27;:::i;:::-;7530:6;7526:40;7668:6;7656:10;7653:22;7632:18;7620:10;7617:34;7614:62;7611:88;;;7679:18;;:::i;:::-;7611:88;7719:10;7715:2;7708:22;7498:238;7455:281;;:::o;7742:129::-;7776:6;7803:20;;:::i;:::-;7793:30;;7832:33;7860:4;7852:6;7832:33;:::i;:::-;7742:129;;;:::o;7877:311::-;7954:4;8044:18;8036:6;8033:30;8030:56;;;8066:18;;:::i;:::-;8030:56;8116:4;8108:6;8104:17;8096:25;;8176:4;8170;8166:15;8158:23;;7877:311;;;:::o;8194:117::-;8303:1;8300;8293:12;8334:710;8430:5;8455:81;8471:64;8528:6;8471:64;:::i;:::-;8455:81;:::i;:::-;8446:90;;8556:5;8585:6;8578:5;8571:21;8619:4;8612:5;8608:16;8601:23;;8672:4;8664:6;8660:17;8652:6;8648:30;8701:3;8693:6;8690:15;8687:122;;;8720:79;;:::i;:::-;8687:122;8835:6;8818:220;8852:6;8847:3;8844:15;8818:220;;;8927:3;8956:37;8989:3;8977:10;8956:37;:::i;:::-;8951:3;8944:50;9023:4;9018:3;9014:14;9007:21;;8894:144;8878:4;8873:3;8869:14;8862:21;;8818:220;;;8822:21;8436:608;;8334:710;;;;;:::o;9067:370::-;9138:5;9187:3;9180:4;9172:6;9168:17;9164:27;9154:122;;9195:79;;:::i;:::-;9154:122;9312:6;9299:20;9337:94;9427:3;9419:6;9412:4;9404:6;9400:17;9337:94;:::i;:::-;9328:103;;9144:293;9067:370;;;;:::o;9443:678::-;9533:6;9541;9590:2;9578:9;9569:7;9565:23;9561:32;9558:119;;;9596:79;;:::i;:::-;9558:119;9744:1;9733:9;9729:17;9716:31;9774:18;9766:6;9763:30;9760:117;;;9796:79;;:::i;:::-;9760:117;9901:78;9971:7;9962:6;9951:9;9947:22;9901:78;:::i;:::-;9891:88;;9687:302;10028:2;10054:50;10096:7;10087:6;10076:9;10072:22;10054:50;:::i;:::-;10044:60;;9999:115;9443:678;;;;;:::o;10127:474::-;10195:6;10203;10252:2;10240:9;10231:7;10227:23;10223:32;10220:119;;;10258:79;;:::i;:::-;10220:119;10378:1;10403:53;10448:7;10439:6;10428:9;10424:22;10403:53;:::i;:::-;10393:63;;10349:117;10505:2;10531:53;10576:7;10567:6;10556:9;10552:22;10531:53;:::i;:::-;10521:63;;10476:118;10127:474;;;;;:::o;10607:180::-;10655:77;10652:1;10645:88;10752:4;10749:1;10742:15;10776:4;10773:1;10766:15;10793:320;10837:6;10874:1;10868:4;10864:12;10854:22;;10921:1;10915:4;10911:12;10942:18;10932:81;;10998:4;10990:6;10986:17;10976:27;;10932:81;11060:2;11052:6;11049:14;11029:18;11026:38;11023:84;;11079:18;;:::i;:::-;11023:84;10844:269;10793:320;;;:::o;11119:180::-;11167:77;11164:1;11157:88;11264:4;11261:1;11254:15;11288:4;11285:1;11278:15;11305:191;11345:3;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11441:1;11438;11434:9;11427:16;;11462:3;11459:1;11456:10;11453:36;;;11469:18;;:::i;:::-;11453:36;11305:191;;;;:::o;11502:224::-;11642:34;11638:1;11630:6;11626:14;11619:58;11711:7;11706:2;11698:6;11694:15;11687:32;11502:224;:::o;11732:366::-;11874:3;11895:67;11959:2;11954:3;11895:67;:::i;:::-;11888:74;;11971:93;12060:3;11971:93;:::i;:::-;12089:2;12084:3;12080:12;12073:19;;11732:366;;;:::o;12104:419::-;12270:4;12308:2;12297:9;12293:18;12285:26;;12357:9;12351:4;12347:20;12343:1;12332:9;12328:17;12321:47;12385:131;12511:4;12385:131;:::i;:::-;12377:139;;12104:419;;;:::o;12529:180::-;12577:77;12574:1;12567:88;12674:4;12671:1;12664:15;12698:4;12695:1;12688:15;12715:232;12855:34;12851:1;12843:6;12839:14;12832:58;12924:15;12919:2;12911:6;12907:15;12900:40;12715:232;:::o;12953:366::-;13095:3;13116:67;13180:2;13175:3;13116:67;:::i;:::-;13109:74;;13192:93;13281:3;13192:93;:::i;:::-;13310:2;13305:3;13301:12;13294:19;;12953:366;;;:::o;13325:419::-;13491:4;13529:2;13518:9;13514:18;13506:26;;13578:9;13572:4;13568:20;13564:1;13553:9;13549:17;13542:47;13606:131;13732:4;13606:131;:::i;:::-;13598:139;;13325:419;;;:::o;13750:223::-;13890:34;13886:1;13878:6;13874:14;13867:58;13959:6;13954:2;13946:6;13942:15;13935:31;13750:223;:::o;13979:366::-;14121:3;14142:67;14206:2;14201:3;14142:67;:::i;:::-;14135:74;;14218:93;14307:3;14218:93;:::i;:::-;14336:2;14331:3;14327:12;14320:19;;13979:366;;;:::o;14351:419::-;14517:4;14555:2;14544:9;14540:18;14532:26;;14604:9;14598:4;14594:20;14590:1;14579:9;14575:17;14568:47;14632:131;14758:4;14632:131;:::i;:::-;14624:139;;14351:419;;;:::o;14776:221::-;14916:34;14912:1;14904:6;14900:14;14893:58;14985:4;14980:2;14972:6;14968:15;14961:29;14776:221;:::o;15003:366::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:419::-;15541:4;15579:2;15568:9;15564:18;15556:26;;15628:9;15622:4;15618:20;15614:1;15603:9;15599:17;15592:47;15656:131;15782:4;15656:131;:::i;:::-;15648:139;;15375:419;;;:::o;15800:182::-;15940:34;15936:1;15928:6;15924:14;15917:58;15800:182;:::o;15988:366::-;16130:3;16151:67;16215:2;16210:3;16151:67;:::i;:::-;16144:74;;16227:93;16316:3;16227:93;:::i;:::-;16345:2;16340:3;16336:12;16329:19;;15988:366;;;:::o;16360:419::-;16526:4;16564:2;16553:9;16549:18;16541:26;;16613:9;16607:4;16603:20;16599:1;16588:9;16584:17;16577:47;16641:131;16767:4;16641:131;:::i;:::-;16633:139;;16360:419;;;:::o;16785:179::-;16925:31;16921:1;16913:6;16909:14;16902:55;16785:179;:::o;16970:366::-;17112:3;17133:67;17197:2;17192:3;17133:67;:::i;:::-;17126:74;;17209:93;17298:3;17209:93;:::i;:::-;17327:2;17322:3;17318:12;17311:19;;16970:366;;;:::o;17342:419::-;17508:4;17546:2;17535:9;17531:18;17523:26;;17595:9;17589:4;17585:20;17581:1;17570:9;17566:17;17559:47;17623:131;17749:4;17623:131;:::i;:::-;17615:139;;17342:419;;;:::o;17767:224::-;17907:34;17903:1;17895:6;17891:14;17884:58;17976:7;17971:2;17963:6;17959:15;17952:32;17767:224;:::o;17997:366::-;18139:3;18160:67;18224:2;18219:3;18160:67;:::i;:::-;18153:74;;18236:93;18325:3;18236:93;:::i;:::-;18354:2;18349:3;18345:12;18338:19;;17997:366;;;:::o;18369:419::-;18535:4;18573:2;18562:9;18558:18;18550:26;;18622:9;18616:4;18612:20;18608:1;18597:9;18593:17;18586:47;18650:131;18776:4;18650:131;:::i;:::-;18642:139;;18369:419;;;:::o;18794:222::-;18934:34;18930:1;18922:6;18918:14;18911:58;19003:5;18998:2;18990:6;18986:15;18979:30;18794:222;:::o;19022:366::-;19164:3;19185:67;19249:2;19244:3;19185:67;:::i;:::-;19178:74;;19261:93;19350:3;19261:93;:::i;:::-;19379:2;19374:3;19370:12;19363:19;;19022:366;;;:::o;19394:419::-;19560:4;19598:2;19587:9;19583:18;19575:26;;19647:9;19641:4;19637:20;19633:1;19622:9;19618:17;19611:47;19675:131;19801:4;19675:131;:::i;:::-;19667:139;;19394:419;;;:::o;19819:174::-;19959:26;19955:1;19947:6;19943:14;19936:50;19819:174;:::o;19999:366::-;20141:3;20162:67;20226:2;20221:3;20162:67;:::i;:::-;20155:74;;20238:93;20327:3;20238:93;:::i;:::-;20356:2;20351:3;20347:12;20340:19;;19999:366;;;:::o;20371:419::-;20537:4;20575:2;20564:9;20560:18;20552:26;;20624:9;20618:4;20614:20;20610:1;20599:9;20595:17;20588:47;20652:131;20778:4;20652:131;:::i;:::-;20644:139;;20371:419;;;:::o;20796:410::-;20836:7;20859:20;20877:1;20859:20;:::i;:::-;20854:25;;20893:20;20911:1;20893:20;:::i;:::-;20888:25;;20948:1;20945;20941:9;20970:30;20988:11;20970:30;:::i;:::-;20959:41;;21149:1;21140:7;21136:15;21133:1;21130:22;21110:1;21103:9;21083:83;21060:139;;21179:18;;:::i;:::-;21060:139;20844:362;20796:410;;;;:::o;21212:180::-;21260:77;21257:1;21250:88;21357:4;21354:1;21347:15;21381:4;21378:1;21371:15;21398:185;21438:1;21455:20;21473:1;21455:20;:::i;:::-;21450:25;;21489:20;21507:1;21489:20;:::i;:::-;21484:25;;21528:1;21518:35;;21533:18;;:::i;:::-;21518:35;21575:1;21572;21568:9;21563:14;;21398:185;;;;:::o;21589:194::-;21629:4;21649:20;21667:1;21649:20;:::i;:::-;21644:25;;21683:20;21701:1;21683:20;:::i;:::-;21678:25;;21727:1;21724;21720:9;21712:17;;21751:1;21745:4;21742:11;21739:37;;;21756:18;;:::i;:::-;21739:37;21589:194;;;;:::o;21789:225::-;21929:34;21925:1;21917:6;21913:14;21906:58;21998:8;21993:2;21985:6;21981:15;21974:33;21789:225;:::o;22020:366::-;22162:3;22183:67;22247:2;22242:3;22183:67;:::i;:::-;22176:74;;22259:93;22348:3;22259:93;:::i;:::-;22377:2;22372:3;22368:12;22361:19;;22020:366;;;:::o;22392:419::-;22558:4;22596:2;22585:9;22581:18;22573:26;;22645:9;22639:4;22635:20;22631:1;22620:9;22616:17;22609:47;22673:131;22799:4;22673:131;:::i;:::-;22665:139;;22392:419;;;:::o;22817:442::-;22966:4;23004:2;22993:9;22989:18;22981:26;;23017:71;23085:1;23074:9;23070:17;23061:6;23017:71;:::i;:::-;23098:72;23166:2;23155:9;23151:18;23142:6;23098:72;:::i;:::-;23180;23248:2;23237:9;23233:18;23224:6;23180:72;:::i;:::-;22817:442;;;;;;:::o;23265:147::-;23366:11;23403:3;23388:18;;23265:147;;;;:::o;23418:114::-;;:::o;23538:398::-;23697:3;23718:83;23799:1;23794:3;23718:83;:::i;:::-;23711:90;;23810:93;23899:3;23810:93;:::i;:::-;23928:1;23923:3;23919:11;23912:18;;23538:398;;;:::o;23942:379::-;24126:3;24148:147;24291:3;24148:147;:::i;:::-;24141:154;;24312:3;24305:10;;23942:379;;;:::o;24327:143::-;24384:5;24415:6;24409:13;24400:22;;24431:33;24458:5;24431:33;:::i;:::-;24327:143;;;;:::o;24476:351::-;24546:6;24595:2;24583:9;24574:7;24570:23;24566:32;24563:119;;;24601:79;;:::i;:::-;24563:119;24721:1;24746:64;24802:7;24793:6;24782:9;24778:22;24746:64;:::i;:::-;24736:74;;24692:128;24476:351;;;;:::o;24833:85::-;24878:7;24907:5;24896:16;;24833:85;;;:::o;24924:158::-;24982:9;25015:61;25033:42;25042:32;25068:5;25042:32;:::i;:::-;25033:42;:::i;:::-;25015:61;:::i;:::-;25002:74;;24924:158;;;:::o;25088:147::-;25183:45;25222:5;25183:45;:::i;:::-;25178:3;25171:58;25088:147;;:::o;25241:114::-;25308:6;25342:5;25336:12;25326:22;;25241:114;;;:::o;25361:184::-;25460:11;25494:6;25489:3;25482:19;25534:4;25529:3;25525:14;25510:29;;25361:184;;;;:::o;25551:132::-;25618:4;25641:3;25633:11;;25671:4;25666:3;25662:14;25654:22;;25551:132;;;:::o;25689:108::-;25766:24;25784:5;25766:24;:::i;:::-;25761:3;25754:37;25689:108;;:::o;25803:179::-;25872:10;25893:46;25935:3;25927:6;25893:46;:::i;:::-;25971:4;25966:3;25962:14;25948:28;;25803:179;;;;:::o;25988:113::-;26058:4;26090;26085:3;26081:14;26073:22;;25988:113;;;:::o;26137:732::-;26256:3;26285:54;26333:5;26285:54;:::i;:::-;26355:86;26434:6;26429:3;26355:86;:::i;:::-;26348:93;;26465:56;26515:5;26465:56;:::i;:::-;26544:7;26575:1;26560:284;26585:6;26582:1;26579:13;26560:284;;;26661:6;26655:13;26688:63;26747:3;26732:13;26688:63;:::i;:::-;26681:70;;26774:60;26827:6;26774:60;:::i;:::-;26764:70;;26620:224;26607:1;26604;26600:9;26595:14;;26560:284;;;26564:14;26860:3;26853:10;;26261:608;;;26137:732;;;;:::o;26875:831::-;27138:4;27176:3;27165:9;27161:19;27153:27;;27190:71;27258:1;27247:9;27243:17;27234:6;27190:71;:::i;:::-;27271:80;27347:2;27336:9;27332:18;27323:6;27271:80;:::i;:::-;27398:9;27392:4;27388:20;27383:2;27372:9;27368:18;27361:48;27426:108;27529:4;27520:6;27426:108;:::i;:::-;27418:116;;27544:72;27612:2;27601:9;27597:18;27588:6;27544:72;:::i;:::-;27626:73;27694:3;27683:9;27679:19;27670:6;27626:73;:::i;:::-;26875:831;;;;;;;;:::o;27712:807::-;27961:4;27999:3;27988:9;27984:19;27976:27;;28013:71;28081:1;28070:9;28066:17;28057:6;28013:71;:::i;:::-;28094:72;28162:2;28151:9;28147:18;28138:6;28094:72;:::i;:::-;28176:80;28252:2;28241:9;28237:18;28228:6;28176:80;:::i;:::-;28266;28342:2;28331:9;28327:18;28318:6;28266:80;:::i;:::-;28356:73;28424:3;28413:9;28409:19;28400:6;28356:73;:::i;:::-;28439;28507:3;28496:9;28492:19;28483:6;28439:73;:::i;:::-;27712:807;;;;;;;;;:::o;28525:143::-;28582:5;28613:6;28607:13;28598:22;;28629:33;28656:5;28629:33;:::i;:::-;28525:143;;;;:::o;28674:663::-;28762:6;28770;28778;28827:2;28815:9;28806:7;28802:23;28798:32;28795:119;;;28833:79;;:::i;:::-;28795:119;28953:1;28978:64;29034:7;29025:6;29014:9;29010:22;28978:64;:::i;:::-;28968:74;;28924:128;29091:2;29117:64;29173:7;29164:6;29153:9;29149:22;29117:64;:::i;:::-;29107:74;;29062:129;29230:2;29256:64;29312:7;29303:6;29292:9;29288:22;29256:64;:::i;:::-;29246:74;;29201:129;28674:663;;;;;:::o
Swarm Source
ipfs://9144ec32c4fe2cef9ff603dc17707cb8a8aa74998d9e8da6720583085a265252
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.