Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
420,690,000,000,000 PNDBOX
Holders
353
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000174593398768349 PNDBOXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PondorasBox
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-01 */ /** * SPDX-License-Identifier: MIT * https://twitter.com/PondorasBox * https://t.me/pondorasbox * https://pondorasbox.vip/ */ pragma solidity 0.8.19; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface 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 PondorasBox is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniV2R; address public immutable uniV2P; // Swapback bool private swapping; bool public SBEnabled = false; uint256 public swapBRangeMin; uint256 public swapBRangeMax; //Anti-whale bool public limitsInEffect = true; bool public transferDelayEnabled = true; uint256 public walletLmt; uint256 public txLmt; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Fee receivers address public liquidityHolder; address public marketingWallet; address public teamWallet; bool public tradingOn = false; uint256 public totBuy; uint256 public mktBuy; uint256 public lpBuy; uint256 public devBuy; uint256 public totSell; uint256 public mktSell; uint256 public lpSell; uint256 public devSell; uint256 public marketingSwapback; uint256 public lpSwapback; uint256 public devSwapback; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isFeeExempt; mapping(address => bool) public _isTxLimitExempt; // 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 automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event teamWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Pondoras Box", "PNDBOX") { IUniswapV2Router02 _uniV2R = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniV2R), true); uniV2R = _uniV2R; uniV2P = IUniswapV2Factory(_uniV2R.factory()) .createPair(address(this), _uniV2R.WETH()); excludeFromMaxTransaction(address(uniV2P), true); _setAutomatedMarketMakerPair(address(uniV2P), true); uint256 _mktBuy = 30; uint256 _lpBuy = 0; uint256 _devBuy = 0; uint256 _mktSell = 50; uint256 _lpSell = 0; uint256 _devSell = 0; uint256 totalSupply = 420690000000000 * 1e18; txLmt = (totalSupply * 10) / 1000; walletLmt = (totalSupply * 10) / 1000; swapBRangeMin = (totalSupply * 2) / 1000; // 0.2% swapback trigger swapBRangeMax = (totalSupply * 4) / 100; // 4% max swapback mktBuy = _mktBuy; lpBuy = _lpBuy; devBuy = _devBuy; totBuy = mktBuy + lpBuy + devBuy; mktSell = _mktSell; lpSell = _lpSell; devSell = _devSell; totSell = mktSell + lpSell + devSell; marketingWallet = address(0xfC33cD35c20360A2Ae1749C2304C9BD161A44a79); teamWallet = address(msg.sender); liquidityHolder = msg.sender; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(marketingWallet, true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(marketingWallet, 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 function openTheBox() external onlyOwner { tradingOn = true; SBEnabled = true; } /// @dev Launches the token and enables trading function enableTrading() external onlyOwner { tradingOn = true; SBEnabled = true; } /// @dev Removes the max wallet and max transaction limits function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } /// @dev Disables the Same wallet block transfer delay function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = 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. function upSwapTokensAtAmount(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 <= swapBRangeMax, "Swap amount cannot be higher than swapBRangeMax" ); swapBRangeMin = newAmount; return true; } /// @dev Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50. function upMaxTokensForSwapback(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= swapBRangeMin, "Swap amount cannot be lower than swapBRangeMin" ); swapBRangeMax = newAmount; 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 function upMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= 2, "Cannot set txLmt lower than 0.2%" ); txLmt = newNum * (10**18); } /// @dev Changes the maximum amount of tokens a wallet can hold /// @param newNum Base 1000, so 1% = 10 function upMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= 5, "Cannot set walletLmt lower than 0.5%" ); walletLmt = 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 excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isTxLimitExempt[updAds] = isEx; } /// @dev Sets if the contract can sell tokens /// @param enabled set to false to disable selling function upSwapEnabled(bool enabled) external onlyOwner { SBEnabled = enabled; } /// @dev Sets the fees for buys /// @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 setBuyFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { mktBuy = _marketingFee; lpBuy = _liquidityFee; devBuy = _devFee; totBuy = mktBuy + lpBuy + devBuy; } /// @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 setSellFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { mktSell = _marketingFee; lpSell = _liquidityFee; devSell = _devFee; totSell = mktSell + lpSell + devSell; } /// @dev Sets if a wallet is excluded from fees /// @param account The wallet to up /// @param excluded If the wallet is excluded or not function excludeFromFees(address account, bool excluded) public onlyOwner { _isFeeExempt[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 setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniV2P, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function upMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function upLPWallet(address newLPWallet) external onlyOwner { liquidityHolder = newLPWallet; } function upDevWallet(address newWallet) external onlyOwner { emit teamWalletUpdated(newWallet, teamWallet); teamWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isFeeExempt[account]; } 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 (!tradingOn) { require( _isFeeExempt[from] || _isFeeExempt[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniV2R) && to != address(uniV2P) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isTxLimitExempt[to] ) { require( amount <= txLmt, "Buy transfer amount exceeds the txLmt." ); require( amount + balanceOf(to) <= walletLmt, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isTxLimitExempt[from] ) { require( amount <= txLmt, "Sell transfer amount exceeds the txLmt." ); } else if (!_isTxLimitExempt[to]) { require( amount + balanceOf(to) <= walletLmt, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBRangeMin; if ( canSwap && SBEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isFeeExempt[from] && !_isFeeExempt[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isFeeExempt[from] || _isFeeExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && totSell > 0) { fees = amount.mul(totSell).div(100); lpSwapback += (fees * lpSell) / totSell; devSwapback += (fees * devSell) / totSell; marketingSwapback += (fees * mktSell) / totSell; } // on buy else if (automatedMarketMakerPairs[from] && totBuy > 0) { fees = amount.mul(totBuy).div(100); lpSwapback += (fees * lpBuy) / totBuy; devSwapback += (fees * devBuy) / totBuy; marketingSwapback += (fees * mktBuy) / totBuy; } 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] = uniV2R.WETH(); _approve(address(this), address(uniV2R), tokenAmount); // make the swap uniV2R.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(uniV2R), tokenAmount); // add the liquidity uniV2R.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityHolder, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = lpSwapback + marketingSwapback + devSwapback; bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBRangeMax) { contractBalance = swapBRangeMax; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * lpSwapback) / 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(marketingSwapback).div( totalTokensToSwap ); uint256 ethForDev = ethBalance.mul(devSwapback).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; lpSwapback = 0; marketingSwapback = 0; devSwapback = 0; (success, ) = address(teamWallet).call{value: ethForDev}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, lpSwapback ); } (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"inputs":[],"name":"SBEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","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":"liquidityHolder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktSell","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":"openTheBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":"setBuyFees","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":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBRangeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBRangeMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"txLmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2P","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2R","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"upDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"upLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"upMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"upMaxTokensForSwapback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"upMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"upMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"upSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"upSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletLmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526005805460ff60a81b191690556008805461ffff1916610101179055600e805460ff60a01b191690553480156200003a57600080fd5b506040518060400160405280600c81526020016b0a0dedcc8dee4c2e64084def60a31b815250604051806040016040528060068152602001650a09c88849eb60d31b8152508160039081620000909190620007ac565b5060046200009f8282620007ac565b505050620000bc620000b66200045060201b60201c565b62000454565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000de816001620004a6565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000129573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014f919062000878565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000878565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000237919062000878565b6001600160a01b031660a081905262000252906001620004a6565b60a0516200026290600162000520565b601e600080603281806d14bddab3e51a57cff87a500000006103e86200028a82600a620008c0565b620002969190620008e0565b600a9081556103e890620002ac908390620008c0565b620002b89190620008e0565b6009556103e8620002cb826002620008c0565b620002d79190620008e0565b6006556064620002e9826004620008c0565b620002f59190620008e0565b6007556010879055601186905560128590558462000314878962000903565b62000320919062000903565b600f55601484905560158390556016829055816200033f848662000903565b6200034b919062000903565b601355600d80546001600160a01b031990811673fc33cd35c20360a2ae1749c2304c9bd161a44a7917909155600e8054821633908117909155600c8054909216179055620003ad620003a56005546001600160a01b031690565b600162000574565b620003ba30600162000574565b620003c961dead600162000574565b600d54620003e2906001600160a01b0316600162000574565b62000401620003f96005546001600160a01b031690565b6001620004a6565b6200040e306001620004a6565b6200041d61dead6001620004a6565b600d5462000436906001600160a01b03166001620004a6565b6200044233826200061e565b505050505050505062000919565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004f55760405162461bcd60e51b815260206004820181905260248201526000805160206200343e83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005bf5760405162461bcd60e51b815260206004820181905260248201526000805160206200343e8339815191526044820152606401620004ec565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006765760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004ec565b80600260008282546200068a919062000903565b90915550506001600160a01b03821660009081526020819052604081208054839290620006b990849062000903565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200073357607f821691505b6020821081036200075457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070357600081815260208120601f850160051c81016020861015620007835750805b601f850160051c820191505b81811015620007a4578281556001016200078f565b505050505050565b81516001600160401b03811115620007c857620007c862000708565b620007e081620007d984546200071e565b846200075a565b602080601f831160018114620008185760008415620007ff5750858301515b600019600386901b1c1916600185901b178555620007a4565b600085815260208120601f198616915b82811015620008495788860151825594840194600190910190840162000828565b5085821015620008685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200088b57600080fd5b81516001600160a01b0381168114620008a357600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008da57620008da620008aa565b92915050565b600082620008fe57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008da57620008da620008aa565b60805160a051612ac762000977600039600081816106a5015281816111c6015261193f015260008181610a000152818161190101528181612439015281816124f20152818161252e015281816125a801526126100152612ac76000f3fe6080604052600436106103855760003560e01c80638a8c523c116101d1578063b3c3947a11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a37578063f90ddd9614610a57578063fd1bc2ca14610a77578063fee1389614610a9857600080fd5b8063dd62ed3e14610992578063e06bc575146109d8578063e6939f15146109ee578063e884f26014610a2257600080fd5b8063c260f4c1116100dc578063c260f4c11461093d578063c876d0b91461095d578063d053f7ec1461073d578063dd12cc0c1461097c57600080fd5b8063b3c3947a146108d7578063b62496f5146108ed578063c02466681461091d57600080fd5b80639a7a23d61161016f578063a315e7c411610149578063a315e7c414610857578063a457c2d714610877578063a572c78b14610897578063a9059cbb146108b757600080fd5b80639a7a23d6146107e75780639e3f463d14610807578063a0c973f11461082757600080fd5b806390c277ea116101ab57806390c277ea1461078657806392183559146107a657806395d89b41146107bc57806396aa3c1c146107d157600080fd5b80638a8c523c1461073d5780638da5cb5b146107525780638e7775b51461077057600080fd5b80633b9eaa49116102b657806370a0823111610254578063751039fc11610223578063751039fc146106c75780637571336a146106dc57806375f0a874146106fc578063796b32b21461071c57600080fd5b806370a0823114610632578063715018a614610668578063729fe1de1461067d57806373bd38201461069357600080fd5b806351d202c01161029057806351d202c0146105a457806359927044146105c45780635d502d1d146105fc5780636ce519511461061257600080fd5b80633b9eaa491461053b5780634a62bb65146105515780634fbee1931461056b57600080fd5b80631983dff71161032357806323b872dd116102fd57806323b872dd146104c957806323bffa87146104e9578063313ce567146104ff578063395093511461051b57600080fd5b80631983dff71461048757806322459e981461049d57806323a89dc3146104b357600080fd5b80630d075d9c1161035f5780630d075d9c1461040e5780630f683e901461042e57806310a4cbac1461044e57806318160ddd1461047257600080fd5b806305c822681461039157806306fdde03146103b3578063095ea7b3146103de57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103b16103ac36600461269d565b610aae565b005b3480156103bf57600080fd5b506103c8610b3e565b6040516103d591906126ba565b60405180910390f35b3480156103ea57600080fd5b506103fe6103f9366004612708565b610bd0565b60405190151581526020016103d5565b34801561041a57600080fd5b506103b1610429366004612734565b610be7565b34801561043a57600080fd5b506103b1610449366004612734565b610c3d565b34801561045a57600080fd5b50610464600a5481565b6040519081526020016103d5565b34801561047e57600080fd5b50600254610464565b34801561049357600080fd5b5061046460125481565b3480156104a957600080fd5b5061046460155481565b3480156104bf57600080fd5b5061046460115481565b3480156104d557600080fd5b506103fe6104e4366004612760565b610c93565b3480156104f557600080fd5b5061046460135481565b34801561050b57600080fd5b50604051601281526020016103d5565b34801561052757600080fd5b506103fe610536366004612708565b610d3d565b34801561054757600080fd5b5061046460175481565b34801561055d57600080fd5b506008546103fe9060ff1681565b34801561057757600080fd5b506103fe61058636600461269d565b6001600160a01b03166000908152601a602052604090205460ff1690565b3480156105b057600080fd5b506103b16105bf3660046127a1565b610d79565b3480156105d057600080fd5b50600e546105e4906001600160a01b031681565b6040516001600160a01b0390911681526020016103d5565b34801561060857600080fd5b5061046460185481565b34801561061e57600080fd5b506103fe61062d3660046127a1565b610e0c565b34801561063e57600080fd5b5061046461064d36600461269d565b6001600160a01b031660009081526020819052604090205490565b34801561067457600080fd5b506103b1610fc4565b34801561068957600080fd5b5061046460145481565b34801561069f57600080fd5b506105e47f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d357600080fd5b506103fe610ffa565b3480156106e857600080fd5b506103b16106f73660046127ca565b611037565b34801561070857600080fd5b50600d546105e4906001600160a01b031681565b34801561072857600080fd5b506005546103fe90600160a81b900460ff1681565b34801561074957600080fd5b506103b161108c565b34801561075e57600080fd5b506005546001600160a01b03166105e4565b34801561077c57600080fd5b5061046460075481565b34801561079257600080fd5b506103b16107a13660046127a1565b6110de565b3480156107b257600080fd5b5061046460165481565b3480156107c857600080fd5b506103c861118b565b3480156107dd57600080fd5b5061046460195481565b3480156107f357600080fd5b506103b16108023660046127ca565b61119a565b34801561081357600080fd5b506103b161082236600461269d565b611279565b34801561083357600080fd5b506103fe61084236600461269d565b601b6020526000908152604090205460ff1681565b34801561086357600080fd5b506103fe6108723660046127a1565b6112c5565b34801561088357600080fd5b506103fe610892366004612708565b611364565b3480156108a357600080fd5b50600c546105e4906001600160a01b031681565b3480156108c357600080fd5b506103fe6108d2366004612708565b6113fd565b3480156108e357600080fd5b50610464600f5481565b3480156108f957600080fd5b506103fe61090836600461269d565b601c6020526000908152604090205460ff1681565b34801561092957600080fd5b506103b16109383660046127ca565b61140a565b34801561094957600080fd5b506103b161095836600461269d565b611493565b34801561096957600080fd5b506008546103fe90610100900460ff1681565b34801561098857600080fd5b5061046460095481565b34801561099e57600080fd5b506104646109ad3660046127ff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109e457600080fd5b5061046460065481565b3480156109fa57600080fd5b506105e47f000000000000000000000000000000000000000000000000000000000000000081565b348015610a2e57600080fd5b506103fe61151a565b348015610a4357600080fd5b506103b1610a5236600461269d565b611558565b348015610a6357600080fd5b506103b1610a72366004612838565b6115f3565b348015610a8357600080fd5b50600e546103fe90600160a01b900460ff1681565b348015610aa457600080fd5b5061046460105481565b6005546001600160a01b03163314610ae15760405162461bcd60e51b8152600401610ad890612853565b60405180910390fd5b600d546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610b4d90612888565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7990612888565b8015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b5050505050905090565b6000610bdd33848461163b565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610ad890612853565b60108390556011829055601281905580610c2b83856128d8565b610c3591906128d8565b600f55505050565b6005546001600160a01b03163314610c675760405162461bcd60e51b8152600401610ad890612853565b60148390556015829055601681905580610c8183856128d8565b610c8b91906128d8565b601355505050565b6000610ca084848461175f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d255760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ad8565b610d32853385840361163b565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bdd918590610d749086906128d8565b61163b565b6005546001600160a01b03163314610da35760405162461bcd60e51b8152600401610ad890612853565b6002811015610df45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742074784c6d74206c6f776572207468616e20302e32256044820152606401610ad8565b610e0681670de0b6b3a76400006128eb565b600a5550565b6005546000906001600160a01b03163314610e395760405162461bcd60e51b8152600401610ad890612853565b620186a0610e4660025490565b610e509190612902565b821015610ebd5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ad8565b620186a0610eca60025490565b610ed6906101f46128eb565b610ee09190612902565b821115610f4c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ad8565b600754821115610fb65760405162461bcd60e51b815260206004820152602f60248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201526e0dc40e6eec2e084a4c2dcceca9ac2f608b1b6064820152608401610ad8565b50600681905560015b919050565b6005546001600160a01b03163314610fee5760405162461bcd60e51b8152600401610ad890612853565b610ff86000611fa0565b565b6005546000906001600160a01b031633146110275760405162461bcd60e51b8152600401610ad890612853565b506008805460ff19169055600190565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610ad890612853565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110b65760405162461bcd60e51b8152600401610ad890612853565b600e805460ff60a01b1916600160a01b1790556005805460ff60a81b1916600160a81b179055565b6005546001600160a01b031633146111085760405162461bcd60e51b8152600401610ad890612853565b60058110156111655760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f74207365742077616c6c65744c6d74206c6f776572207468616e20604482015263302e352560e01b6064820152608401610ad8565b6103e861117160025490565b61117b90836128eb565b6111859190612902565b60095550565b606060048054610b4d90612888565b6005546001600160a01b031633146111c45760405162461bcd60e51b8152600401610ad890612853565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361126b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ad8565b6112758282611ff2565b5050565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610ad890612853565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146112f25760405162461bcd60e51b8152600401610ad890612853565b60065482101561135b5760405162461bcd60e51b815260206004820152602e60248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201526d1039bbb0b8212930b733b2a6b4b760911b6064820152608401610ad8565b50600755600190565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ad8565b6113f3338585840361163b565b5060019392505050565b6000610bdd33848461175f565b6005546001600160a01b031633146114345760405162461bcd60e51b8152600401610ad890612853565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610ad890612853565b600e546040516001600160a01b03918216918316907f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166890600090a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146115475760405162461bcd60e51b8152600401610ad890612853565b506008805461ff0019169055600190565b6005546001600160a01b031633146115825760405162461bcd60e51b8152600401610ad890612853565b6001600160a01b0381166115e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad8565b6115f081611fa0565b50565b6005546001600160a01b0316331461161d5760405162461bcd60e51b8152600401610ad890612853565b60058054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b03831661169d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad8565b6001600160a01b0382166116fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ad8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117855760405162461bcd60e51b8152600401610ad890612924565b6001600160a01b0382166117ab5760405162461bcd60e51b8152600401610ad890612969565b806000036117c4576117bf83836000612046565b505050565b60085460ff1615611c6a576005546001600160a01b038481169116148015906117fb57506005546001600160a01b03838116911614155b801561180f57506001600160a01b03821615155b801561182657506001600160a01b03821661dead14155b801561183c5750600554600160a01b900460ff16155b15611c6a57600e54600160a01b900460ff166118d6576001600160a01b0383166000908152601a602052604090205460ff168061189157506001600160a01b0382166000908152601a602052604090205460ff165b6118d65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ad8565b600854610100900460ff1615611a22576005546001600160a01b0383811691161480159061193657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561197457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611a2257326000908152600b60205260409020544311611a0f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ad8565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601c602052604090205460ff168015611a6357506001600160a01b0382166000908152601b602052604090205460ff16155b15611b3857600a54811115611ac95760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152653a3c2636ba1760d11b6064820152608401610ad8565b6009546001600160a01b038316600090815260208190526040902054611aef90836128d8565b1115611b335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ad8565b611c6a565b6001600160a01b0382166000908152601c602052604090205460ff168015611b7957506001600160a01b0383166000908152601b602052604090205460ff16155b15611be057600a54811115611b335760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015266103a3c2636ba1760c91b6064820152608401610ad8565b6001600160a01b0382166000908152601b602052604090205460ff16611c6a576009546001600160a01b038316600090815260208190526040902054611c2690836128d8565b1115611c6a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ad8565b3060009081526020819052604090205460065481108015908190611c975750600554600160a81b900460ff165b8015611cad5750600554600160a01b900460ff16155b8015611cd257506001600160a01b0385166000908152601c602052604090205460ff16155b8015611cf757506001600160a01b0385166000908152601a602052604090205460ff16155b8015611d1c57506001600160a01b0384166000908152601a602052604090205460ff16155b15611d4a576005805460ff60a01b1916600160a01b179055611d3c61219b565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601a602052604090205460ff600160a01b909204821615911680611d9857506001600160a01b0385166000908152601a602052604090205460ff165b15611da1575060005b60008115611f8c576001600160a01b0386166000908152601c602052604090205460ff168015611dd357506000601354115b15611e9157611df86064611df2601354886123b790919063ffffffff16565b906123ca565b905060135460155482611e0b91906128eb565b611e159190612902565b60186000828254611e2691906128d8565b9091555050601354601654611e3b90836128eb565b611e459190612902565b60196000828254611e5691906128d8565b9091555050601354601454611e6b90836128eb565b611e759190612902565b60176000828254611e8691906128d8565b90915550611f6e9050565b6001600160a01b0387166000908152601c602052604090205460ff168015611ebb57506000600f54115b15611f6e57611eda6064611df2600f54886123b790919063ffffffff16565b9050600f5460115482611eed91906128eb565b611ef79190612902565b60186000828254611f0891906128d8565b9091555050600f54601254611f1d90836128eb565b611f279190612902565b60196000828254611f3891906128d8565b9091555050600f54601054611f4d90836128eb565b611f579190612902565b60176000828254611f6891906128d8565b90915550505b8015611f7f57611f7f873083612046565b611f8981866129ac565b94505b611f97878787612046565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661206c5760405162461bcd60e51b8152600401610ad890612924565b6001600160a01b0382166120925760405162461bcd60e51b8152600401610ad890612969565b6001600160a01b0383166000908152602081905260409020548181101561210a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ad8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906121419084906128d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218d91815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006019546017546018546121c291906128d8565b6121cc91906128d8565b90506000826000036121dd57505050565b6007548311156121ed5760075492505b60006002836018548661220091906128eb565b61220a9190612902565b6122149190612902565b9050600061222285836123d6565b90504761222e826123e2565b600061223a47836123d6565b9050600061225787611df2601754856123b790919063ffffffff16565b9050600061227488611df2601954866123b790919063ffffffff16565b905060008161228384866129ac565b61228d91906129ac565b6000601881905560178190556019819055600e546040519293506001600160a01b031691849181818185875af1925050503d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b509098505086158015906123035750600081115b156123565761231287826125a2565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146123a3576040519150601f19603f3d011682016040523d82523d6000602084013e6123a8565b606091505b50505050505050505050505050565b60006123c382846128eb565b9392505050565b60006123c38284612902565b60006123c382846129ac565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612417576124176129bf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b991906129d5565b816001815181106124cc576124cc6129bf565b60200260200101906001600160a01b031690816001600160a01b031681525050612517307f00000000000000000000000000000000000000000000000000000000000000008461163b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061256c9085906000908690309042906004016129f2565b600060405180830381600087803b15801561258657600080fd5b505af115801561259a573d6000803e3d6000fd5b505050505050565b6125cd307f00000000000000000000000000000000000000000000000000000000000000008461163b565b600c5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af115801561265c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126819190612a63565b5050505050565b6001600160a01b03811681146115f057600080fd5b6000602082840312156126af57600080fd5b81356123c381612688565b600060208083528351808285015260005b818110156126e7578581018301518582016040015282016126cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561271b57600080fd5b823561272681612688565b946020939093013593505050565b60008060006060848603121561274957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561277557600080fd5b833561278081612688565b9250602084013561279081612688565b929592945050506040919091013590565b6000602082840312156127b357600080fd5b5035919050565b80358015158114610fbf57600080fd5b600080604083850312156127dd57600080fd5b82356127e881612688565b91506127f6602084016127ba565b90509250929050565b6000806040838503121561281257600080fd5b823561281d81612688565b9150602083013561282d81612688565b809150509250929050565b60006020828403121561284a57600080fd5b6123c3826127ba565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061289c57607f821691505b6020821081036128bc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610be157610be16128c2565b8082028115828204841417610be157610be16128c2565b60008261291f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610be157610be16128c2565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129e757600080fd5b81516123c381612688565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a425784516001600160a01b031683529383019391830191600101612a1d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a7857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205093f155f48854181350967005eabf48fff345f2002834dd4d97b297d6dc3f6a64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103855760003560e01c80638a8c523c116101d1578063b3c3947a11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a37578063f90ddd9614610a57578063fd1bc2ca14610a77578063fee1389614610a9857600080fd5b8063dd62ed3e14610992578063e06bc575146109d8578063e6939f15146109ee578063e884f26014610a2257600080fd5b8063c260f4c1116100dc578063c260f4c11461093d578063c876d0b91461095d578063d053f7ec1461073d578063dd12cc0c1461097c57600080fd5b8063b3c3947a146108d7578063b62496f5146108ed578063c02466681461091d57600080fd5b80639a7a23d61161016f578063a315e7c411610149578063a315e7c414610857578063a457c2d714610877578063a572c78b14610897578063a9059cbb146108b757600080fd5b80639a7a23d6146107e75780639e3f463d14610807578063a0c973f11461082757600080fd5b806390c277ea116101ab57806390c277ea1461078657806392183559146107a657806395d89b41146107bc57806396aa3c1c146107d157600080fd5b80638a8c523c1461073d5780638da5cb5b146107525780638e7775b51461077057600080fd5b80633b9eaa49116102b657806370a0823111610254578063751039fc11610223578063751039fc146106c75780637571336a146106dc57806375f0a874146106fc578063796b32b21461071c57600080fd5b806370a0823114610632578063715018a614610668578063729fe1de1461067d57806373bd38201461069357600080fd5b806351d202c01161029057806351d202c0146105a457806359927044146105c45780635d502d1d146105fc5780636ce519511461061257600080fd5b80633b9eaa491461053b5780634a62bb65146105515780634fbee1931461056b57600080fd5b80631983dff71161032357806323b872dd116102fd57806323b872dd146104c957806323bffa87146104e9578063313ce567146104ff578063395093511461051b57600080fd5b80631983dff71461048757806322459e981461049d57806323a89dc3146104b357600080fd5b80630d075d9c1161035f5780630d075d9c1461040e5780630f683e901461042e57806310a4cbac1461044e57806318160ddd1461047257600080fd5b806305c822681461039157806306fdde03146103b3578063095ea7b3146103de57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103b16103ac36600461269d565b610aae565b005b3480156103bf57600080fd5b506103c8610b3e565b6040516103d591906126ba565b60405180910390f35b3480156103ea57600080fd5b506103fe6103f9366004612708565b610bd0565b60405190151581526020016103d5565b34801561041a57600080fd5b506103b1610429366004612734565b610be7565b34801561043a57600080fd5b506103b1610449366004612734565b610c3d565b34801561045a57600080fd5b50610464600a5481565b6040519081526020016103d5565b34801561047e57600080fd5b50600254610464565b34801561049357600080fd5b5061046460125481565b3480156104a957600080fd5b5061046460155481565b3480156104bf57600080fd5b5061046460115481565b3480156104d557600080fd5b506103fe6104e4366004612760565b610c93565b3480156104f557600080fd5b5061046460135481565b34801561050b57600080fd5b50604051601281526020016103d5565b34801561052757600080fd5b506103fe610536366004612708565b610d3d565b34801561054757600080fd5b5061046460175481565b34801561055d57600080fd5b506008546103fe9060ff1681565b34801561057757600080fd5b506103fe61058636600461269d565b6001600160a01b03166000908152601a602052604090205460ff1690565b3480156105b057600080fd5b506103b16105bf3660046127a1565b610d79565b3480156105d057600080fd5b50600e546105e4906001600160a01b031681565b6040516001600160a01b0390911681526020016103d5565b34801561060857600080fd5b5061046460185481565b34801561061e57600080fd5b506103fe61062d3660046127a1565b610e0c565b34801561063e57600080fd5b5061046461064d36600461269d565b6001600160a01b031660009081526020819052604090205490565b34801561067457600080fd5b506103b1610fc4565b34801561068957600080fd5b5061046460145481565b34801561069f57600080fd5b506105e47f000000000000000000000000056d4647762519d1d7804a6596a70c706276595781565b3480156106d357600080fd5b506103fe610ffa565b3480156106e857600080fd5b506103b16106f73660046127ca565b611037565b34801561070857600080fd5b50600d546105e4906001600160a01b031681565b34801561072857600080fd5b506005546103fe90600160a81b900460ff1681565b34801561074957600080fd5b506103b161108c565b34801561075e57600080fd5b506005546001600160a01b03166105e4565b34801561077c57600080fd5b5061046460075481565b34801561079257600080fd5b506103b16107a13660046127a1565b6110de565b3480156107b257600080fd5b5061046460165481565b3480156107c857600080fd5b506103c861118b565b3480156107dd57600080fd5b5061046460195481565b3480156107f357600080fd5b506103b16108023660046127ca565b61119a565b34801561081357600080fd5b506103b161082236600461269d565b611279565b34801561083357600080fd5b506103fe61084236600461269d565b601b6020526000908152604090205460ff1681565b34801561086357600080fd5b506103fe6108723660046127a1565b6112c5565b34801561088357600080fd5b506103fe610892366004612708565b611364565b3480156108a357600080fd5b50600c546105e4906001600160a01b031681565b3480156108c357600080fd5b506103fe6108d2366004612708565b6113fd565b3480156108e357600080fd5b50610464600f5481565b3480156108f957600080fd5b506103fe61090836600461269d565b601c6020526000908152604090205460ff1681565b34801561092957600080fd5b506103b16109383660046127ca565b61140a565b34801561094957600080fd5b506103b161095836600461269d565b611493565b34801561096957600080fd5b506008546103fe90610100900460ff1681565b34801561098857600080fd5b5061046460095481565b34801561099e57600080fd5b506104646109ad3660046127ff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109e457600080fd5b5061046460065481565b3480156109fa57600080fd5b506105e47f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a2e57600080fd5b506103fe61151a565b348015610a4357600080fd5b506103b1610a5236600461269d565b611558565b348015610a6357600080fd5b506103b1610a72366004612838565b6115f3565b348015610a8357600080fd5b50600e546103fe90600160a01b900460ff1681565b348015610aa457600080fd5b5061046460105481565b6005546001600160a01b03163314610ae15760405162461bcd60e51b8152600401610ad890612853565b60405180910390fd5b600d546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610b4d90612888565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7990612888565b8015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b5050505050905090565b6000610bdd33848461163b565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610ad890612853565b60108390556011829055601281905580610c2b83856128d8565b610c3591906128d8565b600f55505050565b6005546001600160a01b03163314610c675760405162461bcd60e51b8152600401610ad890612853565b60148390556015829055601681905580610c8183856128d8565b610c8b91906128d8565b601355505050565b6000610ca084848461175f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d255760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ad8565b610d32853385840361163b565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bdd918590610d749086906128d8565b61163b565b6005546001600160a01b03163314610da35760405162461bcd60e51b8152600401610ad890612853565b6002811015610df45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742074784c6d74206c6f776572207468616e20302e32256044820152606401610ad8565b610e0681670de0b6b3a76400006128eb565b600a5550565b6005546000906001600160a01b03163314610e395760405162461bcd60e51b8152600401610ad890612853565b620186a0610e4660025490565b610e509190612902565b821015610ebd5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ad8565b620186a0610eca60025490565b610ed6906101f46128eb565b610ee09190612902565b821115610f4c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ad8565b600754821115610fb65760405162461bcd60e51b815260206004820152602f60248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201526e0dc40e6eec2e084a4c2dcceca9ac2f608b1b6064820152608401610ad8565b50600681905560015b919050565b6005546001600160a01b03163314610fee5760405162461bcd60e51b8152600401610ad890612853565b610ff86000611fa0565b565b6005546000906001600160a01b031633146110275760405162461bcd60e51b8152600401610ad890612853565b506008805460ff19169055600190565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610ad890612853565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110b65760405162461bcd60e51b8152600401610ad890612853565b600e805460ff60a01b1916600160a01b1790556005805460ff60a81b1916600160a81b179055565b6005546001600160a01b031633146111085760405162461bcd60e51b8152600401610ad890612853565b60058110156111655760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f74207365742077616c6c65744c6d74206c6f776572207468616e20604482015263302e352560e01b6064820152608401610ad8565b6103e861117160025490565b61117b90836128eb565b6111859190612902565b60095550565b606060048054610b4d90612888565b6005546001600160a01b031633146111c45760405162461bcd60e51b8152600401610ad890612853565b7f000000000000000000000000056d4647762519d1d7804a6596a70c70627659576001600160a01b0316826001600160a01b03160361126b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ad8565b6112758282611ff2565b5050565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610ad890612853565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146112f25760405162461bcd60e51b8152600401610ad890612853565b60065482101561135b5760405162461bcd60e51b815260206004820152602e60248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201526d1039bbb0b8212930b733b2a6b4b760911b6064820152608401610ad8565b50600755600190565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ad8565b6113f3338585840361163b565b5060019392505050565b6000610bdd33848461175f565b6005546001600160a01b031633146114345760405162461bcd60e51b8152600401610ad890612853565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610ad890612853565b600e546040516001600160a01b03918216918316907f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166890600090a3600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146115475760405162461bcd60e51b8152600401610ad890612853565b506008805461ff0019169055600190565b6005546001600160a01b031633146115825760405162461bcd60e51b8152600401610ad890612853565b6001600160a01b0381166115e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad8565b6115f081611fa0565b50565b6005546001600160a01b0316331461161d5760405162461bcd60e51b8152600401610ad890612853565b60058054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b03831661169d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad8565b6001600160a01b0382166116fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ad8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117855760405162461bcd60e51b8152600401610ad890612924565b6001600160a01b0382166117ab5760405162461bcd60e51b8152600401610ad890612969565b806000036117c4576117bf83836000612046565b505050565b60085460ff1615611c6a576005546001600160a01b038481169116148015906117fb57506005546001600160a01b03838116911614155b801561180f57506001600160a01b03821615155b801561182657506001600160a01b03821661dead14155b801561183c5750600554600160a01b900460ff16155b15611c6a57600e54600160a01b900460ff166118d6576001600160a01b0383166000908152601a602052604090205460ff168061189157506001600160a01b0382166000908152601a602052604090205460ff165b6118d65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ad8565b600854610100900460ff1615611a22576005546001600160a01b0383811691161480159061193657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561197457507f000000000000000000000000056d4647762519d1d7804a6596a70c70627659576001600160a01b0316826001600160a01b031614155b15611a2257326000908152600b60205260409020544311611a0f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ad8565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601c602052604090205460ff168015611a6357506001600160a01b0382166000908152601b602052604090205460ff16155b15611b3857600a54811115611ac95760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152653a3c2636ba1760d11b6064820152608401610ad8565b6009546001600160a01b038316600090815260208190526040902054611aef90836128d8565b1115611b335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ad8565b611c6a565b6001600160a01b0382166000908152601c602052604090205460ff168015611b7957506001600160a01b0383166000908152601b602052604090205460ff16155b15611be057600a54811115611b335760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015266103a3c2636ba1760c91b6064820152608401610ad8565b6001600160a01b0382166000908152601b602052604090205460ff16611c6a576009546001600160a01b038316600090815260208190526040902054611c2690836128d8565b1115611c6a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ad8565b3060009081526020819052604090205460065481108015908190611c975750600554600160a81b900460ff165b8015611cad5750600554600160a01b900460ff16155b8015611cd257506001600160a01b0385166000908152601c602052604090205460ff16155b8015611cf757506001600160a01b0385166000908152601a602052604090205460ff16155b8015611d1c57506001600160a01b0384166000908152601a602052604090205460ff16155b15611d4a576005805460ff60a01b1916600160a01b179055611d3c61219b565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601a602052604090205460ff600160a01b909204821615911680611d9857506001600160a01b0385166000908152601a602052604090205460ff165b15611da1575060005b60008115611f8c576001600160a01b0386166000908152601c602052604090205460ff168015611dd357506000601354115b15611e9157611df86064611df2601354886123b790919063ffffffff16565b906123ca565b905060135460155482611e0b91906128eb565b611e159190612902565b60186000828254611e2691906128d8565b9091555050601354601654611e3b90836128eb565b611e459190612902565b60196000828254611e5691906128d8565b9091555050601354601454611e6b90836128eb565b611e759190612902565b60176000828254611e8691906128d8565b90915550611f6e9050565b6001600160a01b0387166000908152601c602052604090205460ff168015611ebb57506000600f54115b15611f6e57611eda6064611df2600f54886123b790919063ffffffff16565b9050600f5460115482611eed91906128eb565b611ef79190612902565b60186000828254611f0891906128d8565b9091555050600f54601254611f1d90836128eb565b611f279190612902565b60196000828254611f3891906128d8565b9091555050600f54601054611f4d90836128eb565b611f579190612902565b60176000828254611f6891906128d8565b90915550505b8015611f7f57611f7f873083612046565b611f8981866129ac565b94505b611f97878787612046565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661206c5760405162461bcd60e51b8152600401610ad890612924565b6001600160a01b0382166120925760405162461bcd60e51b8152600401610ad890612969565b6001600160a01b0383166000908152602081905260409020548181101561210a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ad8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906121419084906128d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218d91815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006019546017546018546121c291906128d8565b6121cc91906128d8565b90506000826000036121dd57505050565b6007548311156121ed5760075492505b60006002836018548661220091906128eb565b61220a9190612902565b6122149190612902565b9050600061222285836123d6565b90504761222e826123e2565b600061223a47836123d6565b9050600061225787611df2601754856123b790919063ffffffff16565b9050600061227488611df2601954866123b790919063ffffffff16565b905060008161228384866129ac565b61228d91906129ac565b6000601881905560178190556019819055600e546040519293506001600160a01b031691849181818185875af1925050503d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b509098505086158015906123035750600081115b156123565761231287826125a2565b601854604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146123a3576040519150601f19603f3d011682016040523d82523d6000602084013e6123a8565b606091505b50505050505050505050505050565b60006123c382846128eb565b9392505050565b60006123c38284612902565b60006123c382846129ac565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612417576124176129bf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b991906129d5565b816001815181106124cc576124cc6129bf565b60200260200101906001600160a01b031690816001600160a01b031681525050612517307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461163b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061256c9085906000908690309042906004016129f2565b600060405180830381600087803b15801561258657600080fd5b505af115801561259a573d6000803e3d6000fd5b505050505050565b6125cd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461163b565b600c5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af115801561265c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126819190612a63565b5050505050565b6001600160a01b03811681146115f057600080fd5b6000602082840312156126af57600080fd5b81356123c381612688565b600060208083528351808285015260005b818110156126e7578581018301518582016040015282016126cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561271b57600080fd5b823561272681612688565b946020939093013593505050565b60008060006060848603121561274957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561277557600080fd5b833561278081612688565b9250602084013561279081612688565b929592945050506040919091013590565b6000602082840312156127b357600080fd5b5035919050565b80358015158114610fbf57600080fd5b600080604083850312156127dd57600080fd5b82356127e881612688565b91506127f6602084016127ba565b90509250929050565b6000806040838503121561281257600080fd5b823561281d81612688565b9150602083013561282d81612688565b809150509250929050565b60006020828403121561284a57600080fd5b6123c3826127ba565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061289c57607f821691505b6020821081036128bc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610be157610be16128c2565b8082028115828204841417610be157610be16128c2565b60008261291f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610be157610be16128c2565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129e757600080fd5b81516123c381612688565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a425784516001600160a01b031683529383019391830191600101612a1d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a7857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205093f155f48854181350967005eabf48fff345f2002834dd4d97b297d6dc3f6a64736f6c63430008130033
Deployed Bytecode Sourcemap
24969:17292:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34410:227;;;;;;;;;;-1:-1:-1;34410:227:0;;;;;:::i;:::-;;:::i;:::-;;10804:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12971:169;;;;;;;;;;-1:-1:-1;12971:169:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;12971:169:0;1275:187:1;32655:279:0;;;;;;;;;;-1:-1:-1;32655:279:0;;;;;:::i;:::-;;:::i;33155:287::-;;;;;;;;;;-1:-1:-1;33155:287:0;;;;;:::i;:::-;;:::i;25427:20::-;;;;;;;;;;;;;;;;;;;1934:25:1;;;1922:2;1907:18;25427:20:0;1788:177:1;11924:108:0;;;;;;;;;;-1:-1:-1;12012:12:0;;11924:108;;25832:21;;;;;;;;;;;;;;;;25920;;;;;;;;;;;;;;;;25805:20;;;;;;;;;;;;;;;;13618:492;;;;;;;;;;-1:-1:-1;13618:492:0;;;;;:::i;:::-;;:::i;25862:22::-;;;;;;;;;;;;;;;;11766:93;;;;;;;;;;-1:-1:-1;11766:93:0;;11849:2;2573:36:1;;2561:2;2546:18;11766:93:0;2431:184:1;14515:215:0;;;;;;;;;;-1:-1:-1;14515:215:0;;;;;:::i;:::-;;:::i;25979:32::-;;;;;;;;;;;;;;;;25310:33;;;;;;;;;;-1:-1:-1;25310:33:0;;;;;;;;34948:119;;;;;;;;;;-1:-1:-1;34948:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;35038:21:0;35014:4;35038:21;;;:12;:21;;;;;;;;;34948:119;31328:207;;;;;;;;;;-1:-1:-1;31328:207:0;;;;;:::i;:::-;;:::i;25675:25::-;;;;;;;;;;-1:-1:-1;25675:25:0;;;;-1:-1:-1;;;;;25675:25:0;;;;;;-1:-1:-1;;;;;2969:32:1;;;2951:51;;2939:2;2924:18;25675:25:0;2805:203:1;26018:25:0;;;;;;;;;;;;;;;;30125:616;;;;;;;;;;-1:-1:-1;30125:616:0;;;;;:::i;:::-;;:::i;12095:127::-;;;;;;;;;;-1:-1:-1;12095:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12196:18:0;12169:7;12196:18;;;;;;;;;;;;12095:127;21816:103;;;;;;;;;;;;;:::i;25891:22::-;;;;;;;;;;;;;;;;25099:31;;;;;;;;;;;;;;;29658:121;;;;;;;;;;;;;:::i;32070:152::-;;;;;;;;;;-1:-1:-1;32070:152:0;;;;;:::i;:::-;;:::i;25638:30::-;;;;;;;;;;-1:-1:-1;25638:30:0;;;;-1:-1:-1;;;;;25638:30:0;;;25184:29;;;;;;;;;;-1:-1:-1;25184:29:0;;;;-1:-1:-1;;;25184:29:0;;;;;;29480:106;;;;;;;;;;;;;:::i;21165:87::-;;;;;;;;;;-1:-1:-1;21238:6:0;;-1:-1:-1;;;;;21238:6:0;21165:87;;25255:28;;;;;;;;;;;;;;;;31657:228;;;;;;;;;;-1:-1:-1;31657:228:0;;;;;:::i;:::-;;:::i;25948:22::-;;;;;;;;;;;;;;;;11023:104;;;;;;;;;;;;;:::i;26050:26::-;;;;;;;;;;;;;;;;33909:297;;;;;;;;;;-1:-1:-1;33909:297:0;;;;;:::i;:::-;;:::i;34645:131::-;;;;;;;;;;-1:-1:-1;34645:131:0;;;;;:::i;:::-;;:::i;26218:48::-;;;;;;;;;;-1:-1:-1;26218:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30857:316;;;;;;;;;;-1:-1:-1;30857:316:0;;;;;:::i;:::-;;:::i;15229:413::-;;;;;;;;;;-1:-1:-1;15229:413:0;;;;;:::i;:::-;;:::i;25601:30::-;;;;;;;;;;-1:-1:-1;25601:30:0;;;;-1:-1:-1;;;;;25601:30:0;;;12435:175;;;;;;;;;;-1:-1:-1;12435:175:0;;;;;:::i;:::-;;:::i;25749:21::-;;;;;;;;;;;;;;;;26424:57;;;;;;;;;;-1:-1:-1;26424:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33602:175;;;;;;;;;;-1:-1:-1;33602:175:0;;;;;:::i;:::-;;:::i;34784:156::-;;;;;;;;;;-1:-1:-1;34784:156:0;;;;;:::i;:::-;;:::i;25350:39::-;;;;;;;;;;-1:-1:-1;25350:39:0;;;;;;;;;;;25396:24;;;;;;;;;;;;;;;;12673:151;;;;;;;;;;-1:-1:-1;12673:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12789:18:0;;;12762:7;12789:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12673:151;25220:28;;;;;;;;;;;;;;;;25050:42;;;;;;;;;;;;;;;29847:135;;;;;;;;;;;;;:::i;22074:201::-;;;;;;;;;;-1:-1:-1;22074:201:0;;;;;:::i;:::-;;:::i;32337:94::-;;;;;;;;;;-1:-1:-1;32337:94:0;;;;;:::i;:::-;;:::i;25711:29::-;;;;;;;;;;-1:-1:-1;25711:29:0;;;;-1:-1:-1;;;25711:29:0;;;;;;25777:21;;;;;;;;;;;;;;;;34410:227;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;;;;;;;;;34566:15:::1;::::0;34523:59:::1;::::0;-1:-1:-1;;;;;34566:15:0;;::::1;::::0;34523:59;::::1;::::0;::::1;::::0;34566:15:::1;::::0;34523:59:::1;34593:15;:36:::0;;-1:-1:-1;;;;;;34593:36:0::1;-1:-1:-1::0;;;;;34593:36:0;;;::::1;::::0;;;::::1;::::0;;34410:227::o;10804:100::-;10858:13;10891:5;10884:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10804:100;:::o;12971:169::-;13054:4;13071:39;9890:10;13094:7;13103:6;13071:8;:39::i;:::-;-1:-1:-1;13128:4:0;12971:169;;;;;:::o;32655:279::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;32802:6:::1;:22:::0;;;32835:5:::1;:21:::0;;;32867:6:::1;:16:::0;;;32876:7;32903:14:::1;32843:13:::0;32811;32903:14:::1;:::i;:::-;:23;;;;:::i;:::-;32894:6;:32:::0;-1:-1:-1;;;32655:279:0:o;33155:287::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;33303:7:::1;:23:::0;;;33337:6:::1;:22:::0;;;33370:7:::1;:17:::0;;;33380:7;33408:16:::1;33346:13:::0;33313;33408:16:::1;:::i;:::-;:26;;;;:::i;:::-;33398:7;:36:::0;-1:-1:-1;;;33155:287:0:o;13618:492::-;13758:4;13775:36;13785:6;13793:9;13804:6;13775:9;:36::i;:::-;-1:-1:-1;;;;;13851:19:0;;13824:24;13851:19;;;:11;:19;;;;;;;;9890:10;13851:33;;;;;;;;13903:26;;;;13895:79;;;;-1:-1:-1;;;13895:79:0;;5521:2:1;13895:79:0;;;5503:21:1;5560:2;5540:18;;;5533:30;5599:34;5579:18;;;5572:62;-1:-1:-1;;;5650:18:1;;;5643:38;5698:19;;13895:79:0;5319:404:1;13895:79:0;14010:57;14019:6;9890:10;14060:6;14041:16;:25;14010:8;:57::i;:::-;-1:-1:-1;14098:4:0;;13618:492;-1:-1:-1;;;;13618:492:0:o;14515:215::-;9890:10;14603:4;14652:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14652:34:0;;;;;;;;;;14603:4;;14620:80;;14643:7;;14652:47;;14689:10;;14652:47;:::i;:::-;14620:8;:80::i;31328:207::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;31430:1:::1;31420:6;:11;;31398:93;;;::::0;-1:-1:-1;;;31398:93:0;;5930:2:1;31398:93:0::1;::::0;::::1;5912:21:1::0;;;5949:18;;;5942:30;6008:34;5988:18;;;5981:62;6060:18;;31398:93:0::1;5728:356:1::0;31398:93:0::1;31510:17;:6:::0;31520::::1;31510:17;:::i;:::-;31502:5;:25:::0;-1:-1:-1;31328:207:0:o;30125:616::-;21238:6;;30229:4;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;30301:6:::1;30286:13;12012:12:::0;;;11924:108;30286:13:::1;:21;;;;:::i;:::-;30273:9;:34;;30251:137;;;::::0;-1:-1:-1;;;30251:137:0;;6686:2:1;30251:137:0::1;::::0;::::1;6668:21:1::0;6725:2;6705:18;;;6698:30;6764:34;6744:18;;;6737:62;-1:-1:-1;;;6815:18:1;;;6808:51;6876:19;;30251:137:0::1;6484:417:1::0;30251:137:0::1;30455:6;30440:13;12012:12:::0;;;11924:108;30440:13:::1;30434:19;::::0;:3:::1;:19;:::i;:::-;:27;;;;:::i;:::-;30421:9;:40;;30399:142;;;::::0;-1:-1:-1;;;30399:142:0;;7108:2:1;30399:142:0::1;::::0;::::1;7090:21:1::0;7147:2;7127:18;;;7120:30;7186:34;7166:18;;;7159:62;-1:-1:-1;;;7237:18:1;;;7230:50;7297:19;;30399:142:0::1;6906:416:1::0;30399:142:0::1;30587:13;;30574:9;:26;;30552:123;;;::::0;-1:-1:-1;;;30552:123:0;;7529:2:1;30552:123:0::1;::::0;::::1;7511:21:1::0;7568:2;7548:18;;;7541:30;7607:34;7587:18;;;7580:62;-1:-1:-1;;;7658:18:1;;;7651:45;7713:19;;30552:123:0::1;7327:411:1::0;30552:123:0::1;-1:-1:-1::0;30686:13:0::1;:25:::0;;;30729:4:::1;21456:1;30125:616:::0;;;:::o;21816:103::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;21881:30:::1;21908:1;21881:18;:30::i;:::-;21816:103::o:0;29658:121::-;21238:6;;29710:4;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;-1:-1:-1;29727:14:0::1;:22:::0;;-1:-1:-1;;29727:22:0::1;::::0;;;29658:121;:::o;32070:152::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32183:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;32183:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32070:152::o;29480:106::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;29535:9:::1;:16:::0;;-1:-1:-1;;;;29535:16:0::1;-1:-1:-1::0;;;29535:16:0::1;::::0;;29562:9:::1;:16:::0;;-1:-1:-1;;;;29562:16:0::1;-1:-1:-1::0;;;29562:16:0::1;::::0;;29480:106::o;31657:228::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;31762:1:::1;31752:6;:11;;31730:97;;;::::0;-1:-1:-1;;;31730:97:0;;7945:2:1;31730:97:0::1;::::0;::::1;7927:21:1::0;7984:2;7964:18;;;7957:30;8023:34;8003:18;;;7996:62;-1:-1:-1;;;8074:18:1;;;8067:34;8118:19;;31730:97:0::1;7743:400:1::0;31730:97:0::1;31873:4;31859:13;12012:12:::0;;;11924:108;31859:13:::1;31850:22;::::0;:6;:22:::1;:::i;:::-;:27;;;;:::i;:::-;31838:9;:39:::0;-1:-1:-1;31657:228:0:o;11023:104::-;11079:13;11112:7;11105:14;;;;;:::i;33909:297::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;34053:6:::1;-1:-1:-1::0;;;;;34045:14:0::1;:4;-1:-1:-1::0;;;;;34045:14:0::1;::::0;34023:121:::1;;;::::0;-1:-1:-1;;;34023:121:0;;8350:2:1;34023:121:0::1;::::0;::::1;8332:21:1::0;8389:2;8369:18;;;8362:30;8428:34;8408:18;;;8401:62;8499:27;8479:18;;;8472:55;8544:19;;34023:121:0::1;8148:421:1::0;34023:121:0::1;34157:41;34186:4;34192:5;34157:28;:41::i;:::-;33909:297:::0;;:::o;34645:131::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;34739:15:::1;:29:::0;;-1:-1:-1;;;;;;34739:29:0::1;-1:-1:-1::0;;;;;34739:29:0;;;::::1;::::0;;;::::1;::::0;;34645:131::o;30857:316::-;21238:6;;30963:4;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;31020:13:::1;;31007:9;:26;;30985:122;;;::::0;-1:-1:-1;;;30985:122:0;;8776:2:1;30985:122:0::1;::::0;::::1;8758:21:1::0;8815:2;8795:18;;;8788:30;8854:34;8834:18;;;8827:62;-1:-1:-1;;;8905:18:1;;;8898:44;8959:19;;30985:122:0::1;8574:410:1::0;30985:122:0::1;-1:-1:-1::0;31118:13:0::1;:25:::0;31161:4:::1;::::0;30857:316::o;15229:413::-;9890:10;15322:4;15366:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15366:34:0;;;;;;;;;;15419:35;;;;15411:85;;;;-1:-1:-1;;;15411:85:0;;9191:2:1;15411:85:0;;;9173:21:1;9230:2;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;-1:-1:-1;;;9320:18:1;;;9313:35;9365:19;;15411:85:0;8989:401:1;15411:85:0;15532:67;9890:10;15555:7;15583:15;15564:16;:34;15532:8;:67::i;:::-;-1:-1:-1;15630:4:0;;15229:413;-1:-1:-1;;;15229:413:0:o;12435:175::-;12521:4;12538:42;9890:10;12562:9;12573:6;12538:9;:42::i;33602:175::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33687:21:0;::::1;;::::0;;;:12:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;33687:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33735:34;;1415:41:1;;;33735:34:0::1;::::0;1388:18:1;33735:34:0::1;;;;;;;33602:175:::0;;:::o;34784:156::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;34888:10:::1;::::0;34859:40:::1;::::0;-1:-1:-1;;;;;34888:10:0;;::::1;::::0;34859:40;::::1;::::0;::::1;::::0;34888:10:::1;::::0;34859:40:::1;34910:10;:22:::0;;-1:-1:-1;;;;;;34910:22:0::1;-1:-1:-1::0;;;;;34910:22:0;;;::::1;::::0;;;::::1;::::0;;34784:156::o;29847:135::-;21238:6;;29907:4;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;-1:-1:-1;29924:20:0::1;:28:::0;;-1:-1:-1;;29924:28:0::1;::::0;;:20:::1;29847:135:::0;:::o;22074:201::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22163:22:0;::::1;22155:73;;;::::0;-1:-1:-1;;;22155:73:0;;9597:2:1;22155:73:0::1;::::0;::::1;9579:21:1::0;9636:2;9616:18;;;9609:30;9675:34;9655:18;;;9648:62;-1:-1:-1;;;9726:18:1;;;9719:36;9772:19;;22155:73:0::1;9395:402:1::0;22155:73:0::1;22239:28;22258:8;22239:18;:28::i;:::-;22074:201:::0;:::o;32337:94::-;21238:6;;-1:-1:-1;;;;;21238:6:0;9890:10;21385:23;21377:68;;;;-1:-1:-1;;;21377:68:0;;;;;;;:::i;:::-;32404:9:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;32404:19:0::1;-1:-1:-1::0;;;;32404:19:0;;::::1;::::0;;;::::1;::::0;;32337:94::o;18913:380::-;-1:-1:-1;;;;;19049:19:0;;19041:68;;;;-1:-1:-1;;;19041:68:0;;10004:2:1;19041:68:0;;;9986:21:1;10043:2;10023:18;;;10016:30;10082:34;10062:18;;;10055:62;-1:-1:-1;;;10133:18:1;;;10126:34;10177:19;;19041:68:0;9802:400:1;19041:68:0;-1:-1:-1;;;;;19128:21:0;;19120:68;;;;-1:-1:-1;;;19120:68:0;;10409:2:1;19120:68:0;;;10391:21:1;10448:2;10428:18;;;10421:30;10487:34;10467:18;;;10460:62;-1:-1:-1;;;10538:18:1;;;10531:32;10580:19;;19120:68:0;10207:398:1;19120:68:0;-1:-1:-1;;;;;19201:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19253:32;;1934:25:1;;;19253:32:0;;1907:18:1;19253:32:0;;;;;;;18913:380;;;:::o;35075:4419::-;-1:-1:-1;;;;;35207:18:0;;35199:68;;;;-1:-1:-1;;;35199:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35286:16:0;;35278:64;;;;-1:-1:-1;;;35278:64:0;;;;;;;:::i;:::-;35359:6;35369:1;35359:11;35355:93;;35387:28;35403:4;35409:2;35413:1;35387:15;:28::i;:::-;35075:4419;;;:::o;35355:93::-;35464:14;;;;35460:2348;;;21238:6;;-1:-1:-1;;;;;35517:15:0;;;21238:6;;35517:15;;;;:49;;-1:-1:-1;21238:6:0;;-1:-1:-1;;;;;35553:13:0;;;21238:6;;35553:13;;35517:49;:86;;;;-1:-1:-1;;;;;;35587:16:0;;;;35517:86;:128;;;;-1:-1:-1;;;;;;35624:21:0;;35638:6;35624:21;;35517:128;:158;;;;-1:-1:-1;35667:8:0;;-1:-1:-1;;;35667:8:0;;;;35666:9;35517:158;35495:2302;;;35715:9;;-1:-1:-1;;;35715:9:0;;;;35710:205;;-1:-1:-1;;;;;35783:18:0;;;;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;35805:16:0;;;;;;:12;:16;;;;;;;;35783:38;35749:146;;;;-1:-1:-1;;;35749:146:0;;11622:2:1;35749:146:0;;;11604:21:1;11661:2;11641:18;;;11634:30;-1:-1:-1;;;11680:18:1;;;11673:52;11742:18;;35749:146:0;11420:346:1;35749:146:0;36071:20;;;;;;;36067:625;;;21238:6;;-1:-1:-1;;;;;36146:13:0;;;21238:6;;36146:13;;;;:63;;;36202:6;-1:-1:-1;;;;;36188:21:0;:2;-1:-1:-1;;;;;36188:21:0;;;36146:63;:113;;;;;36252:6;-1:-1:-1;;;;;36238:21:0;:2;-1:-1:-1;;;;;36238:21:0;;;36146:113;36116:557;;;36377:9;36348:39;;;;:28;:39;;;;;;36423:12;-1:-1:-1;36310:258:0;;;;-1:-1:-1;;;36310:258:0;;11973:2:1;36310:258:0;;;11955:21:1;12012:2;11992:18;;;11985:30;12051:34;12031:18;;;12024:62;12122:34;12102:18;;;12095:62;-1:-1:-1;;;12173:19:1;;;12166:40;12223:19;;36310:258:0;11771:477:1;36310:258:0;36624:9;36595:39;;;;:28;:39;;;;;36637:12;36595:54;;36116:557;-1:-1:-1;;;;;36766:31:0;;;;;;:25;:31;;;;;;;;:77;;;;-1:-1:-1;;;;;;36823:20:0;;;;;;:16;:20;;;;;;;;36822:21;36766:77;36740:1042;;;36930:5;;36920:6;:15;;36886:139;;;;-1:-1:-1;;;36886:139:0;;12455:2:1;36886:139:0;;;12437:21:1;12494:2;12474:18;;;12467:30;12533:34;12513:18;;;12506:62;-1:-1:-1;;;12584:18:1;;;12577:36;12630:19;;36886:139:0;12253:402:1;36886:139:0;37108:9;;-1:-1:-1;;;;;12196:18:0;;12169:7;12196:18;;;;;;;;;;;37082:22;;:6;:22;:::i;:::-;:35;;37048:140;;;;-1:-1:-1;;;37048:140:0;;12862:2:1;37048:140:0;;;12844:21:1;12901:2;12881:18;;;12874:30;-1:-1:-1;;;12920:18:1;;;12913:49;12979:18;;37048:140:0;12660:343:1;37048:140:0;36740:1042;;;-1:-1:-1;;;;;37286:29:0;;;;;;:25;:29;;;;;;;;:77;;;;-1:-1:-1;;;;;;37341:22:0;;;;;;:16;:22;;;;;;;;37340:23;37286:77;37260:522;;;37450:5;;37440:6;:15;;37406:140;;;;-1:-1:-1;;;37406:140:0;;13210:2:1;37406:140:0;;;13192:21:1;13249:2;13229:18;;;13222:30;13288:34;13268:18;;;13261:62;-1:-1:-1;;;13339:18:1;;;13332:37;13386:19;;37406:140:0;13008:403:1;37260:522:0;-1:-1:-1;;;;;37577:20:0;;;;;;:16;:20;;;;;;;;37572:210;;37682:9;;-1:-1:-1;;;;;12196:18:0;;12169:7;12196:18;;;;;;;;;;;37656:22;;:6;:22;:::i;:::-;:35;;37622:140;;;;-1:-1:-1;;;37622:140:0;;12862:2:1;37622:140:0;;;12844:21:1;12901:2;12881:18;;;12874:30;-1:-1:-1;;;12920:18:1;;;12913:49;12979:18;;37622:140:0;12660:343:1;37622:140:0;37869:4;37820:28;12196:18;;;;;;;;;;;37927:13;;37903:37;;;;;;;37971:33;;-1:-1:-1;37995:9:0;;-1:-1:-1;;;37995:9:0;;;;37971:33;:59;;;;-1:-1:-1;38022:8:0;;-1:-1:-1;;;38022:8:0;;;;38021:9;37971:59;:108;;;;-1:-1:-1;;;;;;38048:31:0;;;;;;:25;:31;;;;;;;;38047:32;37971:108;:144;;;;-1:-1:-1;;;;;;38097:18:0;;;;;;:12;:18;;;;;;;;38096:19;37971:144;:178;;;;-1:-1:-1;;;;;;38133:16:0;;;;;;:12;:16;;;;;;;;38132:17;37971:178;37953:310;;;38176:8;:15;;-1:-1:-1;;;;38176:15:0;-1:-1:-1;;;38176:15:0;;;38208:10;:8;:10::i;:::-;38235:8;:16;;-1:-1:-1;;;;38235:16:0;;;37953:310;38291:8;;-1:-1:-1;;;;;38401:18:0;;38275:12;38401:18;;;:12;:18;;;;;;38291:8;-1:-1:-1;;;38291:8:0;;;;;38290:9;;38401:18;;:38;;-1:-1:-1;;;;;;38423:16:0;;;;;;:12;:16;;;;;;;;38401:38;38397:86;;;-1:-1:-1;38466:5:0;38397:86;38495:12;38600:7;38596:845;;;-1:-1:-1;;;;;38652:29:0;;;;;;:25;:29;;;;;;;;:44;;;;;38695:1;38685:7;;:11;38652:44;38648:644;;;38724:28;38748:3;38724:19;38735:7;;38724:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;38717:35;;38803:7;;38793:6;;38786:4;:13;;;;:::i;:::-;38785:25;;;;:::i;:::-;38771:10;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;38863:7:0;;38852;;38845:14;;:4;:14;:::i;:::-;38844:26;;;;:::i;:::-;38829:11;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;38929:7:0;;38918;;38911:14;;:4;:14;:::i;:::-;38910:26;;;;:::i;:::-;38889:17;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;38648:644:0;;-1:-1:-1;38648:644:0;;-1:-1:-1;;;;;38998:31:0;;;;;;:25;:31;;;;;;;;:45;;;;;39042:1;39033:6;;:10;38998:45;38994:298;;;39071:27;39094:3;39071:18;39082:6;;39071;:10;;:18;;;;:::i;:27::-;39064:34;;39148:6;;39139:5;;39132:4;:12;;;;:::i;:::-;39131:23;;;;:::i;:::-;39117:10;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;;39206:6:0;;39196;;39189:13;;:4;:13;:::i;:::-;39188:24;;;;:::i;:::-;39173:11;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;39270:6:0;;39260;;39253:13;;:4;:13;:::i;:::-;39252:24;;;;:::i;:::-;39231:17;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;38994:298:0;39312:8;;39308:91;;39341:42;39357:4;39371;39378;39341:15;:42::i;:::-;39415:14;39425:4;39415:14;;:::i;:::-;;;38596:845;39453:33;39469:4;39475:2;39479:6;39453:15;:33::i;:::-;35188:4306;;;;35075:4419;;;:::o;22435:191::-;22528:6;;;-1:-1:-1;;;;;22545:17:0;;;-1:-1:-1;;;;;;22545:17:0;;;;;;;22578:40;;22528:6;;;22545:17;22528:6;;22578:40;;22509:16;;22578:40;22498:128;22435:191;:::o;34214:188::-;-1:-1:-1;;;;;34297:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;34297:39:0;;;;;;;;;;34354:40;;34297:39;;:31;34354:40;;;34214:188;;:::o;16132:733::-;-1:-1:-1;;;;;16272:20:0;;16264:70;;;;-1:-1:-1;;;16264:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16353:23:0;;16345:71;;;;-1:-1:-1;;;16345:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16513:17:0;;16489:21;16513:17;;;;;;;;;;;16549:23;;;;16541:74;;;;-1:-1:-1;;;16541:74:0;;13751:2:1;16541:74:0;;;13733:21:1;13790:2;13770:18;;;13763:30;13829:34;13809:18;;;13802:62;-1:-1:-1;;;13880:18:1;;;13873:36;13926:19;;16541:74:0;13549:402:1;16541:74:0;-1:-1:-1;;;;;16651:17:0;;;:9;:17;;;;;;;;;;;16671:22;;;16651:42;;16715:20;;;;;;;;:30;;16687:6;;16651:9;16715:30;;16687:6;;16715:30;:::i;:::-;;;;;;;;16780:9;-1:-1:-1;;;;;16763:35:0;16772:6;-1:-1:-1;;;;;16763:35:0;;16791:6;16763:35;;;;1934:25:1;;1922:2;1907:18;;1788:177;16763:35:0;;;;;;;;16253:612;16132:733;;;:::o;40583:1673::-;40666:4;40622:23;12196:18;;;;;;;;;;;40622:50;;40683:25;40770:11;;40737:17;;40711:10;;:43;;;;:::i;:::-;:70;;;;:::i;:::-;40683:98;;40792:12;40821:15;40840:1;40821:20;40817:59;;40858:7;;;40583:1673::o;40817:59::-;40910:13;;40892:15;:31;40888:95;;;40958:13;;40940:31;;40888:95;41044:23;41149:1;41116:17;41089:10;;41071:15;:28;;;;:::i;:::-;41070:63;;;;:::i;:::-;:80;;;;:::i;:::-;41044:106;-1:-1:-1;41161:26:0;41190:36;:15;41044:106;41190:19;:36::i;:::-;41161:65;-1:-1:-1;41267:21:0;41301:36;41161:65;41301:16;:36::i;:::-;41350:18;41371:44;:21;41397:17;41371:25;:44::i;:::-;41350:65;;41428:23;41454:80;41506:17;41454:33;41469:17;;41454:10;:14;;:33;;;;:::i;:80::-;41428:106;;41545:17;41565:50;41597:17;41565:27;41580:11;;41565:10;:14;;:27;;;;:::i;:50::-;41545:70;-1:-1:-1;41628:23:0;41545:70;41654:28;41667:15;41654:10;:28;:::i;:::-;:40;;;;:::i;:::-;41720:1;41707:10;:14;;;41732:17;:21;;;41764:11;:15;;;41814:10;;41806:46;;41628:66;;-1:-1:-1;;;;;;41814:10:0;;41838:9;;41806:46;41720:1;41806:46;41838:9;41814:10;41806:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41792:60:0;;-1:-1:-1;;41869:19:0;;;;;:42;;;41910:1;41892:15;:19;41869:42;41865:270;;;41928:46;41941:15;41958;41928:12;:46::i;:::-;42098:10;;41994:129;;;14368:25:1;;;14424:2;14409:18;;14402:34;;;14452:18;;;14445:34;;;;41994:129:0;;;;;;14356:2:1;41994:129:0;;;41865:270;42169:15;;42161:87;;-1:-1:-1;;;;;42169:15:0;;;;42212:21;;42161:87;;;;42212:21;42169:15;42161:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;40583:1673:0:o;3253:98::-;3311:7;3338:5;3342:1;3338;:5;:::i;:::-;3331:12;3253:98;-1:-1:-1;;;3253:98:0:o;3652:::-;3710:7;3737:5;3741:1;3737;:5;:::i;2896:98::-;2954:7;2981:5;2985:1;2981;:5;:::i;39502:562::-;39652:16;;;39666:1;39652:16;;;;;;;;39628:21;;39652:16;;;;;;;;;;-1:-1:-1;39652:16:0;39628:40;;39697:4;39679;39684:1;39679:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39679:23:0;;;-1:-1:-1;;;;;39679:23:0;;;;;39723:6;-1:-1:-1;;;;;39723:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39713:4;39718:1;39713:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39713:23:0;;;-1:-1:-1;;;;;39713:23:0;;;;;39749:53;39766:4;39781:6;39790:11;39749:8;:53::i;:::-;39841:215;;-1:-1:-1;;;39841:215:0;;-1:-1:-1;;;;;39841:6:0;:57;;;;:215;;39913:11;;39939:1;;39983:4;;40010;;40030:15;;39841:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39557:507;39502:562;:::o;40072:503::-;40220:53;40237:4;40252:6;40261:11;40220:8;:53::i;:::-;40511:15;;40316:251;;-1:-1:-1;;;40316:251:0;;40379:4;40316:251;;;16336:34:1;16386:18;;;16379:34;;;40425:1:0;16429:18:1;;;16422:34;;;16472:18;;;16465:34;-1:-1:-1;;;;;40511:15:0;;;16515:19:1;;;16508:44;40541:15:0;16568:19:1;;;16561:35;40316:6:0;:22;;;;;;40346:9;;16270:19:1;;40316:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40072:503;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:548::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;686:3;871:1;866:2;857:6;846:9;842:22;838:31;831:42;941:2;934;930:7;925:2;917:6;913:15;909:29;898:9;894:45;890:54;882:62;;;;402:548;;;;:::o;955:315::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;955:315:1:o;1467:316::-;1544:6;1552;1560;1613:2;1601:9;1592:7;1588:23;1584:32;1581:52;;;1629:1;1626;1619:12;1581:52;-1:-1:-1;;1652:23:1;;;1722:2;1707:18;;1694:32;;-1:-1:-1;1773:2:1;1758:18;;;1745:32;;1467:316;-1:-1:-1;1467:316:1:o;1970:456::-;2047:6;2055;2063;2116:2;2104:9;2095:7;2091:23;2087:32;2084:52;;;2132:1;2129;2122:12;2084:52;2171:9;2158:23;2190:31;2215:5;2190:31;:::i;:::-;2240:5;-1:-1:-1;2297:2:1;2282:18;;2269:32;2310:33;2269:32;2310:33;:::i;:::-;1970:456;;2362:7;;-1:-1:-1;;;2416:2:1;2401:18;;;;2388:32;;1970:456::o;2620:180::-;2679:6;2732:2;2720:9;2711:7;2707:23;2703:32;2700:52;;;2748:1;2745;2738:12;2700:52;-1:-1:-1;2771:23:1;;2620:180;-1:-1:-1;2620:180:1:o;3013:160::-;3078:20;;3134:13;;3127:21;3117:32;;3107:60;;3163:1;3160;3153:12;3178:315;3243:6;3251;3304:2;3292:9;3283:7;3279:23;3275:32;3272:52;;;3320:1;3317;3310:12;3272:52;3359:9;3346:23;3378:31;3403:5;3378:31;:::i;:::-;3428:5;-1:-1:-1;3452:35:1;3483:2;3468:18;;3452:35;:::i;:::-;3442:45;;3178:315;;;;;:::o;3498:388::-;3566:6;3574;3627:2;3615:9;3606:7;3602:23;3598:32;3595:52;;;3643:1;3640;3633:12;3595:52;3682:9;3669:23;3701:31;3726:5;3701:31;:::i;:::-;3751:5;-1:-1:-1;3808:2:1;3793:18;;3780:32;3821:33;3780:32;3821:33;:::i;:::-;3873:7;3863:17;;;3498:388;;;;;:::o;4126:180::-;4182:6;4235:2;4223:9;4214:7;4210:23;4206:32;4203:52;;;4251:1;4248;4241:12;4203:52;4274:26;4290:9;4274:26;:::i;4311:356::-;4513:2;4495:21;;;4532:18;;;4525:30;4591:34;4586:2;4571:18;;4564:62;4658:2;4643:18;;4311:356::o;4672:380::-;4751:1;4747:12;;;;4794;;;4815:61;;4869:4;4861:6;4857:17;4847:27;;4815:61;4922:2;4914:6;4911:14;4891:18;4888:38;4885:161;;4968:10;4963:3;4959:20;4956:1;4949:31;5003:4;5000:1;4993:15;5031:4;5028:1;5021:15;4885:161;;4672:380;;;:::o;5057:127::-;5118:10;5113:3;5109:20;5106:1;5099:31;5149:4;5146:1;5139:15;5173:4;5170:1;5163:15;5189:125;5254:9;;;5275:10;;;5272:36;;;5288:18;;:::i;6089:168::-;6162:9;;;6193;;6210:15;;;6204:22;;6190:37;6180:71;;6231:18;;:::i;6262:217::-;6302:1;6328;6318:132;;6372:10;6367:3;6363:20;6360:1;6353:31;6407:4;6404:1;6397:15;6435:4;6432:1;6425:15;6318:132;-1:-1:-1;6464:9:1;;6262:217::o;10610:401::-;10812:2;10794:21;;;10851:2;10831:18;;;10824:30;10890:34;10885:2;10870:18;;10863:62;-1:-1:-1;;;10956:2:1;10941:18;;10934:35;11001:3;10986:19;;10610:401::o;11016:399::-;11218:2;11200:21;;;11257:2;11237:18;;;11230:30;11296:34;11291:2;11276:18;;11269:62;-1:-1:-1;;;11362:2:1;11347:18;;11340:33;11405:3;11390:19;;11016:399::o;13416:128::-;13483:9;;;13504:11;;;13501:37;;;13518:18;;:::i;14622:127::-;14683:10;14678:3;14674:20;14671:1;14664:31;14714:4;14711:1;14704:15;14738:4;14735:1;14728:15;14754:251;14824:6;14877:2;14865:9;14856:7;14852:23;14848:32;14845:52;;;14893:1;14890;14883:12;14845:52;14925:9;14919:16;14944:31;14969:5;14944:31;:::i;15010:980::-;15272:4;15320:3;15309:9;15305:19;15351:6;15340:9;15333:25;15377:2;15415:6;15410:2;15399:9;15395:18;15388:34;15458:3;15453:2;15442:9;15438:18;15431:31;15482:6;15517;15511:13;15548:6;15540;15533:22;15586:3;15575:9;15571:19;15564:26;;15625:2;15617:6;15613:15;15599:29;;15646:1;15656:195;15670:6;15667:1;15664:13;15656:195;;;15735:13;;-1:-1:-1;;;;;15731:39:1;15719:52;;15826:15;;;;15791:12;;;;15767:1;15685:9;15656:195;;;-1:-1:-1;;;;;;;15907:32:1;;;;15902:2;15887:18;;15880:60;-1:-1:-1;;;15971:3:1;15956:19;15949:35;15868:3;15010:980;-1:-1:-1;;;15010:980:1:o;16607:306::-;16695:6;16703;16711;16764:2;16752:9;16743:7;16739:23;16735:32;16732:52;;;16780:1;16777;16770:12;16732:52;16809:9;16803:16;16793:26;;16859:2;16848:9;16844:18;16838:25;16828:35;;16903:2;16892:9;16888:18;16882:25;16872:35;;16607:306;;;;;:::o
Swarm Source
ipfs://5093f155f48854181350967005eabf48fff345f2002834dd4d97b297d6dc3f6a
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.