Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000,000 KAIJI
Holders
221
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
21,485,840.434501316276107997 KAIJIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Kaiji
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-26 */ /** * SPDX-License-Identifier: MIT */ 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 updated 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 updated 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 updated 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 IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router02 { 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 Kaiji is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); // Swapback bool private swapping; bool public swapEnabled = false; uint256 public minSwapbackLimit; uint256 public maxSwapbackLimit; //Anti-whale bool public limitsInEffect = true; uint256 public maxWallet; uint256 public maxTransactionAmount; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Blacklist bool public blacklistEnabled = true; mapping(address => bool) public blacklist; // Fee receivers address public lpWAddress; address public mktWAddress; address public teamWAddress; bool public publicTradingOpen = false; uint256 public feesOnBuys; uint256 public mktWalletFeeOnBuy; uint256 public autoLPFeeOnBuy; uint256 public teamWalletFeeOnBuy; uint256 public feesOnSells; uint256 public mktWalletFeeOnSell; uint256 public autoLPFeeOnSell; uint256 public teamWalletFeeOnSell; uint256 public contractBalanceForMktWAddress; uint256 public contractBalanceForAutoLiquidity; uint256 public contractBalanceForTeamWallet; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private feeExemptAddress; mapping(address => bool) public txLimitExemptAddress; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public dexPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event mktWAddressUpdated( address indexed newWallet, address indexed oldWallet ); event teamWAddressUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Kaiji", "KAIJI") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); setTxLimitExemptAddress(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); setTxLimitExemptAddress(address(uniswapV2Pair), true); _setDexPairs(address(uniswapV2Pair), true); uint256 _mktWalletFeeOnBuy = 1; uint256 _autoLPFeeOnBuy = 1; uint256 _teamWalletFeeOnBuy = 1; uint256 _mktWalletFeeOnSell = 1; uint256 _autoLPFeeOnSell = 1; uint256 _teamWalletFeeOnSell = 1; uint256 totalSupply = 100000000000 * 1e18; maxTransactionAmount = (totalSupply * 20) / 1000; // 2% of total supply maxWallet = (totalSupply * 20) / 1000; // 2% of total supply minSwapbackLimit = (totalSupply * 5) / 10000; // 0.05% swapback trigger maxSwapbackLimit = (totalSupply * 1) / 100; // 1% max swapback mktWalletFeeOnBuy = _mktWalletFeeOnBuy; autoLPFeeOnBuy = _autoLPFeeOnBuy; teamWalletFeeOnBuy = _teamWalletFeeOnBuy; feesOnBuys = mktWalletFeeOnBuy + autoLPFeeOnBuy + teamWalletFeeOnBuy; mktWalletFeeOnSell = _mktWalletFeeOnSell; autoLPFeeOnSell = _autoLPFeeOnSell; teamWalletFeeOnSell = _teamWalletFeeOnSell; feesOnSells = mktWalletFeeOnSell + autoLPFeeOnSell + teamWalletFeeOnSell; mktWAddress = address(msg.sender); teamWAddress = address(msg.sender); lpWAddress = msg.sender; // exclude from paying fees or having max transaction amount setFeeExemptAddress(owner(), true); setFeeExemptAddress(address(this), true); setFeeExemptAddress(address(0xdead), true); setFeeExemptAddress(mktWAddress, true); setTxLimitExemptAddress(owner(), true); setTxLimitExemptAddress(address(this), true); setTxLimitExemptAddress(address(0xdead), true); setTxLimitExemptAddress(mktWAddress, true); /* _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 {} /// @dev Launches the token and enables trading. Irriversable. function openToPublic() external onlyOwner { publicTradingOpen = true; swapEnabled = true; } /// @dev Removes the max wallet and max transaction limits function rmvTxAndWalletLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } /// @dev Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500. /// @param newAmount The new amount, in base 100000. Maximum 500 for 0.5%. Cant be higher than maxSwapbackLimit function updateMinSwapbackLimit(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= totalSupply()/ 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= 500 * totalSupply()/ 100000, "Swap amount cannot be higher than 0.5% total supply." ); require( (newAmount * totalSupply()/ 100000) <= maxSwapbackLimit, "Swap amount cannot be higher than maxSwapbackLimit" ); minSwapbackLimit = newAmount * totalSupply()/ 100000; return true; } /// @dev Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50. /// @param newAmount The new amount, in base 10000. Cant be lower than minSwapbackLimit function updateMaxSwapbackLimit(uint256 newAmount) external onlyOwner returns (bool) { require( (newAmount * totalSupply()/ 10000) >= minSwapbackLimit, "Swap amount cannot be lower than minSwapbackLimit" ); maxSwapbackLimit = (newAmount * totalSupply()/ 10000); return true; } /// @dev Changes the maximum amount of tokens that can be bought or sold in a single transaction /// @param newNum Base 1000, so 1% = 10. Minimum of 2 for 0.2% function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= 2, "Cannot set maxTransactionAmount lower than 0.2%" ); maxTransactionAmount = newNum * totalSupply()/ 1000; } /// @dev Changes the maximum amount of tokens a wallet can hold /// @param newNum Base 1000, so 1% = 10. Minimum of 5 for 0.5% function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= 5, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * totalSupply()/1000; } /// @dev Sets if a wallet is excluded from the max wallet and tx limits /// @param updAds The wallet to update /// @param isEx If the wallet is excluded or not function setTxLimitExemptAddress(address updAds, bool isEx) public onlyOwner { txLimitExemptAddress[updAds] = isEx; } /// @dev Sets if the contract can sell tokens /// @param enabled set to false to disable selling function setSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } /// @dev Sets the fees for buys /// @param _marketing The fee for the marketing wallet /// @param _liquidity The fee for the liquidity pool /// @param _team The fee for the dev wallet function setFeesOnBuys( uint256 _marketing, uint256 _liquidity, uint256 _team ) external onlyOwner { mktWalletFeeOnBuy = _marketing; autoLPFeeOnBuy = _liquidity; teamWalletFeeOnBuy = _team; feesOnBuys = mktWalletFeeOnBuy + autoLPFeeOnBuy + teamWalletFeeOnBuy; } /// @dev Sets the fees for sells /// @param _marketingFee The fee for the marketing wallet /// @param _liquidityFee The fee for the liquidity pool /// @param _devFee The fee for the dev wallet function setFeesOnSells( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { mktWalletFeeOnSell = _marketingFee; autoLPFeeOnSell = _liquidityFee; teamWalletFeeOnSell = _devFee; feesOnSells = mktWalletFeeOnSell + autoLPFeeOnSell + teamWalletFeeOnSell; } /// @dev Sets if a wallet is excluded from fees /// @param account The wallet to update /// @param excluded If the wallet is excluded or not function setFeeExemptAddress(address account, bool excluded) public onlyOwner { feeExemptAddress[account] = excluded; emit ExcludeFromFees(account, excluded); } /// @dev Sets an address as a new liquidity pair. You probably dont want to do this. /// @param pair The new pair function setDexPairs(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from dexPairs" ); _setDexPairs(pair, value); } function _setDexPairs(address pair, bool value) private { dexPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMktWAddress(address newMktWAddress) external onlyOwner { emit mktWAddressUpdated(newMktWAddress, mktWAddress); mktWAddress = newMktWAddress; } function updateLpWAddress(address newLpWAddress) external onlyOwner { lpWAddress = newLpWAddress; } function updateTeamWalletAddress(address newWallet) external onlyOwner { emit teamWAddressUpdated(newWallet, teamWAddress); teamWAddress = newWallet; } function isFeeExemptAddress(address account) public view returns (bool) { return feeExemptAddress[account]; } /// @dev Sets if multiple addresses are blacklisted or not /// @param accounts The wallets to update /// @param isBlacklisted If the wallets are blacklisted or not function setBlacklist(address[] memory accounts, bool isBlacklisted) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { blacklist[accounts[i]] = isBlacklisted; } } /// @dev Sets if the blacklist is in effect /// @param enabled If the blacklist should be checked or not function setBlacklistEnabled(bool enabled) external onlyOwner { blacklistEnabled = enabled; } 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 (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!publicTradingOpen) { require( feeExemptAddress[from] || feeExemptAddress[to], "Trading is not active." ); } //when buy if ( dexPairs[from] && !txLimitExemptAddress[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( dexPairs[to] && !txLimitExemptAddress[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!txLimitExemptAddress[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= minSwapbackLimit; if ( canSwap && swapEnabled && !swapping && !dexPairs[from] && !feeExemptAddress[from] && !feeExemptAddress[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (feeExemptAddress[from] || feeExemptAddress[to]) { takeFee = false; } if (!feeExemptAddress[from] || !feeExemptAddress[to]) { require(!blacklist[from], "Address is blacklisted"); } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (dexPairs[to] && feesOnSells > 0) { fees = amount.mul(feesOnSells).div(100); contractBalanceForAutoLiquidity += (fees * autoLPFeeOnSell) / feesOnSells; contractBalanceForTeamWallet += (fees * teamWalletFeeOnSell) / feesOnSells; contractBalanceForMktWAddress += (fees * mktWalletFeeOnSell) / feesOnSells; } // on buy else if (dexPairs[from] && feesOnBuys > 0) { fees = amount.mul(feesOnBuys).div(100); contractBalanceForAutoLiquidity += (fees * autoLPFeeOnBuy) / feesOnBuys; contractBalanceForTeamWallet += (fees * teamWalletFeeOnBuy) / feesOnBuys; contractBalanceForMktWAddress += (fees * mktWalletFeeOnBuy) / feesOnBuys; } 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] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lpWAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalanceForAutoLiquidity + contractBalanceForMktWAddress + contractBalanceForTeamWallet; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > maxSwapbackLimit) { contractBalance = maxSwapbackLimit; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * contractBalanceForAutoLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(contractBalanceForMktWAddress).div( totalTokensToSwap ); uint256 ethForDev = ethBalance.mul(contractBalanceForTeamWallet).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; contractBalanceForAutoLiquidity = 0; contractBalanceForMktWAddress = 0; contractBalanceForTeamWallet = 0; (success, ) = address(teamWAddress).call{value: ethForDev}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, contractBalanceForAutoLiquidity ); } (success, ) = address(mktWAddress).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":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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktWAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWAddressUpdated","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLPFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLPFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalanceForAutoLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalanceForMktWAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalanceForTeamWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dexPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnSells","outputs":[{"internalType":"uint256","name":"","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":"address","name":"account","type":"address"}],"name":"isFeeExemptAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapbackLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapbackLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktWAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktWalletFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktWalletFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openToPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicTradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvTxAndWalletLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setFeeExemptAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setFeesOnBuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesOnSells","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setTxLimitExemptAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"","type":"address"}],"name":"txLimitExemptAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newLpWAddress","type":"address"}],"name":"updateLpWAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSwapbackLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinSwapbackLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMktWAddress","type":"address"}],"name":"updateMktWAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526005805460ff60a81b191690556008805460ff199081166001908117909255600c805490911690911790556010805460ff60a01b191690553480156200004957600080fd5b50604051806040016040528060058152602001644b61696a6960d81b815250604051806040016040528060058152602001644b41494a4960d81b815250816003908162000097919062000799565b506004620000a6828262000799565b505050620000c3620000bd6200043d60201b60201c565b62000441565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e581600162000493565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000156919062000865565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca919062000865565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e919062000865565b6001600160a01b031660a08190526200025990600162000493565b60a051620002699060016200050d565b600180808080806c01431e0fae6d7217caa00000006103e86200028e826014620008ad565b6200029a9190620008cd565b600a556103e8620002ad826014620008ad565b620002b99190620008cd565b600955612710620002cc826005620008ad565b620002d89190620008cd565b6006556064620002ea826001620008ad565b620002f69190620008cd565b60075560128790556013869055601485905584620003158789620008f0565b620003219190620008f0565b60115560168490556017839055601882905581620003408486620008f0565b6200034c9190620008f0565b601555600f8054336001600160a01b0319918216811790925560108054821683179055600e805490911690911790556200039a620003926005546001600160a01b031690565b600162000561565b620003a730600162000561565b620003b661dead600162000561565b600f54620003cf906001600160a01b0316600162000561565b620003ee620003e66005546001600160a01b031690565b600162000493565b620003fb30600162000493565b6200040a61dead600162000493565b600f5462000423906001600160a01b0316600162000493565b6200042f33826200060b565b505050505050505062000906565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004e25760405162461bcd60e51b815260206004820181905260248201526000805160206200365583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005ac5760405162461bcd60e51b81526020600482018190526024820152600080516020620036558339815191526044820152606401620004d9565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006635760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004d9565b8060026000828254620006779190620008f0565b90915550506001600160a01b03821660009081526020819052604081208054839290620006a6908490620008f0565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200072057607f821691505b6020821081036200074157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006f057600081815260208120601f850160051c81016020861015620007705750805b601f850160051c820191505b8181101562000791578281556001016200077c565b505050505050565b81516001600160401b03811115620007b557620007b5620006f5565b620007cd81620007c684546200070b565b8462000747565b602080601f831160018114620008055760008415620007ec5750858301515b600019600386901b1c1916600185901b17855562000791565b600085815260208120601f198616915b82811015620008365788860151825594840194600190910190840162000815565b5085821015620008555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200087857600080fd5b81516001600160a01b03811681146200089057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008c757620008c762000897565b92915050565b600082620008eb57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008c757620008c762000897565b60805160a051612cff62000956600039600081816106160152610d2f0152600081816104a2015281816125600152818161261901528181612655015281816126cf01526127370152612cff6000f3fe60806040526004361061039b5760003560e01c806370a08231116101dc578063c18bc19511610102578063dfebde4d116100a0578063f47f78db1161006f578063f47f78db14610aa6578063f4e7e7f314610ac6578063f8b45b0514610ae6578063f9f92be414610afc57600080fd5b8063dfebde4d14610a31578063e01af92c14610a51578063e29c9b4414610a71578063f2fde38b14610a8657600080fd5b8063cc47e9e0116100dc578063cc47e9e014610995578063d99fee2b146109b5578063dcd6e53e146109d5578063dd62ed3e146109eb57600080fd5b8063c18bc1951461093f578063c7a82c1c1461095f578063c8c8ebe41461097f57600080fd5b80638da5cb5b1161017a578063a9059cbb11610149578063a9059cbb146108b4578063b8d28722146108d4578063bffb691d146108f5578063c002f9391461090f57600080fd5b80638da5cb5b1461084b5780639596a9051461086957806395d89b411461087f578063a457c2d71461089457600080fd5b80637cddf4ce116101b65780637cddf4ce146107b6578063818bc7c4146107cc578063838847a6146107e25780638793f4a91461081b57600080fd5b806370a0823114610755578063715018a61461078b578063736b5a59146107a057600080fd5b8063313ce567116102c15780634e3aad6a1161025f5780635bb355391161022e5780635bb35539146106e8578063600b2c8a146106fe57806365e007191461071e5780636ddd17131461073457600080fd5b80634e3aad6a14610672578063518633c61461068857806357849689146106a85780635842e88d146106c857600080fd5b8063489e7d2c1161029b578063489e7d2c146105ee57806349bd5a5e146106045780634a62bb65146106385780634e1a2df01461065257600080fd5b8063313ce567146105925780633469d1cc146105ae57806339509351146105ce57600080fd5b80631694505e11610339578063203e727e11610308578063203e727e1461052657806323b872dd146105465780632538d8661461056657806327c8f8351461057c57600080fd5b80631694505e1461049057806318160ddd146104dc5780631831ccf2146104f15780631e5a5fd21461050657600080fd5b8063095ea7b311610375578063095ea7b3146104085780630e85d1e3146104385780631201cbd01461045a57806315067f831461047a57600080fd5b806302ea1f4a146103a757806306fdde03146103d05780630886e205146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60155481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103e5610b2c565b6040516103c791906127af565b3480156103fe57600080fd5b506103bd60185481565b34801561041457600080fd5b5061042861042336600461281d565b610bbe565b60405190151581526020016103c7565b34801561044457600080fd5b5061045861045336600461286f565b610bd5565b005b34801561046657600080fd5b50610458610475366004612946565b610c74565b34801561048657600080fd5b506103bd60125481565b34801561049c57600080fd5b506104c47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103c7565b3480156104e857600080fd5b506002546103bd565b3480156104fd57600080fd5b50610458610cb1565b34801561051257600080fd5b50610458610521366004612961565b610d03565b34801561053257600080fd5b50610458610541366004612996565b610dcd565b34801561055257600080fd5b506104286105613660046129af565b610e86565b34801561057257600080fd5b506103bd60145481565b34801561058857600080fd5b506104c461dead81565b34801561059e57600080fd5b50604051601281526020016103c7565b3480156105ba57600080fd5b506104586105c93660046129f0565b610f30565b3480156105da57600080fd5b506104286105e936600461281d565b610f86565b3480156105fa57600080fd5b506103bd60135481565b34801561061057600080fd5b506104c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561064457600080fd5b506008546104289060ff1681565b34801561065e57600080fd5b5061045861066d3660046129f0565b610fc2565b34801561067e57600080fd5b506103bd60195481565b34801561069457600080fd5b50600f546104c4906001600160a01b031681565b3480156106b457600080fd5b506104586106c3366004612a1c565b611018565b3480156106d457600080fd5b506104286106e3366004612996565b61109f565b3480156106f457600080fd5b506103bd601a5481565b34801561070a57600080fd5b50610458610719366004612961565b611183565b34801561072a57600080fd5b506103bd60075481565b34801561074057600080fd5b5060055461042890600160a81b900460ff1681565b34801561076157600080fd5b506103bd610770366004612a1c565b6001600160a01b031660009081526020819052604090205490565b34801561079757600080fd5b5061045861120c565b3480156107ac57600080fd5b506103bd60165481565b3480156107c257600080fd5b506103bd60175481565b3480156107d857600080fd5b506103bd60065481565b3480156107ee57600080fd5b506104286107fd366004612a1c565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561082757600080fd5b50610428610836366004612a1c565b601d6020526000908152604090205460ff1681565b34801561085757600080fd5b506005546001600160a01b03166104c4565b34801561087557600080fd5b506103bd601b5481565b34801561088b57600080fd5b506103e5611242565b3480156108a057600080fd5b506104286108af36600461281d565b611251565b3480156108c057600080fd5b506104286108cf36600461281d565b6112ea565b3480156108e057600080fd5b5060105461042890600160a01b900460ff1681565b34801561090157600080fd5b50600c546104289060ff1681565b34801561091b57600080fd5b5061042861092a366004612a1c565b601e6020526000908152604090205460ff1681565b34801561094b57600080fd5b5061045861095a366004612996565b6112f7565b34801561096b57600080fd5b5061042861097a366004612996565b6113a4565b34801561098b57600080fd5b506103bd600a5481565b3480156109a157600080fd5b506104586109b0366004612961565b61159d565b3480156109c157600080fd5b506104586109d0366004612a1c565b6115f2565b3480156109e157600080fd5b506103bd60115481565b3480156109f757600080fd5b506103bd610a06366004612a39565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3d57600080fd5b50600e546104c4906001600160a01b031681565b348015610a5d57600080fd5b50610458610a6c366004612946565b61163e565b348015610a7d57600080fd5b50610428611686565b348015610a9257600080fd5b50610458610aa1366004612a1c565b6116c3565b348015610ab257600080fd5b50610458610ac1366004612a1c565b61175e565b348015610ad257600080fd5b506010546104c4906001600160a01b031681565b348015610af257600080fd5b506103bd60095481565b348015610b0857600080fd5b50610428610b17366004612a1c565b600d6020526000908152604090205460ff1681565b606060038054610b3b90612a72565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790612a72565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b6000610bcb3384846117e5565b5060015b92915050565b6005546001600160a01b03163314610c085760405162461bcd60e51b8152600401610bff90612aac565b60405180910390fd5b60005b8251811015610c6f5781600d6000858481518110610c2b57610c2b612ae1565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c6781612b0d565b915050610c0b565b505050565b6005546001600160a01b03163314610c9e5760405162461bcd60e51b8152600401610bff90612aac565b600c805460ff1916911515919091179055565b6005546001600160a01b03163314610cdb5760405162461bcd60e51b8152600401610bff90612aac565b6010805460ff60a01b1916600160a01b1790556005805460ff60a81b1916600160a81b179055565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b8152600401610bff90612aac565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610dbf5760405162461bcd60e51b815260206004820152602860248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015267646578506169727360c01b6064820152608401610bff565b610dc98282611909565b5050565b6005546001600160a01b03163314610df75760405162461bcd60e51b8152600401610bff90612aac565b6002811015610e605760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610bff565b6103e8610e6c60025490565b610e769083612b26565b610e809190612b3d565b600a5550565b6000610e9384848461195d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f185760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bff565b610f2585338584036117e5565b506001949350505050565b6005546001600160a01b03163314610f5a5760405162461bcd60e51b8152600401610bff90612aac565b60128390556013829055601481905580610f748385612b5f565b610f7e9190612b5f565b601155505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bcb918590610fbd908690612b5f565b6117e5565b6005546001600160a01b03163314610fec5760405162461bcd60e51b8152600401610bff90612aac565b601683905560178290556018819055806110068385612b5f565b6110109190612b5f565b601555505050565b6005546001600160a01b031633146110425760405162461bcd60e51b8152600401610bff90612aac565b600f546040516001600160a01b03918216918316907fd3de820c7bd424f3332846169b1685ede12e0103f06eff14d90336032e9cf01390600090a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146110cc5760405162461bcd60e51b8152600401610bff90612aac565b6006546127106110db60025490565b6110e59085612b26565b6110ef9190612b3d565b10156111575760405162461bcd60e51b815260206004820152603160248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015270081b5a5b94ddd85c189858dad31a5b5a5d607a1b6064820152608401610bff565b61271061116360025490565b61116d9084612b26565b6111779190612b3d565b6007555060015b919050565b6005546001600160a01b031633146111ad5760405162461bcd60e51b8152600401610bff90612aac565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112365760405162461bcd60e51b8152600401610bff90612aac565b6112406000612113565b565b606060048054610b3b90612a72565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112d35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bff565b6112e033858584036117e5565b5060019392505050565b6000610bcb33848461195d565b6005546001600160a01b031633146113215760405162461bcd60e51b8152600401610bff90612aac565b600581101561137e5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610bff565b6103e861138a60025490565b6113949083612b26565b61139e9190612b3d565b60095550565b6005546000906001600160a01b031633146113d15760405162461bcd60e51b8152600401610bff90612aac565b620186a06113de60025490565b6113e89190612b3d565b8210156114555760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bff565b620186a061146260025490565b61146e906101f4612b26565b6114789190612b3d565b8211156114e45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bff565b600754620186a06114f460025490565b6114fe9085612b26565b6115089190612b3d565b11156115715760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152711b881b585e14ddd85c189858dad31a5b5a5d60721b6064820152608401610bff565b620186a061157e60025490565b6115889084612b26565b6115929190612b3d565b600655506001919050565b6005546001600160a01b031633146115c75760405162461bcd60e51b8152600401610bff90612aac565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610bff90612aac565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116685760405162461bcd60e51b8152600401610bff90612aac565b60058054911515600160a81b0260ff60a81b19909216919091179055565b6005546000906001600160a01b031633146116b35760405162461bcd60e51b8152600401610bff90612aac565b506008805460ff19169055600190565b6005546001600160a01b031633146116ed5760405162461bcd60e51b8152600401610bff90612aac565b6001600160a01b0381166117525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bff565b61175b81612113565b50565b6005546001600160a01b031633146117885760405162461bcd60e51b8152600401610bff90612aac565b6010546040516001600160a01b03918216918316907f90a654b3035da909ff5e4c7f9bed5fed3e3d7f1a11cddf7684fa2490a4a74d2f90600090a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bff565b6001600160a01b0382166118a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bff565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166119835760405162461bcd60e51b8152600401610bff90612b72565b6001600160a01b0382166119a95760405162461bcd60e51b8152600401610bff90612bb7565b806000036119bd57610c6f83836000612165565b60085460ff1615611d35576005546001600160a01b038481169116148015906119f457506005546001600160a01b03838116911614155b8015611a0857506001600160a01b03821615155b8015611a1f57506001600160a01b03821661dead14155b8015611a355750600554600160a01b900460ff16155b15611d3557601054600160a01b900460ff16611acf576001600160a01b0383166000908152601c602052604090205460ff1680611a8a57506001600160a01b0382166000908152601c602052604090205460ff165b611acf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bff565b6001600160a01b0383166000908152601e602052604090205460ff168015611b1057506001600160a01b0382166000908152601d602052604090205460ff16155b15611bf457600a54811115611b855760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bff565b6009546001600160a01b038316600090815260208190526040902054611bab9083612b5f565b1115611bef5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bff565b611d35565b6001600160a01b0382166000908152601e602052604090205460ff168015611c3557506001600160a01b0383166000908152601d602052604090205460ff16155b15611cab57600a54811115611bef5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bff565b6001600160a01b0382166000908152601d602052604090205460ff16611d35576009546001600160a01b038316600090815260208190526040902054611cf19083612b5f565b1115611d355760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bff565b3060009081526020819052604090205460065481108015908190611d625750600554600160a81b900460ff165b8015611d785750600554600160a01b900460ff16155b8015611d9d57506001600160a01b0385166000908152601e602052604090205460ff16155b8015611dc257506001600160a01b0385166000908152601c602052604090205460ff16155b8015611de757506001600160a01b0384166000908152601c602052604090205460ff16155b15611e15576005805460ff60a01b1916600160a01b179055611e076122ba565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601c602052604090205460ff600160a01b909204821615911680611e6357506001600160a01b0385166000908152601c602052604090205460ff165b15611e6c575060005b6001600160a01b0386166000908152601c602052604090205460ff161580611ead57506001600160a01b0385166000908152601c602052604090205460ff16155b15611f14576001600160a01b0386166000908152600d602052604090205460ff1615611f145760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610bff565b600081156120ff576001600160a01b0386166000908152601e602052604090205460ff168015611f4657506000601554115b1561200457611f6b6064611f65601554886124de90919063ffffffff16565b906124f1565b905060155460175482611f7e9190612b26565b611f889190612b3d565b601a6000828254611f999190612b5f565b9091555050601554601854611fae9083612b26565b611fb89190612b3d565b601b6000828254611fc99190612b5f565b9091555050601554601654611fde9083612b26565b611fe89190612b3d565b60196000828254611ff99190612b5f565b909155506120e19050565b6001600160a01b0387166000908152601e602052604090205460ff16801561202e57506000601154115b156120e15761204d6064611f65601154886124de90919063ffffffff16565b9050601154601354826120609190612b26565b61206a9190612b3d565b601a600082825461207b9190612b5f565b90915550506011546014546120909083612b26565b61209a9190612b3d565b601b60008282546120ab9190612b5f565b90915550506011546012546120c09083612b26565b6120ca9190612b3d565b601960008282546120db9190612b5f565b90915550505b80156120f2576120f2873083612165565b6120fc8186612bfa565b94505b61210a878787612165565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661218b5760405162461bcd60e51b8152600401610bff90612b72565b6001600160a01b0382166121b15760405162461bcd60e51b8152600401610bff90612bb7565b6001600160a01b038316600090815260208190526040902054818110156122295760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bff565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612260908490612b5f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122ac91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601b54601954601a546122e19190612b5f565b6122eb9190612b5f565b905060008215806122fa575081155b1561230457505050565b6007548311156123145760075492505b6000600283601a54866123279190612b26565b6123319190612b3d565b61233b9190612b3d565b9050600061234985836124fd565b90504761235582612509565b600061236147836124fd565b9050600061237e87611f65601954856124de90919063ffffffff16565b9050600061239b88611f65601b54866124de90919063ffffffff16565b90506000816123aa8486612bfa565b6123b49190612bfa565b6000601a8190556019819055601b8190556010546040519293506001600160a01b031691849181818185875af1925050503d8060008114612411576040519150601f19603f3d011682016040523d82523d6000602084013e612416565b606091505b5090985050861580159061242a5750600081115b1561247d5761243987826126c9565b601a54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600f546040516001600160a01b03909116904790600081818185875af1925050503d80600081146124ca576040519150601f19603f3d011682016040523d82523d6000602084013e6124cf565b606091505b50505050505050505050505050565b60006124ea8284612b26565b9392505050565b60006124ea8284612b3d565b60006124ea8284612bfa565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061253e5761253e612ae1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e09190612c0d565b816001815181106125f3576125f3612ae1565b60200260200101906001600160a01b031690816001600160a01b03168152505061263e307f0000000000000000000000000000000000000000000000000000000000000000846117e5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612693908590600090869030904290600401612c2a565b600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b505050505050565b6126f4307f0000000000000000000000000000000000000000000000000000000000000000846117e5565b600e5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612783573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127a89190612c9b565b5050505050565b600060208083528351808285015260005b818110156127dc578581018301518582016040015282016127c0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461175b57600080fd5b803561117e816127fd565b6000806040838503121561283057600080fd5b823561283b816127fd565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8035801515811461117e57600080fd5b6000806040838503121561288257600080fd5b823567ffffffffffffffff8082111561289a57600080fd5b818501915085601f8301126128ae57600080fd5b81356020828211156128c2576128c2612849565b8160051b604051601f19603f830116810181811086821117156128e7576128e7612849565b60405292835281830193508481018201928984111561290557600080fd5b948201945b8386101561292a5761291b86612812565b8552948201949382019361290a565b9650612939905087820161285f565b9450505050509250929050565b60006020828403121561295857600080fd5b6124ea8261285f565b6000806040838503121561297457600080fd5b823561297f816127fd565b915061298d6020840161285f565b90509250929050565b6000602082840312156129a857600080fd5b5035919050565b6000806000606084860312156129c457600080fd5b83356129cf816127fd565b925060208401356129df816127fd565b929592945050506040919091013590565b600080600060608486031215612a0557600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a2e57600080fd5b81356124ea816127fd565b60008060408385031215612a4c57600080fd5b8235612a57816127fd565b91506020830135612a67816127fd565b809150509250929050565b600181811c90821680612a8657607f821691505b602082108103612aa657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b1f57612b1f612af7565b5060010190565b8082028115828204841417610bcf57610bcf612af7565b600082612b5a57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bcf57610bcf612af7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bcf57610bcf612af7565b600060208284031215612c1f57600080fd5b81516124ea816127fd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c7a5784516001600160a01b031683529383019391830191600101612c55565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cb057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ed9d13ee5864af8c342f87e161d63c2efb0b92ed90da706c889a232ec5a3dae764736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061039b5760003560e01c806370a08231116101dc578063c18bc19511610102578063dfebde4d116100a0578063f47f78db1161006f578063f47f78db14610aa6578063f4e7e7f314610ac6578063f8b45b0514610ae6578063f9f92be414610afc57600080fd5b8063dfebde4d14610a31578063e01af92c14610a51578063e29c9b4414610a71578063f2fde38b14610a8657600080fd5b8063cc47e9e0116100dc578063cc47e9e014610995578063d99fee2b146109b5578063dcd6e53e146109d5578063dd62ed3e146109eb57600080fd5b8063c18bc1951461093f578063c7a82c1c1461095f578063c8c8ebe41461097f57600080fd5b80638da5cb5b1161017a578063a9059cbb11610149578063a9059cbb146108b4578063b8d28722146108d4578063bffb691d146108f5578063c002f9391461090f57600080fd5b80638da5cb5b1461084b5780639596a9051461086957806395d89b411461087f578063a457c2d71461089457600080fd5b80637cddf4ce116101b65780637cddf4ce146107b6578063818bc7c4146107cc578063838847a6146107e25780638793f4a91461081b57600080fd5b806370a0823114610755578063715018a61461078b578063736b5a59146107a057600080fd5b8063313ce567116102c15780634e3aad6a1161025f5780635bb355391161022e5780635bb35539146106e8578063600b2c8a146106fe57806365e007191461071e5780636ddd17131461073457600080fd5b80634e3aad6a14610672578063518633c61461068857806357849689146106a85780635842e88d146106c857600080fd5b8063489e7d2c1161029b578063489e7d2c146105ee57806349bd5a5e146106045780634a62bb65146106385780634e1a2df01461065257600080fd5b8063313ce567146105925780633469d1cc146105ae57806339509351146105ce57600080fd5b80631694505e11610339578063203e727e11610308578063203e727e1461052657806323b872dd146105465780632538d8661461056657806327c8f8351461057c57600080fd5b80631694505e1461049057806318160ddd146104dc5780631831ccf2146104f15780631e5a5fd21461050657600080fd5b8063095ea7b311610375578063095ea7b3146104085780630e85d1e3146104385780631201cbd01461045a57806315067f831461047a57600080fd5b806302ea1f4a146103a757806306fdde03146103d05780630886e205146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60155481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103e5610b2c565b6040516103c791906127af565b3480156103fe57600080fd5b506103bd60185481565b34801561041457600080fd5b5061042861042336600461281d565b610bbe565b60405190151581526020016103c7565b34801561044457600080fd5b5061045861045336600461286f565b610bd5565b005b34801561046657600080fd5b50610458610475366004612946565b610c74565b34801561048657600080fd5b506103bd60125481565b34801561049c57600080fd5b506104c47f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103c7565b3480156104e857600080fd5b506002546103bd565b3480156104fd57600080fd5b50610458610cb1565b34801561051257600080fd5b50610458610521366004612961565b610d03565b34801561053257600080fd5b50610458610541366004612996565b610dcd565b34801561055257600080fd5b506104286105613660046129af565b610e86565b34801561057257600080fd5b506103bd60145481565b34801561058857600080fd5b506104c461dead81565b34801561059e57600080fd5b50604051601281526020016103c7565b3480156105ba57600080fd5b506104586105c93660046129f0565b610f30565b3480156105da57600080fd5b506104286105e936600461281d565b610f86565b3480156105fa57600080fd5b506103bd60135481565b34801561061057600080fd5b506104c47f000000000000000000000000892ab42ab9faf7e9fe96c65d0b7dd2d808f7bb0481565b34801561064457600080fd5b506008546104289060ff1681565b34801561065e57600080fd5b5061045861066d3660046129f0565b610fc2565b34801561067e57600080fd5b506103bd60195481565b34801561069457600080fd5b50600f546104c4906001600160a01b031681565b3480156106b457600080fd5b506104586106c3366004612a1c565b611018565b3480156106d457600080fd5b506104286106e3366004612996565b61109f565b3480156106f457600080fd5b506103bd601a5481565b34801561070a57600080fd5b50610458610719366004612961565b611183565b34801561072a57600080fd5b506103bd60075481565b34801561074057600080fd5b5060055461042890600160a81b900460ff1681565b34801561076157600080fd5b506103bd610770366004612a1c565b6001600160a01b031660009081526020819052604090205490565b34801561079757600080fd5b5061045861120c565b3480156107ac57600080fd5b506103bd60165481565b3480156107c257600080fd5b506103bd60175481565b3480156107d857600080fd5b506103bd60065481565b3480156107ee57600080fd5b506104286107fd366004612a1c565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561082757600080fd5b50610428610836366004612a1c565b601d6020526000908152604090205460ff1681565b34801561085757600080fd5b506005546001600160a01b03166104c4565b34801561087557600080fd5b506103bd601b5481565b34801561088b57600080fd5b506103e5611242565b3480156108a057600080fd5b506104286108af36600461281d565b611251565b3480156108c057600080fd5b506104286108cf36600461281d565b6112ea565b3480156108e057600080fd5b5060105461042890600160a01b900460ff1681565b34801561090157600080fd5b50600c546104289060ff1681565b34801561091b57600080fd5b5061042861092a366004612a1c565b601e6020526000908152604090205460ff1681565b34801561094b57600080fd5b5061045861095a366004612996565b6112f7565b34801561096b57600080fd5b5061042861097a366004612996565b6113a4565b34801561098b57600080fd5b506103bd600a5481565b3480156109a157600080fd5b506104586109b0366004612961565b61159d565b3480156109c157600080fd5b506104586109d0366004612a1c565b6115f2565b3480156109e157600080fd5b506103bd60115481565b3480156109f757600080fd5b506103bd610a06366004612a39565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3d57600080fd5b50600e546104c4906001600160a01b031681565b348015610a5d57600080fd5b50610458610a6c366004612946565b61163e565b348015610a7d57600080fd5b50610428611686565b348015610a9257600080fd5b50610458610aa1366004612a1c565b6116c3565b348015610ab257600080fd5b50610458610ac1366004612a1c565b61175e565b348015610ad257600080fd5b506010546104c4906001600160a01b031681565b348015610af257600080fd5b506103bd60095481565b348015610b0857600080fd5b50610428610b17366004612a1c565b600d6020526000908152604090205460ff1681565b606060038054610b3b90612a72565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790612a72565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b6000610bcb3384846117e5565b5060015b92915050565b6005546001600160a01b03163314610c085760405162461bcd60e51b8152600401610bff90612aac565b60405180910390fd5b60005b8251811015610c6f5781600d6000858481518110610c2b57610c2b612ae1565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c6781612b0d565b915050610c0b565b505050565b6005546001600160a01b03163314610c9e5760405162461bcd60e51b8152600401610bff90612aac565b600c805460ff1916911515919091179055565b6005546001600160a01b03163314610cdb5760405162461bcd60e51b8152600401610bff90612aac565b6010805460ff60a01b1916600160a01b1790556005805460ff60a81b1916600160a81b179055565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b8152600401610bff90612aac565b7f000000000000000000000000892ab42ab9faf7e9fe96c65d0b7dd2d808f7bb046001600160a01b0316826001600160a01b031603610dbf5760405162461bcd60e51b815260206004820152602860248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015267646578506169727360c01b6064820152608401610bff565b610dc98282611909565b5050565b6005546001600160a01b03163314610df75760405162461bcd60e51b8152600401610bff90612aac565b6002811015610e605760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610bff565b6103e8610e6c60025490565b610e769083612b26565b610e809190612b3d565b600a5550565b6000610e9384848461195d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f185760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bff565b610f2585338584036117e5565b506001949350505050565b6005546001600160a01b03163314610f5a5760405162461bcd60e51b8152600401610bff90612aac565b60128390556013829055601481905580610f748385612b5f565b610f7e9190612b5f565b601155505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bcb918590610fbd908690612b5f565b6117e5565b6005546001600160a01b03163314610fec5760405162461bcd60e51b8152600401610bff90612aac565b601683905560178290556018819055806110068385612b5f565b6110109190612b5f565b601555505050565b6005546001600160a01b031633146110425760405162461bcd60e51b8152600401610bff90612aac565b600f546040516001600160a01b03918216918316907fd3de820c7bd424f3332846169b1685ede12e0103f06eff14d90336032e9cf01390600090a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146110cc5760405162461bcd60e51b8152600401610bff90612aac565b6006546127106110db60025490565b6110e59085612b26565b6110ef9190612b3d565b10156111575760405162461bcd60e51b815260206004820152603160248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015270081b5a5b94ddd85c189858dad31a5b5a5d607a1b6064820152608401610bff565b61271061116360025490565b61116d9084612b26565b6111779190612b3d565b6007555060015b919050565b6005546001600160a01b031633146111ad5760405162461bcd60e51b8152600401610bff90612aac565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112365760405162461bcd60e51b8152600401610bff90612aac565b6112406000612113565b565b606060048054610b3b90612a72565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112d35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bff565b6112e033858584036117e5565b5060019392505050565b6000610bcb33848461195d565b6005546001600160a01b031633146113215760405162461bcd60e51b8152600401610bff90612aac565b600581101561137e5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610bff565b6103e861138a60025490565b6113949083612b26565b61139e9190612b3d565b60095550565b6005546000906001600160a01b031633146113d15760405162461bcd60e51b8152600401610bff90612aac565b620186a06113de60025490565b6113e89190612b3d565b8210156114555760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bff565b620186a061146260025490565b61146e906101f4612b26565b6114789190612b3d565b8211156114e45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610bff565b600754620186a06114f460025490565b6114fe9085612b26565b6115089190612b3d565b11156115715760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152711b881b585e14ddd85c189858dad31a5b5a5d60721b6064820152608401610bff565b620186a061157e60025490565b6115889084612b26565b6115929190612b3d565b600655506001919050565b6005546001600160a01b031633146115c75760405162461bcd60e51b8152600401610bff90612aac565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610bff90612aac565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116685760405162461bcd60e51b8152600401610bff90612aac565b60058054911515600160a81b0260ff60a81b19909216919091179055565b6005546000906001600160a01b031633146116b35760405162461bcd60e51b8152600401610bff90612aac565b506008805460ff19169055600190565b6005546001600160a01b031633146116ed5760405162461bcd60e51b8152600401610bff90612aac565b6001600160a01b0381166117525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bff565b61175b81612113565b50565b6005546001600160a01b031633146117885760405162461bcd60e51b8152600401610bff90612aac565b6010546040516001600160a01b03918216918316907f90a654b3035da909ff5e4c7f9bed5fed3e3d7f1a11cddf7684fa2490a4a74d2f90600090a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bff565b6001600160a01b0382166118a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bff565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166119835760405162461bcd60e51b8152600401610bff90612b72565b6001600160a01b0382166119a95760405162461bcd60e51b8152600401610bff90612bb7565b806000036119bd57610c6f83836000612165565b60085460ff1615611d35576005546001600160a01b038481169116148015906119f457506005546001600160a01b03838116911614155b8015611a0857506001600160a01b03821615155b8015611a1f57506001600160a01b03821661dead14155b8015611a355750600554600160a01b900460ff16155b15611d3557601054600160a01b900460ff16611acf576001600160a01b0383166000908152601c602052604090205460ff1680611a8a57506001600160a01b0382166000908152601c602052604090205460ff165b611acf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bff565b6001600160a01b0383166000908152601e602052604090205460ff168015611b1057506001600160a01b0382166000908152601d602052604090205460ff16155b15611bf457600a54811115611b855760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bff565b6009546001600160a01b038316600090815260208190526040902054611bab9083612b5f565b1115611bef5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bff565b611d35565b6001600160a01b0382166000908152601e602052604090205460ff168015611c3557506001600160a01b0383166000908152601d602052604090205460ff16155b15611cab57600a54811115611bef5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bff565b6001600160a01b0382166000908152601d602052604090205460ff16611d35576009546001600160a01b038316600090815260208190526040902054611cf19083612b5f565b1115611d355760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610bff565b3060009081526020819052604090205460065481108015908190611d625750600554600160a81b900460ff165b8015611d785750600554600160a01b900460ff16155b8015611d9d57506001600160a01b0385166000908152601e602052604090205460ff16155b8015611dc257506001600160a01b0385166000908152601c602052604090205460ff16155b8015611de757506001600160a01b0384166000908152601c602052604090205460ff16155b15611e15576005805460ff60a01b1916600160a01b179055611e076122ba565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601c602052604090205460ff600160a01b909204821615911680611e6357506001600160a01b0385166000908152601c602052604090205460ff165b15611e6c575060005b6001600160a01b0386166000908152601c602052604090205460ff161580611ead57506001600160a01b0385166000908152601c602052604090205460ff16155b15611f14576001600160a01b0386166000908152600d602052604090205460ff1615611f145760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610bff565b600081156120ff576001600160a01b0386166000908152601e602052604090205460ff168015611f4657506000601554115b1561200457611f6b6064611f65601554886124de90919063ffffffff16565b906124f1565b905060155460175482611f7e9190612b26565b611f889190612b3d565b601a6000828254611f999190612b5f565b9091555050601554601854611fae9083612b26565b611fb89190612b3d565b601b6000828254611fc99190612b5f565b9091555050601554601654611fde9083612b26565b611fe89190612b3d565b60196000828254611ff99190612b5f565b909155506120e19050565b6001600160a01b0387166000908152601e602052604090205460ff16801561202e57506000601154115b156120e15761204d6064611f65601154886124de90919063ffffffff16565b9050601154601354826120609190612b26565b61206a9190612b3d565b601a600082825461207b9190612b5f565b90915550506011546014546120909083612b26565b61209a9190612b3d565b601b60008282546120ab9190612b5f565b90915550506011546012546120c09083612b26565b6120ca9190612b3d565b601960008282546120db9190612b5f565b90915550505b80156120f2576120f2873083612165565b6120fc8186612bfa565b94505b61210a878787612165565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661218b5760405162461bcd60e51b8152600401610bff90612b72565b6001600160a01b0382166121b15760405162461bcd60e51b8152600401610bff90612bb7565b6001600160a01b038316600090815260208190526040902054818110156122295760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bff565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612260908490612b5f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122ac91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601b54601954601a546122e19190612b5f565b6122eb9190612b5f565b905060008215806122fa575081155b1561230457505050565b6007548311156123145760075492505b6000600283601a54866123279190612b26565b6123319190612b3d565b61233b9190612b3d565b9050600061234985836124fd565b90504761235582612509565b600061236147836124fd565b9050600061237e87611f65601954856124de90919063ffffffff16565b9050600061239b88611f65601b54866124de90919063ffffffff16565b90506000816123aa8486612bfa565b6123b49190612bfa565b6000601a8190556019819055601b8190556010546040519293506001600160a01b031691849181818185875af1925050503d8060008114612411576040519150601f19603f3d011682016040523d82523d6000602084013e612416565b606091505b5090985050861580159061242a5750600081115b1561247d5761243987826126c9565b601a54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600f546040516001600160a01b03909116904790600081818185875af1925050503d80600081146124ca576040519150601f19603f3d011682016040523d82523d6000602084013e6124cf565b606091505b50505050505050505050505050565b60006124ea8284612b26565b9392505050565b60006124ea8284612b3d565b60006124ea8284612bfa565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061253e5761253e612ae1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e09190612c0d565b816001815181106125f3576125f3612ae1565b60200260200101906001600160a01b031690816001600160a01b03168152505061263e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117e5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612693908590600090869030904290600401612c2a565b600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b505050505050565b6126f4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117e5565b600e5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612783573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127a89190612c9b565b5050505050565b600060208083528351808285015260005b818110156127dc578581018301518582016040015282016127c0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461175b57600080fd5b803561117e816127fd565b6000806040838503121561283057600080fd5b823561283b816127fd565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8035801515811461117e57600080fd5b6000806040838503121561288257600080fd5b823567ffffffffffffffff8082111561289a57600080fd5b818501915085601f8301126128ae57600080fd5b81356020828211156128c2576128c2612849565b8160051b604051601f19603f830116810181811086821117156128e7576128e7612849565b60405292835281830193508481018201928984111561290557600080fd5b948201945b8386101561292a5761291b86612812565b8552948201949382019361290a565b9650612939905087820161285f565b9450505050509250929050565b60006020828403121561295857600080fd5b6124ea8261285f565b6000806040838503121561297457600080fd5b823561297f816127fd565b915061298d6020840161285f565b90509250929050565b6000602082840312156129a857600080fd5b5035919050565b6000806000606084860312156129c457600080fd5b83356129cf816127fd565b925060208401356129df816127fd565b929592945050506040919091013590565b600080600060608486031215612a0557600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a2e57600080fd5b81356124ea816127fd565b60008060408385031215612a4c57600080fd5b8235612a57816127fd565b91506020830135612a67816127fd565b809150509250929050565b600181811c90821680612a8657607f821691505b602082108103612aa657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b1f57612b1f612af7565b5060010190565b8082028115828204841417610bcf57610bcf612af7565b600082612b5a57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bcf57610bcf612af7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bcf57610bcf612af7565b600060208284031215612c1f57600080fd5b81516124ea816127fd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c7a5784516001600160a01b031683529383019391830191600101612c55565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cb057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ed9d13ee5864af8c342f87e161d63c2efb0b92ed90da706c889a232ec5a3dae764736f6c63430008130033
Deployed Bytecode Sourcemap
24889:18548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25976:26;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;25976:26:0;;;;;;;;10712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26086:34::-;;;;;;;;;;;;;;;;12879:169;;;;;;;;;;-1:-1:-1;12879:169:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;12879:169:0;1344:187:1;35937:240:0;;;;;;;;;;-1:-1:-1;35937:240:0;;;;;:::i;:::-;;:::i;:::-;;36300:107;;;;;;;;;;-1:-1:-1;36300:107:0;;;;;:::i;:::-;;:::i;25859:32::-;;;;;;;;;;;;;;;;24964:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3405:32:1;;;3387:51;;3375:2;3360:18;24964:51:0;3214:230:1;11832:108:0;;;;;;;;;;-1:-1:-1;11920:12:0;;11832:108;;29854:115;;;;;;;;;;;;;:::i;34660:255::-;;;;;;;;;;-1:-1:-1;34660:255:0;;;;;:::i;:::-;;:::i;31872:252::-;;;;;;;;;;-1:-1:-1;31872:252:0;;;;;:::i;:::-;;:::i;13530:492::-;;;;;;;;;;-1:-1:-1;13530:492:0;;;;;:::i;:::-;;:::i;25934:33::-;;;;;;;;;;;;;;;;25067:53;;;;;;;;;;;;25113:6;25067:53;;11674:93;;;;;;;;;;-1:-1:-1;11674:93:0;;11757:2;4765:36:1;;4753:2;4738:18;11674:93:0;4623:184:1;33268:334:0;;;;;;;;;;-1:-1:-1;33268:334:0;;;;;:::i;:::-;;:::i;14431:215::-;;;;;;;;;;-1:-1:-1;14431:215:0;;;;;:::i;:::-;;:::i;25898:29::-;;;;;;;;;;;;;;;;25022:38;;;;;;;;;;;;;;;25308:33;;;;;;;;;;-1:-1:-1;25308:33:0;;;;;;;;33823:358;;;;;;;;;;-1:-1:-1;33823:358:0;;;;;:::i;:::-;;:::i;26129:44::-;;;;;;;;;;;;;;;;25710:26;;;;;;;;;;-1:-1:-1;25710:26:0;;;;-1:-1:-1;;;;;25710:26:0;;;35086:203;;;;;;;;;;-1:-1:-1;35086:203:0;;;;;:::i;:::-;;:::i;31317:377::-;;;;;;;;;;-1:-1:-1;31317:377:0;;;;;:::i;:::-;;:::i;26180:46::-;;;;;;;;;;;;;;;;34345:183;;;;;;;;;;-1:-1:-1;34345:183:0;;;;;:::i;:::-;;:::i;25250:31::-;;;;;;;;;;;;;;;;25174;;;;;;;;;;-1:-1:-1;25174:31:0;;;;-1:-1:-1;;;25174:31:0;;;;;;12003:127;;;;;;;;;;-1:-1:-1;12003:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12104:18:0;12077:7;12104:18;;;;;;;;;;;;12003:127;21736:103;;;;;;;;;;;;;:::i;26009:33::-;;;;;;;;;;;;;;;;26049:30;;;;;;;;;;;;;;;;25212:31;;;;;;;;;;;;;;;;35623:123;;;;;;;;;;-1:-1:-1;35623:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;35713:25:0;35689:4;35713:25;;;:16;:25;;;;;;;;;35623:123;26422:52;;;;;;;;;;-1:-1:-1;26422:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21085:87;;;;;;;;;;-1:-1:-1;21158:6:0;;-1:-1:-1;;;;;21158:6:0;21085:87;;26233:43;;;;;;;;;;;;;;;;10931:104;;;;;;;;;;;;;:::i;15149:413::-;;;;;;;;;;-1:-1:-1;15149:413:0;;;;;:::i;:::-;;:::i;12343:175::-;;;;;;;;;;-1:-1:-1;12343:175:0;;;;;:::i;:::-;;:::i;25781:37::-;;;;;;;;;;-1:-1:-1;25781:37:0;;;;-1:-1:-1;;;25781:37:0;;;;;;25564:35;;;;;;;;;;-1:-1:-1;25564:35:0;;;;;;;;26632:40;;;;;;;;;;-1:-1:-1;26632:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32269:232;;;;;;;;;;-1:-1:-1;32269:232:0;;;;;:::i;:::-;;:::i;30430:678::-;;;;;;;;;;-1:-1:-1;30430:678:0;;;;;:::i;:::-;;:::i;25379:35::-;;;;;;;;;;;;;;;;32686:154;;;;;;;;;;-1:-1:-1;32686:154:0;;;;;:::i;:::-;;:::i;35297:136::-;;;;;;;;;;-1:-1:-1;35297:136:0;;;;;:::i;:::-;;:::i;25827:25::-;;;;;;;;;;;;;;;;12581:151;;;;;;;;;;-1:-1:-1;12581:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12697:18:0;;;12670:7;12697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12581:151;25678:25;;;;;;;;;;-1:-1:-1;25678:25:0;;;;-1:-1:-1;;;;;25678:25:0;;;32955:97;;;;;;;;;;-1:-1:-1;32955:97:0;;;;;:::i;:::-;;:::i;30041:129::-;;;;;;;;;;;;;:::i;21994:201::-;;;;;;;;;;-1:-1:-1;21994:201:0;;;;;:::i;:::-;;:::i;35441:174::-;;;;;;;;;;-1:-1:-1;35441:174:0;;;;;:::i;:::-;;:::i;25743:27::-;;;;;;;;;;-1:-1:-1;25743:27:0;;;;-1:-1:-1;;;;;25743:27:0;;;25348:24;;;;;;;;;;;;;;;;25606:41;;;;;;;;;;-1:-1:-1;25606:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10712:100;10766:13;10799:5;10792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10712:100;:::o;12879:169::-;12962:4;12979:39;9798:10;13002:7;13011:6;12979:8;:39::i;:::-;-1:-1:-1;13036:4:0;12879:169;;;;;:::o;35937:240::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;;;;;;;;;36064:9:::1;36059:111;36083:8;:15;36079:1;:19;36059:111;;;36145:13;36120:9;:22;36130:8;36139:1;36130:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;36120:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;36120:22:0;:38;;-1:-1:-1;;36120:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36100:3;::::1;::::0;::::1;:::i;:::-;;;;36059:111;;;;35937:240:::0;;:::o;36300:107::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;36373:16:::1;:26:::0;;-1:-1:-1;;36373:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36300:107::o;29854:115::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;29908:17:::1;:24:::0;;-1:-1:-1;;;;29908:24:0::1;-1:-1:-1::0;;;29908:24:0::1;::::0;;29943:11:::1;:18:::0;;-1:-1:-1;;;;29943:18:0::1;-1:-1:-1::0;;;29943:18:0::1;::::0;;29854:115::o;34660:255::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;34788:13:::1;-1:-1:-1::0;;;;;34780:21:0::1;:4;-1:-1:-1::0;;;;;34780:21:0::1;::::0;34758:111:::1;;;::::0;-1:-1:-1;;;34758:111:0;;7130:2:1;34758:111:0::1;::::0;::::1;7112:21:1::0;7169:2;7149:18;;;7142:30;7208:34;7188:18;;;7181:62;-1:-1:-1;;;7259:18:1;;;7252:38;7307:19;;34758:111:0::1;6928:404:1::0;34758:111:0::1;34882:25;34895:4;34901:5;34882:12;:25::i;:::-;34660:255:::0;;:::o;31872:252::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;31978:1:::1;31968:6;:11;;31946:108;;;::::0;-1:-1:-1;;;31946:108:0;;7539:2:1;31946:108:0::1;::::0;::::1;7521:21:1::0;7578:2;7558:18;;;7551:30;7617:34;7597:18;;;7590:62;-1:-1:-1;;;7668:18:1;;;7661:45;7723:19;;31946:108:0::1;7337:411:1::0;31946:108:0::1;32112:4;32097:13;11920:12:::0;;;11832:108;32097:13:::1;32088:22;::::0;:6;:22:::1;:::i;:::-;:28;;;;:::i;:::-;32065:20;:51:::0;-1:-1:-1;31872:252:0:o;13530:492::-;13670:4;13687:36;13697:6;13705:9;13716:6;13687:9;:36::i;:::-;-1:-1:-1;;;;;13763:19:0;;13736:24;13763:19;;;:11;:19;;;;;;;;9798:10;13763:33;;;;;;;;13815:26;;;;13807:79;;;;-1:-1:-1;;;13807:79:0;;8350:2:1;13807:79:0;;;8332:21:1;8389:2;8369:18;;;8362:30;8428:34;8408:18;;;8401:62;-1:-1:-1;;;8479:18:1;;;8472:38;8527:19;;13807:79:0;8148:404:1;13807:79:0;13922:57;13931:6;9798:10;13972:6;13953:16;:25;13922:8;:57::i;:::-;-1:-1:-1;14010:4:0;;13530:492;-1:-1:-1;;;;13530:492:0:o;33268:334::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;33410:17:::1;:30:::0;;;33451:14:::1;:27:::0;;;33489:18:::1;:26:::0;;;33510:5;33539:34:::1;33468:10:::0;33430;33539:34:::1;:::i;:::-;:55;;;;:::i;:::-;33526:10;:68:::0;-1:-1:-1;;;33268:334:0:o;14431:215::-;9798:10;14519:4;14568:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14568:34:0;;;;;;;;;;14519:4;;14536:80;;14559:7;;14568:47;;14605:10;;14568:47;:::i;:::-;14536:8;:80::i;33823:358::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;33974:18:::1;:34:::0;;;34019:15:::1;:31:::0;;;34061:19:::1;:29:::0;;;34083:7;34115:36:::1;34037:13:::0;33995;34115:36:::1;:::i;:::-;:58;;;;:::i;:::-;34101:11;:72:::0;-1:-1:-1;;;33823:358:0:o;35086:203::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;35230:11:::1;::::0;35195:47:::1;::::0;-1:-1:-1;;;;;35230:11:0;;::::1;::::0;35195:47;::::1;::::0;::::1;::::0;35230:11:::1;::::0;35195:47:::1;35253:11;:28:::0;;-1:-1:-1;;;;;;35253:28:0::1;-1:-1:-1::0;;;;;35253:28:0;;;::::1;::::0;;;::::1;::::0;;35086:203::o;31317:377::-;21158:6;;31423:4;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;31505:16:::1;;31495:5;31480:13;11920:12:::0;;;11832:108;31480:13:::1;31468:25;::::0;:9;:25:::1;:::i;:::-;:32;;;;:::i;:::-;31467:54;;31445:153;;;::::0;-1:-1:-1;;;31445:153:0;;8889:2:1;31445:153:0::1;::::0;::::1;8871:21:1::0;8928:2;8908:18;;;8901:30;8967:34;8947:18;;;8940:62;-1:-1:-1;;;9018:18:1;;;9011:47;9075:19;;31445:153:0::1;8687:413:1::0;31445:153:0::1;31658:5;31643:13;11920:12:::0;;;11832:108;31643:13:::1;31631:25;::::0;:9;:25:::1;:::i;:::-;:32;;;;:::i;:::-;31609:16;:55:::0;-1:-1:-1;31682:4:0::1;21376:1;31317:377:::0;;;:::o;34345:183::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34434:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:36;;-1:-1:-1;;34434:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34486:34;;1484:41:1;;;34486:34:0::1;::::0;1457:18:1;34486:34:0::1;;;;;;;34345:183:::0;;:::o;21736:103::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;21801:30:::1;21828:1;21801:18;:30::i;:::-;21736:103::o:0;10931:104::-;10987:13;11020:7;11013:14;;;;;:::i;15149:413::-;9798:10;15242:4;15286:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15286:34:0;;;;;;;;;;15339:35;;;;15331:85;;;;-1:-1:-1;;;15331:85:0;;9307:2:1;15331:85:0;;;9289:21:1;9346:2;9326:18;;;9319:30;9385:34;9365:18;;;9358:62;-1:-1:-1;;;9436:18:1;;;9429:35;9481:19;;15331:85:0;9105:401:1;15331:85:0;15452:67;9798:10;15475:7;15503:15;15484:16;:34;15452:8;:67::i;:::-;-1:-1:-1;15550:4:0;;15149:413;-1:-1:-1;;;15149:413:0:o;12343:175::-;12429:4;12446:42;9798:10;12470:9;12481:6;12446:9;:42::i;32269:232::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;32378:1:::1;32368:6;:11;;32346:97;;;::::0;-1:-1:-1;;;32346:97:0;;9713:2:1;32346:97:0::1;::::0;::::1;9695:21:1::0;9752:2;9732:18;;;9725:30;9791:34;9771:18;;;9764:62;-1:-1:-1;;;9842:18:1;;;9835:34;9886:19;;32346:97:0::1;9511:400:1::0;32346:97:0::1;32489:4;32475:13;11920:12:::0;;;11832:108;32475:13:::1;32466:22;::::0;:6;:22:::1;:::i;:::-;:27;;;;:::i;:::-;32454:9;:39:::0;-1:-1:-1;32269:232:0:o;30430:678::-;21158:6;;30536:4;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;30608:6:::1;30593:13;11920:12:::0;;;11832:108;30593:13:::1;:21;;;;:::i;:::-;30580:9;:34;;30558:137;;;::::0;-1:-1:-1;;;30558:137:0;;10118:2:1;30558:137:0::1;::::0;::::1;10100:21:1::0;10157:2;10137:18;;;10130:30;10196:34;10176:18;;;10169:62;-1:-1:-1;;;10247:18:1;;;10240:51;10308:19;;30558:137:0::1;9916:417:1::0;30558:137:0::1;30762:6;30747:13;11920:12:::0;;;11832:108;30747:13:::1;30741:19;::::0;:3:::1;:19;:::i;:::-;:27;;;;:::i;:::-;30728:9;:40;;30706:142;;;::::0;-1:-1:-1;;;30706:142:0;;10540:2:1;30706:142:0::1;::::0;::::1;10522:21:1::0;10579:2;10559:18;;;10552:30;10618:34;10598:18;;;10591:62;-1:-1:-1;;;10669:18:1;;;10662:50;10729:19;;30706:142:0::1;10338:416:1::0;30706:142:0::1;30921:16;;30910:6;30895:13;11920:12:::0;;;11832:108;30895:13:::1;30883:25;::::0;:9;:25:::1;:::i;:::-;:33;;;;:::i;:::-;30882:55;;30859:156;;;::::0;-1:-1:-1;;;30859:156:0;;10961:2:1;30859:156:0::1;::::0;::::1;10943:21:1::0;11000:2;10980:18;;;10973:30;11039:34;11019:18;;;11012:62;-1:-1:-1;;;11090:18:1;;;11083:48;11148:19;;30859:156:0::1;10759:414:1::0;30859:156:0::1;31072:6;31057:13;11920:12:::0;;;11832:108;31057:13:::1;31045:25;::::0;:9;:25:::1;:::i;:::-;:33;;;;:::i;:::-;31026:16;:52:::0;-1:-1:-1;31096:4:0::1;30430:678:::0;;;:::o;32686:154::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32797:28:0;;;::::1;;::::0;;;:20:::1;:28;::::0;;;;:35;;-1:-1:-1;;32797:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32686:154::o;35297:136::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;35399:10:::1;:26:::0;;-1:-1:-1;;;;;;35399:26:0::1;-1:-1:-1::0;;;;;35399:26:0;;;::::1;::::0;;;::::1;::::0;;35297:136::o;32955:97::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;33023:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;33023:21:0::1;-1:-1:-1::0;;;;33023:21:0;;::::1;::::0;;;::::1;::::0;;32955:97::o;30041:129::-;21158:6;;30101:4;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;-1:-1:-1;30118:14:0::1;:22:::0;;-1:-1:-1;;30118:22:0::1;::::0;;;30041:129;:::o;21994:201::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22083:22:0;::::1;22075:73;;;::::0;-1:-1:-1;;;22075:73:0;;11380:2:1;22075:73:0::1;::::0;::::1;11362:21:1::0;11419:2;11399:18;;;11392:30;11458:34;11438:18;;;11431:62;-1:-1:-1;;;11509:18:1;;;11502:36;11555:19;;22075:73:0::1;11178:402:1::0;22075:73:0::1;22159:28;22178:8;22159:18;:28::i;:::-;21994:201:::0;:::o;35441:174::-;21158:6;;-1:-1:-1;;;;;21158:6:0;9798:10;21305:23;21297:68;;;;-1:-1:-1;;;21297:68:0;;;;;;;:::i;:::-;35559:12:::1;::::0;35528:44:::1;::::0;-1:-1:-1;;;;;35559:12:0;;::::1;::::0;35528:44;::::1;::::0;::::1;::::0;35559:12:::1;::::0;35528:44:::1;35583:12;:24:::0;;-1:-1:-1;;;;;;35583:24:0::1;-1:-1:-1::0;;;;;35583:24:0;;;::::1;::::0;;;::::1;::::0;;35441:174::o;18833:380::-;-1:-1:-1;;;;;18969:19:0;;18961:68;;;;-1:-1:-1;;;18961:68:0;;11787:2:1;18961:68:0;;;11769:21:1;11826:2;11806:18;;;11799:30;11865:34;11845:18;;;11838:62;-1:-1:-1;;;11916:18:1;;;11909:34;11960:19;;18961:68:0;11585:400:1;18961:68:0;-1:-1:-1;;;;;19048:21:0;;19040:68;;;;-1:-1:-1;;;19040:68:0;;12192:2:1;19040:68:0;;;12174:21:1;12231:2;12211:18;;;12204:30;12270:34;12250:18;;;12243:62;-1:-1:-1;;;12321:18:1;;;12314:32;12363:19;;19040:68:0;11990:398:1;19040:68:0;-1:-1:-1;;;;;19121:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19173:32;;160:25:1;;;19173:32:0;;133:18:1;19173:32:0;;;;;;;18833:380;;;:::o;34923:155::-;-1:-1:-1;;;;;34990:14:0;;;;;;:8;:14;;;;;;:22;;-1:-1:-1;;34990:22:0;;;;;;;;;;35030:40;;34990:22;;:14;35030:40;;;34923:155;;:::o;36415:4014::-;-1:-1:-1;;;;;36547:18:0;;36539:68;;;;-1:-1:-1;;;36539:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36626:16:0;;36618:64;;;;-1:-1:-1;;;36618:64:0;;;;;;;:::i;:::-;36699:6;36709:1;36699:11;36695:93;;36727:28;36743:4;36749:2;36753:1;36727:15;:28::i;36695:93::-;36804:14;;;;36800:1625;;;21158:6;;-1:-1:-1;;;;;36857:15:0;;;21158:6;;36857:15;;;;:49;;-1:-1:-1;21158:6:0;;-1:-1:-1;;;;;36893:13:0;;;21158:6;;36893:13;;36857:49;:86;;;;-1:-1:-1;;;;;;36927:16:0;;;;36857:86;:128;;;;-1:-1:-1;;;;;;36964:21:0;;36978:6;36964:21;;36857:128;:158;;;;-1:-1:-1;37007:8:0;;-1:-1:-1;;;37007:8:0;;;;37006:9;36857:158;36835:1579;;;37055:17;;-1:-1:-1;;;37055:17:0;;;;37050:221;;-1:-1:-1;;;;;37131:22:0;;;;;;:16;:22;;;;;;;;;:46;;-1:-1:-1;;;;;;37157:20:0;;;;;;:16;:20;;;;;;;;37131:46;37097:154;;;;-1:-1:-1;;;37097:154:0;;13405:2:1;37097:154:0;;;13387:21:1;13444:2;13424:18;;;13417:30;-1:-1:-1;;;13463:18:1;;;13456:52;13525:18;;37097:154:0;13203:346:1;37097:154:0;-1:-1:-1;;;;;37345:14:0;;;;;;:8;:14;;;;;;;;:64;;;;-1:-1:-1;;;;;;37385:24:0;;;;;;:20;:24;;;;;;;;37384:25;37345:64;37319:1080;;;37496:20;;37486:6;:30;;37452:169;;;;-1:-1:-1;;;37452:169:0;;13756:2:1;37452:169:0;;;13738:21:1;13795:2;13775:18;;;13768:30;13834:34;13814:18;;;13807:62;-1:-1:-1;;;13885:18:1;;;13878:51;13946:19;;37452:169:0;13554:417:1;37452:169:0;37704:9;;-1:-1:-1;;;;;12104:18:0;;12077:7;12104:18;;;;;;;;;;;37678:22;;:6;:22;:::i;:::-;:35;;37644:140;;;;-1:-1:-1;;;37644:140:0;;14178:2:1;37644:140:0;;;14160:21:1;14217:2;14197:18;;;14190:30;-1:-1:-1;;;14236:18:1;;;14229:49;14295:18;;37644:140:0;13976:343:1;37644:140:0;37319:1080;;;-1:-1:-1;;;;;37882:12:0;;;;;;:8;:12;;;;;;;;:64;;;;-1:-1:-1;;;;;;37920:26:0;;;;;;:20;:26;;;;;;;;37919:27;37882:64;37856:543;;;38033:20;;38023:6;:30;;37989:170;;;;-1:-1:-1;;;37989:170:0;;14526:2:1;37989:170:0;;;14508:21:1;14565:2;14545:18;;;14538:30;14604:34;14584:18;;;14577:62;-1:-1:-1;;;14655:18:1;;;14648:52;14717:19;;37989:170:0;14324:418:1;37856:543:0;-1:-1:-1;;;;;38190:24:0;;;;;;:20;:24;;;;;;;;38185:214;;38299:9;;-1:-1:-1;;;;;12104:18:0;;12077:7;12104:18;;;;;;;;;;;38273:22;;:6;:22;:::i;:::-;:35;;38239:140;;;;-1:-1:-1;;;38239:140:0;;14178:2:1;38239:140:0;;;14160:21:1;14217:2;14197:18;;;14190:30;-1:-1:-1;;;14236:18:1;;;14229:49;14295:18;;38239:140:0;13976:343:1;38239:140:0;38486:4;38437:28;12104:18;;;;;;;;;;;38544:16;;38520:40;;;;;;;38591:35;;-1:-1:-1;38615:11:0;;-1:-1:-1;;;38615:11:0;;;;38591:35;:61;;;;-1:-1:-1;38644:8:0;;-1:-1:-1;;;38644:8:0;;;;38643:9;38591:61;:93;;;;-1:-1:-1;;;;;;38670:14:0;;;;;;:8;:14;;;;;;;;38669:15;38591:93;:133;;;;-1:-1:-1;;;;;;38702:22:0;;;;;;:16;:22;;;;;;;;38701:23;38591:133;:171;;;;-1:-1:-1;;;;;;38742:20:0;;;;;;:16;:20;;;;;;;;38741:21;38591:171;38573:303;;;38789:8;:15;;-1:-1:-1;;;;38789:15:0;-1:-1:-1;;;38789:15:0;;;38821:10;:8;:10::i;:::-;38848:8;:16;;-1:-1:-1;;;;38848:16:0;;;38573:303;38904:8;;-1:-1:-1;;;;;39014:22:0;;38888:12;39014:22;;;:16;:22;;;;;;38904:8;-1:-1:-1;;;38904:8:0;;;;;38903:9;;39014:22;;:46;;-1:-1:-1;;;;;;39040:20:0;;;;;;:16;:20;;;;;;;;39014:46;39010:94;;;-1:-1:-1;39087:5:0;39010:94;-1:-1:-1;;;;;39121:22:0;;;;;;:16;:22;;;;;;;;39120:23;;:48;;-1:-1:-1;;;;;;39148:20:0;;;;;;:16;:20;;;;;;;;39147:21;39120:48;39116:132;;;-1:-1:-1;;;;;39194:15:0;;;;;;:9;:15;;;;;;;;39193:16;39185:51;;;;-1:-1:-1;;;39185:51:0;;14949:2:1;39185:51:0;;;14931:21:1;14988:2;14968:18;;;14961:30;-1:-1:-1;;;15007:18:1;;;15000:52;15069:18;;39185:51:0;14747:346:1;39185:51:0;39260:12;39365:7;39361:1015;;;-1:-1:-1;;;;;39417:12:0;;;;;;:8;:12;;;;;;;;:31;;;;;39447:1;39433:11;;:15;39417:31;39413:814;;;39476:32;39504:3;39476:23;39487:11;;39476:6;:10;;:23;;;;:::i;:::-;:27;;:32::i;:::-;39469:39;;39589:11;;39570:15;;39563:4;:22;;;;:::i;:::-;39562:38;;;;:::i;:::-;39527:31;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;39682:11:0;;39659:19;;39652:26;;:4;:26;:::i;:::-;39651:42;;;;:::i;:::-;39619:28;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;39775:11:0;;39753:18;;39746:25;;:4;:25;:::i;:::-;39745:41;;;;:::i;:::-;39712:29;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;39413:814:0;;-1:-1:-1;39413:814:0;;-1:-1:-1;;;;;39848:14:0;;;;;;:8;:14;;;;;;;;:32;;;;;39879:1;39866:10;;:14;39848:32;39844:383;;;39908:31;39935:3;39908:22;39919:10;;39908:6;:10;;:22;;;;:::i;:31::-;39901:38;;40019:10;;40001:14;;39994:4;:21;;;;:::i;:::-;39993:36;;;;:::i;:::-;39958:31;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;40110:10:0;;40088:18;;40081:25;;:4;:25;:::i;:::-;40080:40;;;;:::i;:::-;40048:28;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;40201:10:0;;40180:17;;40173:24;;:4;:24;:::i;:::-;40172:39;;;;:::i;:::-;40139:29;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;39844:383:0;40247:8;;40243:91;;40276:42;40292:4;40306;40313;40276:15;:42::i;:::-;40350:14;40360:4;40350:14;;:::i;:::-;;;39361:1015;40388:33;40404:4;40410:2;40414:6;40388:15;:33::i;:::-;36528:3901;;;;36415:4014;;;:::o;22355:191::-;22448:6;;;-1:-1:-1;;;;;22465:17:0;;;-1:-1:-1;;;;;;22465:17:0;;;;;;;22498:40;;22448:6;;;22465:17;22448:6;;22498:40;;22429:16;;22498:40;22418:128;22355:191;:::o;16052:733::-;-1:-1:-1;;;;;16192:20:0;;16184:70;;;;-1:-1:-1;;;16184:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16273:23:0;;16265:71;;;;-1:-1:-1;;;16265:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16433:17:0;;16409:21;16433:17;;;;;;;;;;;16469:23;;;;16461:74;;;;-1:-1:-1;;;16461:74:0;;15433:2:1;16461:74:0;;;15415:21:1;15472:2;15452:18;;;15445:30;15511:34;15491:18;;;15484:62;-1:-1:-1;;;15562:18:1;;;15555:36;15608:19;;16461:74:0;15231:402:1;16461:74:0;-1:-1:-1;;;;;16571:17:0;;;:9;:17;;;;;;;;;;;16591:22;;;16571:42;;16635:20;;;;;;;;:30;;16607:6;;16571:9;16635:30;;16607:6;;16635:30;:::i;:::-;;;;;;;;16700:9;-1:-1:-1;;;;;16683:35:0;16692:6;-1:-1:-1;;;;;16683:35:0;;16711:6;16683:35;;;;160:25:1;;148:2;133:18;;14:177;16683:35:0;;;;;;;;16173:612;16052:733;;;:::o;41558:1874::-;41641:4;41597:23;12104:18;;;;;;;;;;;41597:50;;41658:25;41778:28;;41733:29;;41686:31;;:76;;;;:::i;:::-;:120;;;;:::i;:::-;41658:148;-1:-1:-1;41817:12:0;41846:20;;;:46;;-1:-1:-1;41870:22:0;;41846:46;41842:85;;;41909:7;;;41558:1874::o;41842:85::-;41961:16;;41943:15;:34;41939:101;;;42012:16;;41994:34;;41939:101;42101:23;42227:1;42194:17;42146:31;;42128:15;:49;;;;:::i;:::-;42127:84;;;;:::i;:::-;:101;;;;:::i;:::-;42101:127;-1:-1:-1;42239:26:0;42268:36;:15;42101:127;42268:19;:36::i;:::-;42239:65;-1:-1:-1;42345:21:0;42379:36;42239:65;42379:16;:36::i;:::-;42428:18;42449:44;:21;42475:17;42449:25;:44::i;:::-;42428:65;;42506:23;42532:92;42596:17;42532:45;42547:29;;42532:10;:14;;:45;;;;:::i;:92::-;42506:118;;42635:17;42655:67;42704:17;42655:44;42670:28;;42655:10;:14;;:44;;;;:::i;:67::-;42635:87;-1:-1:-1;42735:23:0;42635:87;42761:28;42774:15;42761:10;:28;:::i;:::-;:40;;;;:::i;:::-;42848:1;42814:31;:35;;;42860:29;:33;;;42904:28;:32;;;42971:12;;42963:48;;42735:66;;-1:-1:-1;;;;;;42971:12:0;;42997:9;;42963:48;42848:1;42963:48;42997:9;42971:12;42963:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42949:62:0;;-1:-1:-1;;43028:19:0;;;;;:42;;;43069:1;43051:15;:19;43028:42;43024:291;;;43087:46;43100:15;43117;43087:12;:46::i;:::-;43257:31;;43153:150;;;16050:25:1;;;16106:2;16091:18;;16084:34;;;16134:18;;;16127:34;;;;43153:150:0;;;;;;16038:2:1;43153:150:0;;;43024:291;43349:11;;43341:83;;-1:-1:-1;;;;;43349:11:0;;;;43388:21;;43341:83;;;;43388:21;43349:11;43341:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;41558:1874:0:o;3161:98::-;3219:7;3246:5;3250:1;3246;:5;:::i;:::-;3239:12;3161:98;-1:-1:-1;;;3161:98:0:o;3560:::-;3618:7;3645:5;3649:1;3645;:5;:::i;2804:98::-;2862:7;2889:5;2893:1;2889;:5;:::i;40437:589::-;40587:16;;;40601:1;40587:16;;;;;;;;40563:21;;40587:16;;;;;;;;;;-1:-1:-1;40587:16:0;40563:40;;40632:4;40614;40619:1;40614:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40614:23:0;;;-1:-1:-1;;;;;40614:23:0;;;;;40658:15;-1:-1:-1;;;;;40658:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40648:4;40653:1;40648:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40648:32:0;;;-1:-1:-1;;;;;40648:32:0;;;;;40693:62;40710:4;40725:15;40743:11;40693:8;:62::i;:::-;40794:224;;-1:-1:-1;;;40794:224:0;;-1:-1:-1;;;;;40794:15:0;:66;;;;:224;;40875:11;;40901:1;;40945:4;;40972;;40992:15;;40794:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40492:534;40437:589;:::o;41034:516::-;41182:62;41199:4;41214:15;41232:11;41182:8;:62::i;:::-;41491:10;;41287:255;;-1:-1:-1;;;41287:255:0;;41359:4;41287:255;;;17754:34:1;17804:18;;;17797:34;;;41405:1:0;17847:18:1;;;17840:34;;;17890:18;;;17883:34;-1:-1:-1;;;;;41491:10:0;;;17933:19:1;;;17926:44;41516:15:0;17986:19:1;;;17979:35;41287:15:0;:31;;;;;;41326:9;;17688:19:1;;41287:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41034:516;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:134;953:20;;982:31;953:20;982:31;:::i;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:127::-;1597:10;1592:3;1588:20;1585:1;1578:31;1628:4;1625:1;1618:15;1652:4;1649:1;1642:15;1668:160;1733:20;;1789:13;;1782:21;1772:32;;1762:60;;1818:1;1815;1808:12;1833:1191;1923:6;1931;1984:2;1972:9;1963:7;1959:23;1955:32;1952:52;;;2000:1;1997;1990:12;1952:52;2040:9;2027:23;2069:18;2110:2;2102:6;2099:14;2096:34;;;2126:1;2123;2116:12;2096:34;2164:6;2153:9;2149:22;2139:32;;2209:7;2202:4;2198:2;2194:13;2190:27;2180:55;;2231:1;2228;2221:12;2180:55;2267:2;2254:16;2289:4;2312:2;2308;2305:10;2302:36;;;2318:18;;:::i;:::-;2364:2;2361:1;2357:10;2396:2;2390:9;2459:2;2455:7;2450:2;2446;2442:11;2438:25;2430:6;2426:38;2514:6;2502:10;2499:22;2494:2;2482:10;2479:18;2476:46;2473:72;;;2525:18;;:::i;:::-;2561:2;2554:22;2611:18;;;2645:15;;;;-1:-1:-1;2687:11:1;;;2683:20;;;2715:19;;;2712:39;;;2747:1;2744;2737:12;2712:39;2771:11;;;;2791:148;2807:6;2802:3;2799:15;2791:148;;;2873:23;2892:3;2873:23;:::i;:::-;2861:36;;2824:12;;;;2917;;;;2791:148;;;2958:6;-1:-1:-1;2983:35:1;;-1:-1:-1;2999:18:1;;;2983:35;:::i;:::-;2973:45;;;;;;1833:1191;;;;;:::o;3029:180::-;3085:6;3138:2;3126:9;3117:7;3113:23;3109:32;3106:52;;;3154:1;3151;3144:12;3106:52;3177:26;3193:9;3177:26;:::i;3449:315::-;3514:6;3522;3575:2;3563:9;3554:7;3550:23;3546:32;3543:52;;;3591:1;3588;3581:12;3543:52;3630:9;3617:23;3649:31;3674:5;3649:31;:::i;:::-;3699:5;-1:-1:-1;3723:35:1;3754:2;3739:18;;3723:35;:::i;:::-;3713:45;;3449:315;;;;;:::o;3769:180::-;3828:6;3881:2;3869:9;3860:7;3856:23;3852:32;3849:52;;;3897:1;3894;3887:12;3849:52;-1:-1:-1;3920:23:1;;3769:180;-1:-1:-1;3769:180:1:o;3954:456::-;4031:6;4039;4047;4100:2;4088:9;4079:7;4075:23;4071:32;4068:52;;;4116:1;4113;4106:12;4068:52;4155:9;4142:23;4174:31;4199:5;4174:31;:::i;:::-;4224:5;-1:-1:-1;4281:2:1;4266:18;;4253:32;4294:33;4253:32;4294:33;:::i;:::-;3954:456;;4346:7;;-1:-1:-1;;;4400:2:1;4385:18;;;;4372:32;;3954:456::o;4812:316::-;4889:6;4897;4905;4958:2;4946:9;4937:7;4933:23;4929:32;4926:52;;;4974:1;4971;4964:12;4926:52;-1:-1:-1;;4997:23:1;;;5067:2;5052:18;;5039:32;;-1:-1:-1;5118:2:1;5103:18;;;5090:32;;4812:316;-1:-1:-1;4812:316:1:o;5133:247::-;5192:6;5245:2;5233:9;5224:7;5220:23;5216:32;5213:52;;;5261:1;5258;5251:12;5213:52;5300:9;5287:23;5319:31;5344:5;5319:31;:::i;5385:388::-;5453:6;5461;5514:2;5502:9;5493:7;5489:23;5485:32;5482:52;;;5530:1;5527;5520:12;5482:52;5569:9;5556:23;5588:31;5613:5;5588:31;:::i;:::-;5638:5;-1:-1:-1;5695:2:1;5680:18;;5667:32;5708:33;5667:32;5708:33;:::i;:::-;5760:7;5750:17;;;5385:388;;;;;:::o;5778:380::-;5857:1;5853:12;;;;5900;;;5921:61;;5975:4;5967:6;5963:17;5953:27;;5921:61;6028:2;6020:6;6017:14;5997:18;5994:38;5991:161;;6074:10;6069:3;6065:20;6062:1;6055:31;6109:4;6106:1;6099:15;6137:4;6134:1;6127:15;5991:161;;5778:380;;;:::o;6163:356::-;6365:2;6347:21;;;6384:18;;;6377:30;6443:34;6438:2;6423:18;;6416:62;6510:2;6495:18;;6163:356::o;6524:127::-;6585:10;6580:3;6576:20;6573:1;6566:31;6616:4;6613:1;6606:15;6640:4;6637:1;6630:15;6656:127;6717:10;6712:3;6708:20;6705:1;6698:31;6748:4;6745:1;6738:15;6772:4;6769:1;6762:15;6788:135;6827:3;6848:17;;;6845:43;;6868:18;;:::i;:::-;-1:-1:-1;6915:1:1;6904:13;;6788:135::o;7753:168::-;7826:9;;;7857;;7874:15;;;7868:22;;7854:37;7844:71;;7895:18;;:::i;7926:217::-;7966:1;7992;7982:132;;8036:10;8031:3;8027:20;8024:1;8017:31;8071:4;8068:1;8061:15;8099:4;8096:1;8089:15;7982:132;-1:-1:-1;8128:9:1;;7926:217::o;8557:125::-;8622:9;;;8643:10;;;8640:36;;;8656:18;;:::i;12393:401::-;12595:2;12577:21;;;12634:2;12614:18;;;12607:30;12673:34;12668:2;12653:18;;12646:62;-1:-1:-1;;;12739:2:1;12724:18;;12717:35;12784:3;12769:19;;12393:401::o;12799:399::-;13001:2;12983:21;;;13040:2;13020:18;;;13013:30;13079:34;13074:2;13059:18;;13052:62;-1:-1:-1;;;13145:2:1;13130:18;;13123:33;13188:3;13173:19;;12799:399::o;15098:128::-;15165:9;;;15186:11;;;15183:37;;;15200:18;;:::i;16172:251::-;16242:6;16295:2;16283:9;16274:7;16270:23;16266:32;16263:52;;;16311:1;16308;16301:12;16263:52;16343:9;16337:16;16362:31;16387:5;16362:31;:::i;16428:980::-;16690:4;16738:3;16727:9;16723:19;16769:6;16758:9;16751:25;16795:2;16833:6;16828:2;16817:9;16813:18;16806:34;16876:3;16871:2;16860:9;16856:18;16849:31;16900:6;16935;16929:13;16966:6;16958;16951:22;17004:3;16993:9;16989:19;16982:26;;17043:2;17035:6;17031:15;17017:29;;17064:1;17074:195;17088:6;17085:1;17082:13;17074:195;;;17153:13;;-1:-1:-1;;;;;17149:39:1;17137:52;;17244:15;;;;17209:12;;;;17185:1;17103:9;17074:195;;;-1:-1:-1;;;;;;;17325:32:1;;;;17320:2;17305:18;;17298:60;-1:-1:-1;;;17389:3:1;17374:19;17367:35;17286:3;16428:980;-1:-1:-1;;;16428:980:1:o;18025:306::-;18113:6;18121;18129;18182:2;18170:9;18161:7;18157:23;18153:32;18150:52;;;18198:1;18195;18188:12;18150:52;18227:9;18221:16;18211:26;;18277:2;18266:9;18262:18;18256:25;18246:35;;18321:2;18310:9;18306:18;18300:25;18290:35;;18025:306;;;;;:::o
Swarm Source
ipfs://ed9d13ee5864af8c342f87e161d63c2efb0b92ed90da706c889a232ec5a3dae7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.