Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 213 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20848999 | 7 hrs ago | IN | 0 ETH | 0.00033801 | ||||
Approve | 20847760 | 11 hrs ago | IN | 0 ETH | 0.00042257 | ||||
Approve | 20846688 | 15 hrs ago | IN | 0 ETH | 0.00041877 | ||||
Approve | 20844350 | 22 hrs ago | IN | 0 ETH | 0.00087137 | ||||
Approve | 20841148 | 33 hrs ago | IN | 0 ETH | 0.00128691 | ||||
Approve | 20840591 | 35 hrs ago | IN | 0 ETH | 0.00055745 | ||||
Approve | 20840140 | 37 hrs ago | IN | 0 ETH | 0.00097801 | ||||
Approve | 20840136 | 37 hrs ago | IN | 0 ETH | 0.00041348 | ||||
Approve | 20840100 | 37 hrs ago | IN | 0 ETH | 0.00057869 | ||||
Transfer | 20840060 | 37 hrs ago | IN | 0 ETH | 0.00078152 | ||||
Approve | 20840049 | 37 hrs ago | IN | 0 ETH | 0.00029296 | ||||
Approve | 20840045 | 37 hrs ago | IN | 0 ETH | 0.00027549 | ||||
Approve | 20840018 | 37 hrs ago | IN | 0 ETH | 0.00024745 | ||||
Approve | 20840010 | 37 hrs ago | IN | 0 ETH | 0.00025867 | ||||
Approve | 20840003 | 37 hrs ago | IN | 0 ETH | 0.00025714 | ||||
Approve | 20839999 | 37 hrs ago | IN | 0 ETH | 0.00026946 | ||||
Approve | 20839995 | 37 hrs ago | IN | 0 ETH | 0.00045829 | ||||
Approve | 20839814 | 38 hrs ago | IN | 0 ETH | 0.00069939 | ||||
Approve | 20839718 | 38 hrs ago | IN | 0 ETH | 0.00075648 | ||||
Approve | 20839634 | 38 hrs ago | IN | 0 ETH | 0.00055438 | ||||
Approve | 20839545 | 39 hrs ago | IN | 0 ETH | 0.00066012 | ||||
Approve | 20839327 | 39 hrs ago | IN | 0 ETH | 0.00075229 | ||||
Approve | 20839188 | 40 hrs ago | IN | 0 ETH | 0.00092624 | ||||
Approve | 20839163 | 40 hrs ago | IN | 0 ETH | 0.00139681 | ||||
Approve | 20839139 | 40 hrs ago | IN | 0 ETH | 0.00075442 |
Latest 20 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20838414 | 42 hrs ago | 0.29744279 ETH | ||||
20838414 | 42 hrs ago | 0.29744279 ETH | ||||
20838409 | 42 hrs ago | 0.45967646 ETH | ||||
20838409 | 42 hrs ago | 0.45967646 ETH | ||||
20838403 | 42 hrs ago | 0.52550212 ETH | ||||
20838403 | 42 hrs ago | 0.52550212 ETH | ||||
20838399 | 42 hrs ago | 0.4094351 ETH | ||||
20838399 | 42 hrs ago | 0.4094351 ETH | ||||
20838397 | 42 hrs ago | 0.42095908 ETH | ||||
20838397 | 42 hrs ago | 0.42095908 ETH | ||||
20838391 | 42 hrs ago | 0.51461672 ETH | ||||
20838391 | 42 hrs ago | 0.51461672 ETH | ||||
20838379 | 42 hrs ago | 0.52095484 ETH | ||||
20838379 | 42 hrs ago | 0.52095484 ETH | ||||
20838373 | 42 hrs ago | 0.62831831 ETH | ||||
20838373 | 42 hrs ago | 0.62831831 ETH | ||||
20838368 | 42 hrs ago | 0.7412176 ETH | ||||
20838368 | 42 hrs ago | 0.7412176 ETH | ||||
20838360 | 42 hrs ago | 0.00079493 ETH | ||||
20838360 | 42 hrs ago | 0.00079493 ETH |
Loading...
Loading
Contract Name:
Harambe
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-27 */ /* * SPDX-License-Identifier: MIT * https://t.me/RestInPeaceHarambe * https://x.com/RIPHarambeETH * https://www.Harambe.lol */ pragma solidity 0.8.19; 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 substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, 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. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * 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 * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ 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; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ 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 exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IDexFactory { 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; } interface IDexRouter { 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 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 Harambe is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; uint256 private lastContractSell; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fees address private marketingWallet; uint256 private buyTaxTotal; uint256 private sellTaxTotal; uint256 private transferTaxTotal; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetPairLPool(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("Harambe", "HARAMBE") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); antLeLitsH_setExcluded(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); antLeLitsH_setExcluded(address(dexPair), true); _setPairLPool(address(dexPair), true); uint256 _totalSupply = 1_000_000_000 * 10 ** decimals(); lastContractSell = block.timestamp; maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyTaxTotal = 20; sellTaxTotal = 20; transferTaxTotal = 0; marketingWallet = address(0x0A13844DAc07e1A43dA8F57a51d09C915AAC8F8f); // exclude from paying fees or having max transaction amount hmbFees_setExcluded(msg.sender, true); hmbFees_setExcluded(address(this), true); hmbFees_setExcluded(address(0xdead), true); hmbFees_setExcluded(marketingWallet, true); antLeLitsH_setExcluded(msg.sender, true); antLeLitsH_setExcluded(address(this), true); antLeLitsH_setExcluded(address(0xdead), true); antLeLitsH_setExcluded(marketingWallet, true); transferOwnership(msg.sender); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function openTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function antLeLitsH_remove() external onlyOwner { limitsEnabled = false; transferTaxTotal = 0; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _caSBcEnabled If swapback is enabled * @param _caSBcTrigger The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _caSBcLimit The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function swBckhB_newRange( bool _caSBcEnabled, uint256 _caSBcTrigger, uint256 _caSBcLimit ) external onlyOwner { require( _caSBcTrigger >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require( _caSBcLimit >= _caSBcTrigger, "maximum amount cant be higher than minimum" ); swapbackEnabled = _caSBcEnabled; swapBackValueMin = (totalSupply() * _caSBcTrigger) / 10000; swapBackValueMax = (totalSupply() * _caSBcLimit) / 10000; emit SwapbackSettingsUpdated(_caSBcEnabled, _caSBcTrigger, _caSBcLimit); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param _lmtTxNew Base 1000, so 1% = 10 */ function antLeLitsH_maxTx_set(uint256 _lmtTxNew) external onlyOwner { require(_lmtTxNew >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (_lmtTxNew * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param _limitWalletNew Base 1000, so 1% = 10 */ function antLeLitsH_walletLimit_set( uint256 _limitWalletNew ) external onlyOwner { require(_limitWalletNew >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (_limitWalletNew * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param _add The wallet to update * @param _excluded If the wallet is excluded or not */ function antLeLitsH_setExcluded( address _add, bool _excluded ) public onlyOwner { transferLimitExempt[_add] = _excluded; emit ExcludeFromLimits(_add, _excluded); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _newSwapTax The fee for the marketing wallet */ function hmbFees_buy_set(uint256 _newSwapTax) external onlyOwner { buyTaxTotal = _newSwapTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyTaxTotal, buyTaxTotal); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _newSwapTax The fee for the marketing wallet */ function hmbFees_sell_set(uint256 _newSwapTax) external onlyOwner { sellTaxTotal = _newSwapTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellTaxTotal, sellTaxTotal); } function hmbFees_transfer_set(uint256 _newSwapTax) external onlyOwner { transferTaxTotal = _newSwapTax; require( transferTaxTotal <= 100, "Total transfer fee cannot be higher than 100%" ); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param _add The wallet to update * @param _excluded If the wallet is excluded or not */ function hmbFees_setExcluded( address _add, bool _excluded ) public onlyOwner { transferTaxExempt[_add] = _excluded; emit ExcludeFromFees(_add, _excluded); } function _setPairLPool(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetPairLPool(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param _newWallet The new marketing wallet */ function hmbFees_receiver(address _newWallet) external onlyOwner { emit MarketingWalletUpdated(_newWallet, marketingWallet); marketingWallet = _newWallet; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _caSBcackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _caSBcackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function swBckhB_viNf() external view returns ( bool _swapbackEnabled, uint256 _caSBcackValueMin, uint256 _caSBcackValueMax ) { _swapbackEnabled = swapbackEnabled; _caSBcackValueMin = swapBackValueMin; _caSBcackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function antLeLitsH_viNf() external view returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees */ function receiver_viNf() external view returns (address _marketingWallet) { return (marketingWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _sellTaxTotal The total fee for sells * @return _transferTaxTotal The total fee for transfers */ function hmbFees_viNf() external view returns ( uint256 _buyTaxTotal, uint256 _sellTaxTotal, uint256 _transferTaxTotal ) { _buyTaxTotal = buyTaxTotal; _sellTaxTotal = sellTaxTotal; _transferTaxTotal = transferTaxTotal; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function wallet_viNf( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } 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"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] && lastContractSell != block.timestamp ) { swapping = true; swapBack(amount); lastContractSell = block.timestamp; swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); } // on transfers else if ( transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] ) { fees = amount.mul(transferTaxTotal).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function manualSwap(uint256 percent) external { require( marketingWallet == msg.sender, "Only marketing wallet can call this function" ); uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = (contractBalance * percent) / 100; swapTokensForEth(totalTokensToSwap); } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 10) { contractBalance = amount * 10; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
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":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","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":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","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":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPairLPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":"uint256","name":"_lmtTxNew","type":"uint256"}],"name":"antLeLitsH_maxTx_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"antLeLitsH_remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"antLeLitsH_setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"antLeLitsH_viNf","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limitWalletNew","type":"uint256"}],"name":"antLeLitsH_walletLimit_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"hmbFees_buy_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"hmbFees_receiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"hmbFees_sell_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"hmbFees_setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"hmbFees_transfer_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hmbFees_viNf","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_transferTaxTotal","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver_viNf","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_caSBcEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcTrigger","type":"uint256"},{"internalType":"uint256","name":"_caSBcLimit","type":"uint256"}],"name":"swBckhB_newRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swBckhB_viNf","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcackValueMin","type":"uint256"},{"internalType":"uint256","name":"_caSBcackValueMax","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"wallet_viNf","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526005805460ff60a81b191690556009805460ff199081166001908117909255600d8054821690556014805490911690911790553480156200004457600080fd5b5060405180604001604052806007815260200166486172616d626560c81b81525060405180604001604052806007815260200166484152414d424560c81b815250816003908162000096919062000838565b506004620000a5828262000838565b505050620000c2620000bc620003ed60201b60201c565b620003f1565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e481600162000443565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000155919062000904565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c9919062000904565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d919062000904565b6001600160a01b031660a08190526200025890600162000443565b60a05162000268906001620004f2565b6000620002786012600a62000a4b565b6200028890633b9aca0062000a5c565b4260085590506103e86200029e82600a62000a5c565b620002aa919062000a76565b600b556103e8620002bd82600a62000a5c565b620002c9919062000a76565b600a556103e8620002dc82600162000a5c565b620002e8919062000a76565b6006556064620002fa82600262000a5c565b62000306919062000a76565b6007556014600e819055600f556000601055600d8054610100600160a81b031916740a13844dac07e1a43da8f57a51d09c915aac8f8f001790556200034d33600162000546565b6200035a30600162000546565b6200036961dead600162000546565b600d54620003879061010090046001600160a01b0316600162000546565b6200039433600162000443565b620003a130600162000443565b620003b061dead600162000443565b600d54620003ce9061010090046001600160a01b0316600162000443565b620003d933620005ea565b620003e53382620006aa565b505062000aaf565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004925760405162461bcd60e51b8152602060048201819052602482015260008051602062002de183398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917fe0f0eeda3b1247853e2a825aa40eb65c3b08879740f68ff00df4745b6bb075b291a35050565b6005546001600160a01b03163314620005915760405162461bcd60e51b8152602060048201819052602482015260008051602062002de1833981519152604482015260640162000489565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101620004e6565b6005546001600160a01b03163314620006355760405162461bcd60e51b8152602060048201819052602482015260008051602062002de1833981519152604482015260640162000489565b6001600160a01b0381166200069c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000489565b620006a781620003f1565b50565b6001600160a01b038216620007025760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000489565b806002600082825462000716919062000a99565b90915550506001600160a01b038216600090815260208190526040812080548392906200074590849062000a99565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007bf57607f821691505b602082108103620007e057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200078f57600081815260208120601f850160051c810160208610156200080f5750805b601f850160051c820191505b8181101562000830578281556001016200081b565b505050505050565b81516001600160401b0381111562000854576200085462000794565b6200086c81620008658454620007aa565b84620007e6565b602080601f831160018114620008a457600084156200088b5750858301515b600019600386901b1c1916600185901b17855562000830565b600085815260208120601f198616915b82811015620008d557888601518255948401946001909101908401620008b4565b5085821015620008f45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200091757600080fd5b81516001600160a01b03811681146200092f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200098d57816000190482111562000971576200097162000936565b808516156200097f57918102915b93841c939080029062000951565b509250929050565b600082620009a65750600162000a45565b81620009b55750600062000a45565b8160018114620009ce5760028114620009d957620009f9565b600191505062000a45565b60ff841115620009ed57620009ed62000936565b50506001821b62000a45565b5060208310610133831016604e8410600b841016171562000a1e575081810a62000a45565b62000a2a83836200094c565b806000190482111562000a415762000a4162000936565b0290505b92915050565b60006200092f60ff84168362000995565b808202811582820484141762000a455762000a4562000936565b60008262000a9457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a455762000a4562000936565b60805160a0516122fe62000ae360003960006106d7015260008181611b4e01528181611c070152611c4301526122fe6000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063b5507cbc116100a0578063cab2da051161006f578063cab2da0514610639578063dd62ed3e1461066a578063dd830229146106b0578063f242ab41146106c5578063f2fde38b146106f957600080fd5b8063b5507cbc146105c4578063b70143c9146105e4578063c73e6db414610604578063c9567bf91461062457600080fd5b80639ce7a19e116100dc5780639ce7a19e146104ee578063a457c2d714610511578063a9059cbb14610531578063aae5023c1461055157600080fd5b80638da5cb5b146104675780638e986b231461049957806395d89b41146104b9578063965133a4146104ce57600080fd5b80634a7f6954116101905780636ef030c21161015f5780636ef030c2146103bc57806370a08231146103dc578063715018a6146104125780637ff6f7b914610427578063895d4d651461044757600080fd5b80634a7f6954146103215780634ada218b146103415780634b7f1c491461035b5780636d3ff8661461039557600080fd5b806323b872dd116101cc57806323b872dd146102a55780632baa73aa146102c5578063313ce567146102e5578063395093511461030157600080fd5b8063065285dc1461020957806306fdde031461022b578063095ea7b31461025657806318160ddd1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b50610229610224366004611ef6565b610719565b005b34801561023757600080fd5b506102406107b4565b60405161024d9190611f13565b60405180910390f35b34801561026257600080fd5b50610276610271366004611f61565b610846565b604051901515815260200161024d565b34801561029257600080fd5b506002545b60405190815260200161024d565b3480156102b157600080fd5b506102766102c0366004611f8d565b61085d565b3480156102d157600080fd5b506102296102e0366004611fce565b610907565b3480156102f157600080fd5b506040516012815260200161024d565b34801561030d57600080fd5b5061027661031c366004611f61565b6109e1565b34801561032d57600080fd5b5061022961033c366004611fce565b610a1d565b34801561034d57600080fd5b50600d546102769060ff1681565b34801561036757600080fd5b50600954600a54600b5460ff909216915b60408051931515845260208401929092529082015260600161024d565b3480156103a157600080fd5b50600554600654600754600160a81b90920460ff1691610378565b3480156103c857600080fd5b506102296103d7366004611ffc565b610af9565b3480156103e857600080fd5b506102976103f7366004611ef6565b6001600160a01b031660009081526020819052604090205490565b34801561041e57600080fd5b50610229610c97565b34801561043357600080fd5b5061022961044236600461202f565b610ccd565b34801561045357600080fd5b50610229610462366004611fce565b610d0a565b34801561047357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161024d565b3480156104a557600080fd5b506102296104b436600461204a565b610dda565b3480156104c557600080fd5b50610240610e64565b3480156104da57600080fd5b506102296104e9366004611fce565b610e73565b3480156104fa57600080fd5b50600d5461010090046001600160a01b0316610481565b34801561051d57600080fd5b5061027661052c366004611f61565b610f0c565b34801561053d57600080fd5b5061027661054c366004611f61565b610fa5565b34801561055d57600080fd5b506105a561056c366004611ef6565b6001600160a01b03166000908152601160209081526040808320546012835281842054601390935292205460ff92831693918316921690565b604080519315158452911515602084015215159082015260600161024d565b3480156105d057600080fd5b506102296105df36600461204a565b610fb2565b3480156105f057600080fd5b506102296105ff366004611fce565b611034565b34801561061057600080fd5b5061022961061f366004611fce565b6110df565b34801561063057600080fd5b506102296111b3565b34801561064557600080fd5b50600e54600f546010546040805193845260208401929092529082015260600161024d565b34801561067657600080fd5b5061029761068536600461207f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106bc57600080fd5b5061022961122a565b3480156106d157600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b34801561070557600080fd5b50610229610714366004611ef6565b61128f565b6005546001600160a01b0316331461074c5760405162461bcd60e51b8152600401610743906120b8565b60405180910390fd5b600d546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6060600380546107c3906120ed565b80601f01602080910402602001604051908101604052809291908181526020018280546107ef906120ed565b801561083c5780601f106108115761010080835404028352916020019161083c565b820191906000526020600020905b81548152906001019060200180831161081f57829003601f168201915b5050505050905090565b6000610853338484611327565b5060015b92915050565b600061086a84848461144b565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108ef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610743565b6108fc8533858403611327565b506001949350505050565b6005546001600160a01b031633146109315760405162461bcd60e51b8152600401610743906120b8565b600e81905560648111156109985760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610743565b600e546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e906060015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610853918590610a1890869061213d565b611327565b6005546001600160a01b03163314610a475760405162461bcd60e51b8152600401610743906120b8565b6005811015610aa45760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610743565b6103e8610ab060025490565b610aba9083612150565b610ac49190612167565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020016109d6565b6005546001600160a01b03163314610b235760405162461bcd60e51b8152600401610743906120b8565b6001821015610b915760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610743565b81811015610bf45760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610743565b6005805460ff60a81b1916600160a81b85151502179055600254612710908390610c1e9190612150565b610c289190612167565b60065561271081610c3860025490565b610c429190612150565b610c4c9190612167565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b03163314610cc15760405162461bcd60e51b8152600401610743906120b8565b610ccb6000611aa5565b565b6005546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610743906120b8565b6014805460ff1916911515919091179055565b6005546001600160a01b03163314610d345760405162461bcd60e51b8152600401610743906120b8565b6002811015610d855760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32256044820152606401610743565b6103e8610d9160025490565b610d9b9083612150565b610da59190612167565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020016109d6565b6005546001600160a01b03163314610e045760405162461bcd60e51b8152600401610743906120b8565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6060600480546107c3906120ed565b6005546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610743906120b8565b60108190556064811115610f095760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b6064820152608401610743565b50565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f8e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610743565b610f9b3385858403611327565b5060019392505050565b600061085333848461144b565b6005546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610743906120b8565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc929101610e58565b600d5461010090046001600160a01b031633146110a85760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610743565b306000908152602081905260408120549060646110c58484612150565b6110cf9190612167565b90506110da81611af7565b505050565b6005546001600160a01b031633146111095760405162461bcd60e51b8152600401610743906120b8565b600f81905560648111156111715760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610743565b600f546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060016109d6565b6005546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610743906120b8565b600d805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b031633146112545760405162461bcd60e51b8152600401610743906120b8565b6009805460ff191690556000601081905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6005546001600160a01b031633146112b95760405162461bcd60e51b8152600401610743906120b8565b6001600160a01b03811661131e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610743565b610f0981611aa5565b6001600160a01b0383166113895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610743565b6001600160a01b0382166113ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610743565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114715760405162461bcd60e51b815260040161074390612189565b6001600160a01b0382166114975760405162461bcd60e51b8152600401610743906121ce565b806000036114ab576110da83836000611cb7565b60095460ff1615611810576005546001600160a01b038481169116148015906114e257506005546001600160a01b03838116911614155b80156114f657506001600160a01b03821615155b801561150d57506001600160a01b03821661dead14155b80156115235750600554600160a01b900460ff16155b1561181057600d5460ff166115c8576001600160a01b03831660009081526011602052604090205460ff168061157157506001600160a01b03821660009081526011602052604090205460ff165b6115c85760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610743565b6001600160a01b03831660009081526013602052604090205460ff16801561160957506001600160a01b03821660009081526012602052604090205460ff16155b156116de57600b5481111561166f5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b6064820152608401610743565b600a546001600160a01b038316600090815260208190526040902054611695908361213d565b11156116d95760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610743565b611810565b6001600160a01b03821660009081526013602052604090205460ff16801561171f57506001600160a01b03831660009081526012602052604090205460ff16155b1561178657600b548111156116d95760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b6064820152608401610743565b6001600160a01b03821660009081526012602052604090205460ff1661181057600a546001600160a01b0383166000908152602081905260409020546117cc908361213d565b11156118105760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610743565b306000908152602081905260409020546006548110801590819061183d5750600554600160a81b900460ff165b80156118535750600554600160a01b900460ff16155b801561187857506001600160a01b03851660009081526013602052604090205460ff16155b801561189d57506001600160a01b03851660009081526011602052604090205460ff16155b80156118c257506001600160a01b03841660009081526011602052604090205460ff16155b80156118d057504260085414155b15611903576005805460ff60a01b1916600160a01b1790556118f183611e0c565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526011602052604090205460ff600160a01b90920482161591168061195157506001600160a01b03851660009081526011602052604090205460ff165b1561195a575060005b60008115611a91576001600160a01b03861660009081526013602052604090205460ff16801561198c57506000600f54115b156119b8576119b160646119ab600f5488611ec290919063ffffffff16565b90611ed5565b9050611a73565b6001600160a01b03871660009081526013602052604090205460ff1680156119e257506000600e54115b15611a01576119b160646119ab600e5488611ec290919063ffffffff16565b6000601054118015611a2c57506001600160a01b03871660009081526013602052604090205460ff16155b8015611a5157506001600160a01b03861660009081526013602052604090205460ff16155b15611a7357611a7060646119ab60105488611ec290919063ffffffff16565b90505b8015611a8457611a84873083611cb7565b611a8e8186612211565b94505b611a9c878787611cb7565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b2c57611b2c612224565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce919061223a565b81600181518110611be157611be1612224565b60200260200101906001600160a01b031690816001600160a01b031681525050611c2c307f000000000000000000000000000000000000000000000000000000000000000084611327565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611c81908590600090869030904290600401612257565b600060405180830381600087803b158015611c9b57600080fd5b505af1158015611caf573d6000803e3d6000fd5b505050505050565b6001600160a01b038316611cdd5760405162461bcd60e51b815260040161074390612189565b6001600160a01b038216611d035760405162461bcd60e51b8152600401610743906121ce565b6001600160a01b03831660009081526020819052604090205481811015611d7b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610743565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611db290849061213d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dfe91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611e2957505050565b600754821115611e395760075491505b60145460ff168015611e545750611e5183600a612150565b82115b15611e6757611e6483600a612150565b91505b81611e7181611af7565b600d546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611a9c576040519150601f19603f3d011682016040523d82523d6000602084013e611a9c565b6000611ece8284612150565b9392505050565b6000611ece8284612167565b6001600160a01b0381168114610f0957600080fd5b600060208284031215611f0857600080fd5b8135611ece81611ee1565b600060208083528351808285015260005b81811015611f4057858101830151858201604001528201611f24565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611f7457600080fd5b8235611f7f81611ee1565b946020939093013593505050565b600080600060608486031215611fa257600080fd5b8335611fad81611ee1565b92506020840135611fbd81611ee1565b929592945050506040919091013590565b600060208284031215611fe057600080fd5b5035919050565b80358015158114611ff757600080fd5b919050565b60008060006060848603121561201157600080fd5b61201a84611fe7565b95602085013595506040909401359392505050565b60006020828403121561204157600080fd5b611ece82611fe7565b6000806040838503121561205d57600080fd5b823561206881611ee1565b915061207660208401611fe7565b90509250929050565b6000806040838503121561209257600080fd5b823561209d81611ee1565b915060208301356120ad81611ee1565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061210157607f821691505b60208210810361212157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561085757610857612127565b808202811582820484141761085757610857612127565b60008261218457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561085757610857612127565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561224c57600080fd5b8151611ece81611ee1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122a75784516001600160a01b031683529383019391830191600101612282565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200a8db0e87239430fadc608b50bd6a9022b9fa8469c077727a6fa9fd95db0cd4264736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063b5507cbc116100a0578063cab2da051161006f578063cab2da0514610639578063dd62ed3e1461066a578063dd830229146106b0578063f242ab41146106c5578063f2fde38b146106f957600080fd5b8063b5507cbc146105c4578063b70143c9146105e4578063c73e6db414610604578063c9567bf91461062457600080fd5b80639ce7a19e116100dc5780639ce7a19e146104ee578063a457c2d714610511578063a9059cbb14610531578063aae5023c1461055157600080fd5b80638da5cb5b146104675780638e986b231461049957806395d89b41146104b9578063965133a4146104ce57600080fd5b80634a7f6954116101905780636ef030c21161015f5780636ef030c2146103bc57806370a08231146103dc578063715018a6146104125780637ff6f7b914610427578063895d4d651461044757600080fd5b80634a7f6954146103215780634ada218b146103415780634b7f1c491461035b5780636d3ff8661461039557600080fd5b806323b872dd116101cc57806323b872dd146102a55780632baa73aa146102c5578063313ce567146102e5578063395093511461030157600080fd5b8063065285dc1461020957806306fdde031461022b578063095ea7b31461025657806318160ddd1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b50610229610224366004611ef6565b610719565b005b34801561023757600080fd5b506102406107b4565b60405161024d9190611f13565b60405180910390f35b34801561026257600080fd5b50610276610271366004611f61565b610846565b604051901515815260200161024d565b34801561029257600080fd5b506002545b60405190815260200161024d565b3480156102b157600080fd5b506102766102c0366004611f8d565b61085d565b3480156102d157600080fd5b506102296102e0366004611fce565b610907565b3480156102f157600080fd5b506040516012815260200161024d565b34801561030d57600080fd5b5061027661031c366004611f61565b6109e1565b34801561032d57600080fd5b5061022961033c366004611fce565b610a1d565b34801561034d57600080fd5b50600d546102769060ff1681565b34801561036757600080fd5b50600954600a54600b5460ff909216915b60408051931515845260208401929092529082015260600161024d565b3480156103a157600080fd5b50600554600654600754600160a81b90920460ff1691610378565b3480156103c857600080fd5b506102296103d7366004611ffc565b610af9565b3480156103e857600080fd5b506102976103f7366004611ef6565b6001600160a01b031660009081526020819052604090205490565b34801561041e57600080fd5b50610229610c97565b34801561043357600080fd5b5061022961044236600461202f565b610ccd565b34801561045357600080fd5b50610229610462366004611fce565b610d0a565b34801561047357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161024d565b3480156104a557600080fd5b506102296104b436600461204a565b610dda565b3480156104c557600080fd5b50610240610e64565b3480156104da57600080fd5b506102296104e9366004611fce565b610e73565b3480156104fa57600080fd5b50600d5461010090046001600160a01b0316610481565b34801561051d57600080fd5b5061027661052c366004611f61565b610f0c565b34801561053d57600080fd5b5061027661054c366004611f61565b610fa5565b34801561055d57600080fd5b506105a561056c366004611ef6565b6001600160a01b03166000908152601160209081526040808320546012835281842054601390935292205460ff92831693918316921690565b604080519315158452911515602084015215159082015260600161024d565b3480156105d057600080fd5b506102296105df36600461204a565b610fb2565b3480156105f057600080fd5b506102296105ff366004611fce565b611034565b34801561061057600080fd5b5061022961061f366004611fce565b6110df565b34801561063057600080fd5b506102296111b3565b34801561064557600080fd5b50600e54600f546010546040805193845260208401929092529082015260600161024d565b34801561067657600080fd5b5061029761068536600461207f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106bc57600080fd5b5061022961122a565b3480156106d157600080fd5b506104817f000000000000000000000000c7d2657f3a242c71b511c8e83ff6f1a68c62915f81565b34801561070557600080fd5b50610229610714366004611ef6565b61128f565b6005546001600160a01b0316331461074c5760405162461bcd60e51b8152600401610743906120b8565b60405180910390fd5b600d546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6060600380546107c3906120ed565b80601f01602080910402602001604051908101604052809291908181526020018280546107ef906120ed565b801561083c5780601f106108115761010080835404028352916020019161083c565b820191906000526020600020905b81548152906001019060200180831161081f57829003601f168201915b5050505050905090565b6000610853338484611327565b5060015b92915050565b600061086a84848461144b565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108ef5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610743565b6108fc8533858403611327565b506001949350505050565b6005546001600160a01b031633146109315760405162461bcd60e51b8152600401610743906120b8565b600e81905560648111156109985760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610743565b600e546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e906060015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610853918590610a1890869061213d565b611327565b6005546001600160a01b03163314610a475760405162461bcd60e51b8152600401610743906120b8565b6005811015610aa45760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610743565b6103e8610ab060025490565b610aba9083612150565b610ac49190612167565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020016109d6565b6005546001600160a01b03163314610b235760405162461bcd60e51b8152600401610743906120b8565b6001821015610b915760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610743565b81811015610bf45760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610743565b6005805460ff60a81b1916600160a81b85151502179055600254612710908390610c1e9190612150565b610c289190612167565b60065561271081610c3860025490565b610c429190612150565b610c4c9190612167565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b03163314610cc15760405162461bcd60e51b8152600401610743906120b8565b610ccb6000611aa5565b565b6005546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610743906120b8565b6014805460ff1916911515919091179055565b6005546001600160a01b03163314610d345760405162461bcd60e51b8152600401610743906120b8565b6002811015610d855760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32256044820152606401610743565b6103e8610d9160025490565b610d9b9083612150565b610da59190612167565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020016109d6565b6005546001600160a01b03163314610e045760405162461bcd60e51b8152600401610743906120b8565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6060600480546107c3906120ed565b6005546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610743906120b8565b60108190556064811115610f095760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b6064820152608401610743565b50565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f8e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610743565b610f9b3385858403611327565b5060019392505050565b600061085333848461144b565b6005546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610743906120b8565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc929101610e58565b600d5461010090046001600160a01b031633146110a85760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610743565b306000908152602081905260408120549060646110c58484612150565b6110cf9190612167565b90506110da81611af7565b505050565b6005546001600160a01b031633146111095760405162461bcd60e51b8152600401610743906120b8565b600f81905560648111156111715760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610743565b600f546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060016109d6565b6005546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610743906120b8565b600d805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b031633146112545760405162461bcd60e51b8152600401610743906120b8565b6009805460ff191690556000601081905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6005546001600160a01b031633146112b95760405162461bcd60e51b8152600401610743906120b8565b6001600160a01b03811661131e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610743565b610f0981611aa5565b6001600160a01b0383166113895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610743565b6001600160a01b0382166113ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610743565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114715760405162461bcd60e51b815260040161074390612189565b6001600160a01b0382166114975760405162461bcd60e51b8152600401610743906121ce565b806000036114ab576110da83836000611cb7565b60095460ff1615611810576005546001600160a01b038481169116148015906114e257506005546001600160a01b03838116911614155b80156114f657506001600160a01b03821615155b801561150d57506001600160a01b03821661dead14155b80156115235750600554600160a01b900460ff16155b1561181057600d5460ff166115c8576001600160a01b03831660009081526011602052604090205460ff168061157157506001600160a01b03821660009081526011602052604090205460ff165b6115c85760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610743565b6001600160a01b03831660009081526013602052604090205460ff16801561160957506001600160a01b03821660009081526012602052604090205460ff16155b156116de57600b5481111561166f5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b6064820152608401610743565b600a546001600160a01b038316600090815260208190526040902054611695908361213d565b11156116d95760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610743565b611810565b6001600160a01b03821660009081526013602052604090205460ff16801561171f57506001600160a01b03831660009081526012602052604090205460ff16155b1561178657600b548111156116d95760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b6064820152608401610743565b6001600160a01b03821660009081526012602052604090205460ff1661181057600a546001600160a01b0383166000908152602081905260409020546117cc908361213d565b11156118105760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610743565b306000908152602081905260409020546006548110801590819061183d5750600554600160a81b900460ff165b80156118535750600554600160a01b900460ff16155b801561187857506001600160a01b03851660009081526013602052604090205460ff16155b801561189d57506001600160a01b03851660009081526011602052604090205460ff16155b80156118c257506001600160a01b03841660009081526011602052604090205460ff16155b80156118d057504260085414155b15611903576005805460ff60a01b1916600160a01b1790556118f183611e0c565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526011602052604090205460ff600160a01b90920482161591168061195157506001600160a01b03851660009081526011602052604090205460ff165b1561195a575060005b60008115611a91576001600160a01b03861660009081526013602052604090205460ff16801561198c57506000600f54115b156119b8576119b160646119ab600f5488611ec290919063ffffffff16565b90611ed5565b9050611a73565b6001600160a01b03871660009081526013602052604090205460ff1680156119e257506000600e54115b15611a01576119b160646119ab600e5488611ec290919063ffffffff16565b6000601054118015611a2c57506001600160a01b03871660009081526013602052604090205460ff16155b8015611a5157506001600160a01b03861660009081526013602052604090205460ff16155b15611a7357611a7060646119ab60105488611ec290919063ffffffff16565b90505b8015611a8457611a84873083611cb7565b611a8e8186612211565b94505b611a9c878787611cb7565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b2c57611b2c612224565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce919061223a565b81600181518110611be157611be1612224565b60200260200101906001600160a01b031690816001600160a01b031681525050611c2c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611327565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611c81908590600090869030904290600401612257565b600060405180830381600087803b158015611c9b57600080fd5b505af1158015611caf573d6000803e3d6000fd5b505050505050565b6001600160a01b038316611cdd5760405162461bcd60e51b815260040161074390612189565b6001600160a01b038216611d035760405162461bcd60e51b8152600401610743906121ce565b6001600160a01b03831660009081526020819052604090205481811015611d7b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610743565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611db290849061213d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dfe91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611e2957505050565b600754821115611e395760075491505b60145460ff168015611e545750611e5183600a612150565b82115b15611e6757611e6483600a612150565b91505b81611e7181611af7565b600d546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611a9c576040519150601f19603f3d011682016040523d82523d6000602084013e611a9c565b6000611ece8284612150565b9392505050565b6000611ece8284612167565b6001600160a01b0381168114610f0957600080fd5b600060208284031215611f0857600080fd5b8135611ece81611ee1565b600060208083528351808285015260005b81811015611f4057858101830151858201604001528201611f24565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611f7457600080fd5b8235611f7f81611ee1565b946020939093013593505050565b600080600060608486031215611fa257600080fd5b8335611fad81611ee1565b92506020840135611fbd81611ee1565b929592945050506040919091013590565b600060208284031215611fe057600080fd5b5035919050565b80358015158114611ff757600080fd5b919050565b60008060006060848603121561201157600080fd5b61201a84611fe7565b95602085013595506040909401359392505050565b60006020828403121561204157600080fd5b611ece82611fe7565b6000806040838503121561205d57600080fd5b823561206881611ee1565b915061207660208401611fe7565b90509250929050565b6000806040838503121561209257600080fd5b823561209d81611ee1565b915060208301356120ad81611ee1565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061210157607f821691505b60208210810361212157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561085757610857612127565b808202811582820484141761085757610857612127565b60008261218457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561085757610857612127565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561224c57600080fd5b8151611ece81611ee1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122a75784516001600160a01b031683529383019391830191600101612282565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200a8db0e87239430fadc608b50bd6a9022b9fa8469c077727a6fa9fd95db0cd4264736f6c63430008130033
Deployed Bytecode Sourcemap
25418:18152:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34834:179;;;;;;;;;;-1:-1:-1;34834:179:0;;;;;:::i;:::-;;:::i;:::-;;11016:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13249:194;;;;;;;;;;-1:-1:-1;13249:194:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;13249:194:0;1275:187:1;12136:108:0;;;;;;;;;;-1:-1:-1;12224:12:0;;12136:108;;;1613:25:1;;;1601:2;1586:18;12136:108:0;1467:177:1;13921:529:0;;;;;;;;;;-1:-1:-1;13921:529:0;;;;;:::i;:::-;;:::i;32971:259::-;;;;;;;;;;-1:-1:-1;32971:259:0;;;;;:::i;:::-;;:::i;11978:93::-;;;;;;;;;;-1:-1:-1;11978:93:0;;12061:2;2437:36:1;;2425:2;2410:18;11978:93:0;2295:184:1;14855:290:0;;;;;;;;;;-1:-1:-1;14855:290:0;;;;;:::i;:::-;;:::i;31965:::-;;;;;;;;;;-1:-1:-1;31965:290:0;;;;;:::i;:::-;;:::i;26033:34::-;;;;;;;;;;-1:-1:-1;26033:34:0;;;;;;;;36072:246;;;;;;;;;;-1:-1:-1;36239:13:0;;36276:9;;36305:5;;36239:13;;;;;36072:246;;;;2705:14:1;;2698:22;2680:41;;2752:2;2737:18;;2730:34;;;;2780:18;;;2773:34;2668:2;2653:18;36072:246:0;2484:329:1;35372:353:0;;;;;;;;;;-1:-1:-1;35608:15:0;;35654:16;;35701;;-1:-1:-1;;;35608:15:0;;;;;;35372:353;;30601:675;;;;;;;;;;-1:-1:-1;30601:675:0;;;;;:::i;:::-;;:::i;12307:143::-;;;;;;;;;;-1:-1:-1;12307:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12424:18:0;12397:7;12424:18;;;;;;;;;;;;12307:143;22355:103;;;;;;;;;;;;;:::i;42454:79::-;;;;;;;;;;-1:-1:-1;42454:79:0;;;;;:::i;:::-;;:::i;31515:234::-;;;;;;;;;;-1:-1:-1;31515:234:0;;;;;:::i;:::-;;:::i;21704:87::-;;;;;;;;;;-1:-1:-1;21777:6:0;;-1:-1:-1;;;;;21777:6:0;21704:87;;;-1:-1:-1;;;;;3653:32:1;;;3635:51;;3623:2;3608:18;21704:87:0;3489:203:1;34274::0;;;;;;;;;;-1:-1:-1;34274:203:0;;;;;:::i;:::-;;:::i;11235:104::-;;;;;;;;;;;;;:::i;33779:248::-;;;;;;;;;;-1:-1:-1;33779:248:0;;;;;:::i;:::-;;:::i;36481:149::-;;;;;;;;;;-1:-1:-1;36606:15:0;;;;;-1:-1:-1;;;;;36606:15:0;36481:149;;15644:475;;;;;;;;;;-1:-1:-1;15644:475:0;;;;;:::i;:::-;;:::i;12663:200::-;;;;;;;;;;-1:-1:-1;12663:200:0;;;;;:::i;:::-;;:::i;37668:446::-;;;;;;;;;;-1:-1:-1;37668:446:0;;;;;:::i;:::-;-1:-1:-1;;;;;37944:26:0;37786:23;37944:26;;;:17;:26;;;;;;;;;38004:19;:28;;;;;;38072:25;:34;;;;;;37944:26;;;;;38004:28;;;;38072:34;;37668:446;;;;;4226:14:1;;4219:22;4201:41;;4285:14;;4278:22;4273:2;4258:18;;4251:50;4344:14;4337:22;4317:18;;;4310:50;4189:2;4174:18;37668:446:0;4017:349:1;32526:210:0;;;;;;;;;;-1:-1:-1;32526:210:0;;;;;:::i;:::-;;:::i;42541:369::-;;;;;;;;;;-1:-1:-1;42541:369:0;;;;;:::i;:::-;;:::i;33467:304::-;;;;;;;;;;-1:-1:-1;33467:304:0;;;;;:::i;:::-;;:::i;29633:162::-;;;;;;;;;;;;;:::i;36876:332::-;;;;;;;;;;-1:-1:-1;37103:11:0;;37141:12;;37184:16;;36876:332;;;4573:25:1;;;4629:2;4614:18;;4607:34;;;;4657:18;;;4650:34;4561:2;4546:18;36876:332:0;4371:319:1;12926:176:0;;;;;;;;;;-1:-1:-1;12926:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13067:18:0;;;13040:7;13067:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12926:176;29950:165;;;;;;;;;;;;;:::i;25540:32::-;;;;;;;;;;;;;;;22613:238;;;;;;;;;;-1:-1:-1;22613:238:0;;;;;:::i;:::-;;:::i;34834:179::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;;;;;;;;;34950:15:::1;::::0;34915:51:::1;::::0;-1:-1:-1;;;;;34950:15:0::1;::::0;;::::1;::::0;::::1;::::0;34915:51;::::1;::::0;::::1;::::0;;;::::1;34977:15;:28:::0;;-1:-1:-1;;;;;34977:28:0;;::::1;;;-1:-1:-1::0;;;;;;34977:28:0;;::::1;::::0;;;::::1;::::0;;34834:179::o;11016:100::-;11070:13;11103:5;11096:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11016:100;:::o;13249:194::-;13357:4;13374:39;10102:10;13397:7;13406:6;13374:8;:39::i;:::-;-1:-1:-1;13431:4:0;13249:194;;;;;:::o;13921:529::-;14061:4;14078:36;14088:6;14096:9;14107:6;14078:9;:36::i;:::-;-1:-1:-1;;;;;14154:19:0;;14127:24;14154:19;;;:11;:19;;;;;;;;10102:10;14154:33;;;;;;;;14220:26;;;;14198:116;;;;-1:-1:-1;;;14198:116:0;;6036:2:1;14198:116:0;;;6018:21:1;6075:2;6055:18;;;6048:30;6114:34;6094:18;;;6087:62;-1:-1:-1;;;6165:18:1;;;6158:38;6213:19;;14198:116:0;5834:404:1;14198:116:0;14350:57;14359:6;10102:10;14400:6;14381:16;:25;14350:8;:57::i;:::-;-1:-1:-1;14438:4:0;;13921:529;-1:-1:-1;;;;13921:529:0:o;32971:259::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;33047:11:::1;:25:::0;;;33106:3:::1;33091:18:::0;::::1;;33083:71;;;::::0;-1:-1:-1;;;33083:71:0;;6445:2:1;33083:71:0::1;::::0;::::1;6427:21:1::0;6484:2;6464:18;;;6457:30;6523:34;6503:18;;;6496:62;-1:-1:-1;;;6574:18:1;;;6567:38;6622:19;;33083:71:0::1;6243:404:1::0;33083:71:0::1;33184:11;::::0;33170:52:::1;::::0;;4573:25:1;;;4629:2;4614:18;;4607:34;;;4657:18;;;4650:34;;;;33170:52:0::1;::::0;4561:2:1;4546:18;33170:52:0::1;;;;;;;;32971:259:::0;:::o;14855:290::-;10102:10;14968:4;15057:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15057:34:0;;;;;;;;;;14968:4;;14985:130;;15035:7;;15057:47;;15094:10;;15057:47;:::i;:::-;14985:8;:130::i;31965:290::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;32099:1:::1;32080:15;:20;;32072:69;;;::::0;-1:-1:-1;;;32072:69:0;;7116:2:1;32072:69:0::1;::::0;::::1;7098:21:1::0;7155:2;7135:18;;;7128:30;7194:34;7174:18;;;7167:62;-1:-1:-1;;;7245:18:1;;;7238:34;7289:19;;32072:69:0::1;6914:400:1::0;32072:69:0::1;32200:4;32183:13;12224:12:::0;;;12136:108;32183:13:::1;32165:31;::::0;:15;:31:::1;:::i;:::-;32164:40;;;;:::i;:::-;32152:9;:52:::0;;;32220:27:::1;::::0;1613:25:1;;;32220:27:0::1;::::0;1601:2:1;1586:18;32220:27:0::1;1467:177:1::0;30601:675:0;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;30794:1:::1;30777:13;:18;;30755:120;;;::::0;-1:-1:-1;;;30755:120:0;;7916:2:1;30755:120:0::1;::::0;::::1;7898:21:1::0;7955:2;7935:18;;;7928:30;7994:34;7974:18;;;7967:62;-1:-1:-1;;;8045:18:1;;;8038:50;8105:19;;30755:120:0::1;7714:416:1::0;30755:120:0::1;30923:13;30908:11;:28;;30886:120;;;::::0;-1:-1:-1;;;30886:120:0;;8337:2:1;30886:120:0::1;::::0;::::1;8319:21:1::0;8376:2;8356:18;;;8349:30;8415:34;8395:18;;;8388:62;-1:-1:-1;;;8466:18:1;;;8459:40;8516:19;;30886:120:0::1;8135:406:1::0;30886:120:0::1;31019:15;:31:::0;;-1:-1:-1;;;;31019:31:0::1;-1:-1:-1::0;;;31019:31:0;::::1;;;;::::0;;12224:12;;31114:5:::1;::::0;31097:13;;31081:29:::1;;;;:::i;:::-;31080:39;;;;:::i;:::-;31061:16;:58:::0;31181:5:::1;31166:11:::0;31150:13:::1;12224:12:::0;;;12136:108;31150:13:::1;:27;;;;:::i;:::-;31149:37;;;;:::i;:::-;31130:16;:56:::0;31202:66:::1;::::0;;2705:14:1;;2698:22;2680:41;;2752:2;2737:18;;2730:34;;;2780:18;;;2773:34;;;31202:66:0::1;::::0;2668:2:1;2653:18;31202:66:0::1;;;;;;;30601:675:::0;;;:::o;22355:103::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;22420:30:::1;22447:1;22420:18;:30::i;:::-;22355:103::o:0;42454:79::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;42513:4:::1;:12:::0;;-1:-1:-1;;42513:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42454:79::o;31515:234::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;31615:1:::1;31602:9;:14;;31594:59;;;::::0;-1:-1:-1;;;31594:59:0;;8748:2:1;31594:59:0::1;::::0;::::1;8730:21:1::0;;;8767:18;;;8760:30;8826:34;8806:18;;;8799:62;8878:18;;31594:59:0::1;8546:356:1::0;31594:59:0::1;31702:4;31685:13;12224:12:::0;;;12136:108;31685:13:::1;31673:25;::::0;:9;:25:::1;:::i;:::-;31672:34;;;;:::i;:::-;31664:5;:42:::0;;;31722:19:::1;::::0;1613:25:1;;;31722:19:0::1;::::0;1601:2:1;1586:18;31722:19:0::1;1467:177:1::0;34274:203:0;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34386:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;:35;;-1:-1:-1;;34386:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34437:32;;1415:41:1;;;34437:32:0::1;::::0;1388:18:1;34437:32:0::1;;;;;;;;34274:203:::0;;:::o;11235:104::-;11291:13;11324:7;11317:14;;;;;:::i;33779:248::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;33860:16:::1;:30:::0;;;33943:3:::1;33923:23:::0;::::1;;33901:118;;;::::0;-1:-1:-1;;;33901:118:0;;9109:2:1;33901:118:0::1;::::0;::::1;9091:21:1::0;9148:2;9128:18;;;9121:30;9187:34;9167:18;;;9160:62;-1:-1:-1;;;9238:18:1;;;9231:43;9291:19;;33901:118:0::1;8907:409:1::0;33901:118:0::1;33779:248:::0;:::o;15644:475::-;10102:10;15762:4;15806:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15806:34:0;;;;;;;;;;15873:35;;;;15851:122;;;;-1:-1:-1;;;15851:122:0;;9523:2:1;15851:122:0;;;9505:21:1;9562:2;9542:18;;;9535:30;9601:34;9581:18;;;9574:62;-1:-1:-1;;;9652:18:1;;;9645:35;9697:19;;15851:122:0;9321:401:1;15851:122:0;16009:67;10102:10;16032:7;16060:15;16041:16;:34;16009:8;:67::i;:::-;-1:-1:-1;16107:4:0;;15644:475;-1:-1:-1;;;15644:475:0:o;12663:200::-;12774:4;12791:42;10102:10;12815:9;12826:6;12791:9;:42::i;32526:210::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32641:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;;;;:37;;-1:-1:-1;;32641:37:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32694:34;;1415:41:1;;;32694:34:0::1;::::0;1388:18:1;32694:34:0::1;1275:187:1::0;42541:369:0;42620:15;;;;;-1:-1:-1;;;;;42620:15:0;42639:10;42620:29;42598:123;;;;-1:-1:-1;;;42598:123:0;;9929:2:1;42598:123:0;;;9911:21:1;9968:2;9948:18;;;9941:30;10007:34;9987:18;;;9980:62;-1:-1:-1;;;10058:18:1;;;10051:42;10110:19;;42598:123:0;9727:408:1;42598:123:0;42778:4;42734:23;12424:18;;;;;;;;;;;;42853:3;42824:25;42842:7;12424:18;42824:25;:::i;:::-;42823:33;;;;:::i;:::-;42795:61;;42867:35;42884:17;42867:16;:35::i;:::-;42587:323;;42541:369;:::o;33467:304::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;33544:12:::1;:26:::0;;;33619:3:::1;33603:19:::0;::::1;;33581:110;;;::::0;-1:-1:-1;;;33581:110:0;;10342:2:1;33581:110:0::1;::::0;::::1;10324:21:1::0;10381:2;10361:18;;;10354:30;10420:34;10400:18;;;10393:62;-1:-1:-1;;;10471:18:1;;;10464:39;10520:19;;33581:110:0::1;10140:405:1::0;33581:110:0::1;33722:12;::::0;33707:56:::1;::::0;;4573:25:1;;;4629:2;4614:18;;4607:34;;;4657:18;;;4650:34;;;;33707:56:0::1;::::0;4561:2:1;4546:18;33707:56:0::1;4371:319:1::0;29633:162:0;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;29686:14:::1;:21:::0;;-1:-1:-1;;29686:21:0::1;29703:4;29686:21;::::0;;29718:15:::1;:22:::0;;-1:-1:-1;;;;29718:22:0::1;-1:-1:-1::0;;;29718:22:0::1;::::0;;29756:31:::1;::::0;29771:15:::1;::::0;29756:31:::1;::::0;29686:14:::1;::::0;29756:31:::1;29633:162::o:0;29950:165::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;30009:13:::1;:21:::0;;-1:-1:-1;;30009:21:0::1;::::0;;30025:5:::1;30041:16;:20:::0;;;30077:30:::1;::::0;30091:15:::1;::::0;30077:30:::1;::::0;::::1;29950:165::o:0;22613:238::-;21777:6;;-1:-1:-1;;;;;21777:6:0;10102:10;21924:23;21916:68;;;;-1:-1:-1;;;21916:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22716:22:0;::::1;22694:110;;;::::0;-1:-1:-1;;;22694:110:0;;10752:2:1;22694:110:0::1;::::0;::::1;10734:21:1::0;10791:2;10771:18;;;10764:30;10830:34;10810:18;;;10803:62;-1:-1:-1;;;10881:18:1;;;10874:36;10927:19;;22694:110:0::1;10550:402:1::0;22694:110:0::1;22815:28;22834:8;22815:18;:28::i;19427:380::-:0;-1:-1:-1;;;;;19563:19:0;;19555:68;;;;-1:-1:-1;;;19555:68:0;;11159:2:1;19555:68:0;;;11141:21:1;11198:2;11178:18;;;11171:30;11237:34;11217:18;;;11210:62;-1:-1:-1;;;11288:18:1;;;11281:34;11332:19;;19555:68:0;10957:400:1;19555:68:0;-1:-1:-1;;;;;19642:21:0;;19634:68;;;;-1:-1:-1;;;19634:68:0;;11564:2:1;19634:68:0;;;11546:21:1;11603:2;11583:18;;;11576:30;11642:34;11622:18;;;11615:62;-1:-1:-1;;;11693:18:1;;;11686:32;11735:19;;19634:68:0;11362:398:1;19634:68:0;-1:-1:-1;;;;;19715:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19767:32;;1613:25:1;;;19767:32:0;;1586:18:1;19767:32:0;;;;;;;19427:380;;;:::o;38122:3720::-;-1:-1:-1;;;;;38254:18:0;;38246:68;;;;-1:-1:-1;;;38246:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38333:16:0;;38325:64;;;;-1:-1:-1;;;38325:64:0;;;;;;;:::i;:::-;38406:6;38416:1;38406:11;38402:93;;38434:28;38450:4;38456:2;38460:1;38434:15;:28::i;38402:93::-;38511:13;;;;38507:1564;;;21777:6;;-1:-1:-1;;;;;38563:15:0;;;21777:6;;38563:15;;;;:49;;-1:-1:-1;21777:6:0;;-1:-1:-1;;;;;38599:13:0;;;21777:6;;38599:13;;38563:49;:86;;;;-1:-1:-1;;;;;;38633:16:0;;;;38563:86;:128;;;;-1:-1:-1;;;;;;38670:21:0;;38684:6;38670:21;;38563:128;:158;;;;-1:-1:-1;38713:8:0;;-1:-1:-1;;;38713:8:0;;;;38712:9;38563:158;38541:1519;;;38761:14;;;;38756:232;;-1:-1:-1;;;;;38834:23:0;;;;;;:17;:23;;;;;;;;;:48;;-1:-1:-1;;;;;;38861:21:0;;;;;;:17;:21;;;;;;;;38834:48;38800:168;;;;-1:-1:-1;;;38800:168:0;;12777:2:1;38800:168:0;;;12759:21:1;12816:2;12796:18;;;12789:30;12855:34;12835:18;;;12828:62;-1:-1:-1;;;12906:18:1;;;12899:32;12948:19;;38800:168:0;12575:398:1;38800:168:0;-1:-1:-1;;;;;39062:31:0;;;;;;:25;:31;;;;;;;;:59;;;;-1:-1:-1;;;;;;39098:23:0;;;;;;:19;:23;;;;;;;;39097:24;39062:59;39036:1009;;;39208:5;;39198:6;:15;;39164:139;;;;-1:-1:-1;;;39164:139:0;;13180:2:1;39164:139:0;;;13162:21:1;13219:2;13199:18;;;13192:30;13258:34;13238:18;;;13231:62;-1:-1:-1;;;13309:18:1;;;13302:36;13355:19;;39164:139:0;12978:402:1;39164:139:0;39386:9;;-1:-1:-1;;;;;12424:18:0;;12397:7;12424:18;;;;;;;;;;;39360:22;;:6;:22;:::i;:::-;:35;;39326:140;;;;-1:-1:-1;;;39326:140:0;;13587:2:1;39326:140:0;;;13569:21:1;13626:2;13606:18;;;13599:30;-1:-1:-1;;;13645:18:1;;;13638:49;13704:18;;39326:140:0;13385:343:1;39326:140:0;39036:1009;;;-1:-1:-1;;;;;39564:29:0;;;;;;:25;:29;;;;;;;;:59;;;;-1:-1:-1;;;;;;39598:25:0;;;;;;:19;:25;;;;;;;;39597:26;39564:59;39538:507;;;39710:5;;39700:6;:15;;39666:140;;;;-1:-1:-1;;;39666:140:0;;13935:2:1;39666:140:0;;;13917:21:1;13974:2;13954:18;;;13947:30;14013:34;13993:18;;;13986:62;-1:-1:-1;;;14064:18:1;;;14057:37;14111:19;;39666:140:0;13733:403:1;39538:507:0;-1:-1:-1;;;;;39837:23:0;;;;;;:19;:23;;;;;;;;39832:213;;39945:9;;-1:-1:-1;;;;;12424:18:0;;12397:7;12424:18;;;;;;;;;;;39919:22;;:6;:22;:::i;:::-;:35;;39885:140;;;;-1:-1:-1;;;39885:140:0;;13587:2:1;39885:140:0;;;13569:21:1;13626:2;13606:18;;;13599:30;-1:-1:-1;;;13645:18:1;;;13638:49;13704:18;;39885:140:0;13385:343:1;39885:140:0;40132:4;40083:28;12424:18;;;;;;;;;;;40190:16;;40166:40;;;;;;;40237:39;;-1:-1:-1;40261:15:0;;-1:-1:-1;;;40261:15:0;;;;40237:39;:65;;;;-1:-1:-1;40294:8:0;;-1:-1:-1;;;40294:8:0;;;;40293:9;40237:65;:114;;;;-1:-1:-1;;;;;;40320:31:0;;;;;;:25;:31;;;;;;;;40319:32;40237:114;:155;;;;-1:-1:-1;;;;;;40369:23:0;;;;;;:17;:23;;;;;;;;40368:24;40237:155;:194;;;;-1:-1:-1;;;;;;40410:21:0;;;;;;:17;:21;;;;;;;;40409:22;40237:194;:246;;;;;40468:15;40448:16;;:35;;40237:246;40219:435;;;40510:8;:15;;-1:-1:-1;;;;40510:15:0;-1:-1:-1;;;40510:15:0;;;40542:16;40551:6;40542:8;:16::i;:::-;40594:15;40575:16;:34;40626:8;:16;;-1:-1:-1;;;;40626:16:0;;;40219:435;40682:8;;-1:-1:-1;;;;;40792:23:0;;40666:12;40792:23;;;:17;:23;;;;;;40682:8;-1:-1:-1;;;40682:8:0;;;;;40681:9;;40792:23;;:48;;-1:-1:-1;;;;;;40819:21:0;;;;;;:17;:21;;;;;;;;40792:48;40788:96;;;-1:-1:-1;40867:5:0;40788:96;40896:12;41001:7;40997:792;;;-1:-1:-1;;;;;41053:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;41101:1;41086:12;;:16;41053:49;41049:591;;;41130:33;41159:3;41130:24;41141:12;;41130:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;41123:40;;41049:591;;;-1:-1:-1;;;;;41225:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;41274:1;41260:11;;:15;41225:50;41221:419;;;41303:32;41331:3;41303:23;41314:11;;41303:6;:10;;:23;;;;:::i;41221:419::-;41440:1;41421:16;;:20;:73;;;;-1:-1:-1;;;;;;41463:31:0;;;;;;:25;:31;;;;;;;;41462:32;41421:73;:124;;;;-1:-1:-1;;;;;;41516:29:0;;;;;;:25;:29;;;;;;;;41515:30;41421:124;41399:241;;;41587:37;41620:3;41587:28;41598:16;;41587:6;:10;;:28;;;;:::i;:37::-;41580:44;;41399:241;41660:8;;41656:91;;41689:42;41705:4;41719;41726;41689:15;:42::i;:::-;41763:14;41773:4;41763:14;;:::i;:::-;;;40997:792;41801:33;41817:4;41823:2;41827:6;41801:15;:33::i;:::-;38235:3607;;;;38122:3720;;;:::o;23011:191::-;23104:6;;;-1:-1:-1;;;;;23121:17:0;;;-1:-1:-1;;;;;;23121:17:0;;;;;;;23154:40;;23104:6;;;23121:17;23104:6;;23154:40;;23085:16;;23154:40;23074:128;23011:191;:::o;41850:571::-;42000:16;;;42014:1;42000:16;;;;;;;;41976:21;;42000:16;;;;;;;;;;-1:-1:-1;42000:16:0;41976:40;;42045:4;42027;42032:1;42027:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42027:23:0;;;-1:-1:-1;;;;;42027:23:0;;;;;42071:9;-1:-1:-1;;;;;42071:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42061:4;42066:1;42061:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;42061:26:0;;;-1:-1:-1;;;;;42061:26:0;;;;;42100:56;42117:4;42132:9;42144:11;42100:8;:56::i;:::-;42195:218;;-1:-1:-1;;;42195:218:0;;-1:-1:-1;;;;;42195:9:0;:60;;;;:218;;42270:11;;42296:1;;42340:4;;42367;;42387:15;;42195:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41905:516;41850:571;:::o;16609:770::-;-1:-1:-1;;;;;16749:20:0;;16741:70;;;;-1:-1:-1;;;16741:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16830:23:0;;16822:71;;;;-1:-1:-1;;;16822:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16990:17:0;;16966:21;16990:17;;;;;;;;;;;17040:23;;;;17018:111;;;;-1:-1:-1;;;17018:111:0;;15981:2:1;17018:111:0;;;15963:21:1;16020:2;16000:18;;;15993:30;16059:34;16039:18;;;16032:62;-1:-1:-1;;;16110:18:1;;;16103:36;16156:19;;17018:111:0;15779:402:1;17018:111:0;-1:-1:-1;;;;;17165:17:0;;;:9;:17;;;;;;;;;;;17185:22;;;17165:42;;17229:20;;;;;;;;:30;;17201:6;;17165:9;17229:30;;17201:6;;17229:30;:::i;:::-;;;;;;;;17294:9;-1:-1:-1;;;;;17277:35:0;17286:6;-1:-1:-1;;;;;17277:35:0;;17305:6;17277:35;;;;1613:25:1;;1601:2;1586:18;;1467:177;17277:35:0;;;;;;;;16730:649;16609:770;;;:::o;42918:649::-;43015:4;42971:23;12424:18;;;;;;;;;;;;43061:20;;;43057:59;;43098:7;;42918:649;:::o;43057:59::-;43150:16;;43132:15;:34;43128:101;;;43201:16;;43183:34;;43128:101;43245:4;;;;:37;;;;-1:-1:-1;43271:11:0;:6;43280:2;43271:11;:::i;:::-;43253:15;:29;43245:37;43241:99;;;43317:11;:6;43326:2;43317:11;:::i;:::-;43299:29;;43241:99;43381:15;43409:36;43381:15;43409:16;:36::i;:::-;43480:15;;43472:87;;43480:15;;;;-1:-1:-1;;;;;43480:15:0;;43523:21;;43472:87;;;;43523:21;43480:15;43472:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3381:98;3439:7;3466:5;3470:1;3466;:5;:::i;:::-;3459:12;3381:98;-1:-1:-1;;;3381:98:0:o;3780:::-;3838:7;3865:5;3869:1;3865;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:548::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;686:3;871:1;866:2;857:6;846:9;842:22;838:31;831:42;941:2;934;930:7;925:2;917:6;913:15;909:29;898:9;894:45;890:54;882:62;;;;402:548;;;;:::o;955:315::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;955:315:1:o;1649:456::-;1726:6;1734;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:31;1894:5;1869:31;:::i;:::-;1919:5;-1:-1:-1;1976:2:1;1961:18;;1948:32;1989:33;1948:32;1989:33;:::i;:::-;1649:456;;2041:7;;-1:-1:-1;;;2095:2:1;2080:18;;;;2067:32;;1649:456::o;2110:180::-;2169:6;2222:2;2210:9;2201:7;2197:23;2193:32;2190:52;;;2238:1;2235;2228:12;2190:52;-1:-1:-1;2261:23:1;;2110:180;-1:-1:-1;2110:180:1:o;2818:160::-;2883:20;;2939:13;;2932:21;2922:32;;2912:60;;2968:1;2965;2958:12;2912:60;2818:160;;;:::o;2983:316::-;3057:6;3065;3073;3126:2;3114:9;3105:7;3101:23;3097:32;3094:52;;;3142:1;3139;3132:12;3094:52;3165:26;3181:9;3165:26;:::i;:::-;3155:36;3238:2;3223:18;;3210:32;;-1:-1:-1;3289:2:1;3274:18;;;3261:32;;2983:316;-1:-1:-1;;;2983:316:1:o;3304:180::-;3360:6;3413:2;3401:9;3392:7;3388:23;3384:32;3381:52;;;3429:1;3426;3419:12;3381:52;3452:26;3468:9;3452:26;:::i;3697:315::-;3762:6;3770;3823:2;3811:9;3802:7;3798:23;3794:32;3791:52;;;3839:1;3836;3829:12;3791:52;3878:9;3865:23;3897:31;3922:5;3897:31;:::i;:::-;3947:5;-1:-1:-1;3971:35:1;4002:2;3987:18;;3971:35;:::i;:::-;3961:45;;3697:315;;;;;:::o;4695:388::-;4763:6;4771;4824:2;4812:9;4803:7;4799:23;4795:32;4792:52;;;4840:1;4837;4830:12;4792:52;4879:9;4866:23;4898:31;4923:5;4898:31;:::i;:::-;4948:5;-1:-1:-1;5005:2:1;4990:18;;4977:32;5018:33;4977:32;5018:33;:::i;:::-;5070:7;5060:17;;;4695:388;;;;;:::o;5088:356::-;5290:2;5272:21;;;5309:18;;;5302:30;5368:34;5363:2;5348:18;;5341:62;5435:2;5420:18;;5088:356::o;5449:380::-;5528:1;5524:12;;;;5571;;;5592:61;;5646:4;5638:6;5634:17;5624:27;;5592:61;5699:2;5691:6;5688:14;5668:18;5665:38;5662:161;;5745:10;5740:3;5736:20;5733:1;5726:31;5780:4;5777:1;5770:15;5808:4;5805:1;5798:15;5662:161;;5449:380;;;:::o;6652:127::-;6713:10;6708:3;6704:20;6701:1;6694:31;6744:4;6741:1;6734:15;6768:4;6765:1;6758:15;6784:125;6849:9;;;6870:10;;;6867:36;;;6883:18;;:::i;7319:168::-;7392:9;;;7423;;7440:15;;;7434:22;;7420:37;7410:71;;7461:18;;:::i;7492:217::-;7532:1;7558;7548:132;;7602:10;7597:3;7593:20;7590:1;7583:31;7637:4;7634:1;7627:15;7665:4;7662:1;7655:15;7548:132;-1:-1:-1;7694:9:1;;7492:217::o;11765:401::-;11967:2;11949:21;;;12006:2;11986:18;;;11979:30;12045:34;12040:2;12025:18;;12018:62;-1:-1:-1;;;12111:2:1;12096:18;;12089:35;12156:3;12141:19;;11765:401::o;12171:399::-;12373:2;12355:21;;;12412:2;12392:18;;;12385:30;12451:34;12446:2;12431:18;;12424:62;-1:-1:-1;;;12517:2:1;12502:18;;12495:33;12560:3;12545:19;;12171:399::o;14141:128::-;14208:9;;;14229:11;;;14226:37;;;14243:18;;:::i;14406:127::-;14467:10;14462:3;14458:20;14455:1;14448:31;14498:4;14495:1;14488:15;14522:4;14519:1;14512:15;14538:251;14608:6;14661:2;14649:9;14640:7;14636:23;14632:32;14629:52;;;14677:1;14674;14667:12;14629:52;14709:9;14703:16;14728:31;14753:5;14728:31;:::i;14794:980::-;15056:4;15104:3;15093:9;15089:19;15135:6;15124:9;15117:25;15161:2;15199:6;15194:2;15183:9;15179:18;15172:34;15242:3;15237:2;15226:9;15222:18;15215:31;15266:6;15301;15295:13;15332:6;15324;15317:22;15370:3;15359:9;15355:19;15348:26;;15409:2;15401:6;15397:15;15383:29;;15430:1;15440:195;15454:6;15451:1;15448:13;15440:195;;;15519:13;;-1:-1:-1;;;;;15515:39:1;15503:52;;15610:15;;;;15575:12;;;;15551:1;15469:9;15440:195;;;-1:-1:-1;;;;;;;15691:32:1;;;;15686:2;15671:18;;15664:60;-1:-1:-1;;;15755:3:1;15740:19;15733:35;15652:3;14794:980;-1:-1:-1;;;14794:980:1:o
Swarm Source
ipfs://0a8db0e87239430fadc608b50bd6a9022b9fa8469c077727a6fa9fd95db0cd42
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.