ERC-20
Overview
Max Total Supply
1,120,203,311.281787 BEER
Holders
142
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Balance
152.478573 BEERValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BudLightClassic
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-12 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; 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 6; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 to 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 {} } library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BudLightClassic is ERC20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _rOwned; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 12 * 1e8 * 1e6; uint256 private _tSupply; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public maxTransactionAmount; uint256 public maxWallet; uint256 public swapTokensAtAmount; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public Treasury; bool public limitsInEffect = true; bool public tradingActive = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = false; uint256 public buyTotalFees; uint256 public buyTreasuryFee = 5; uint256 public buyBurnFee = 0; uint256 public buyReflectionFee = 5; uint256 public sellTotalFees; uint256 public sellTreasuryFee = 15; uint256 public sellBurnFee = 5; uint256 public sellReflectionFee = 0; uint256 public tokensForTreasury; uint256 public tokensForBurn; uint256 public tokensForReflections; uint256 public walletDigit; uint256 public transDigit; uint256 public delayDigit; /******************/ // exclude from fees, max transaction amount and max wallet amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; mapping (address => bool) public _isExcludedMaxWalletAmount; // 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; constructor() ERC20("Bud Light Classic", "BEER") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); excludeFromMaxWallet(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); excludeFromMaxWallet(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); buyTotalFees = buyTreasuryFee + buyBurnFee + buyReflectionFee; sellTotalFees = sellTreasuryFee + sellBurnFee + sellReflectionFee; Treasury = 0x591089F330bB2701a9cf38d7AB99e5835514F659; _rOwned[_msgSender()] = _rTotal; _tSupply = _tTotal; walletDigit = 2; transDigit = 2; delayDigit = 1; maxTransactionAmount =_tSupply * transDigit / 100; swapTokensAtAmount = _tSupply * 5 / 10000; // 0.05% swap wallet; maxWallet = _tSupply * walletDigit / 100; // exclude from paying fees or having max transaction amount, max wallet amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxWallet(owner(), true); excludeFromMaxWallet(address(this), true); excludeFromMaxWallet(address(0xdead), true); _approve(owner(), address(uniswapV2Router), _tSupply); _mint(msg.sender, _tSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // change the minimum amount of tokens to swap function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require(newAmount >= (totalSupply() * 1 / 100000) / 1e6, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= (totalSupply() * 5 / 1000) / 1e6, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount * (10**6); return true; } function updateTransDigit(uint256 newNum) external onlyOwner { require(newNum >= 1); transDigit = newNum; updateLimits(); } function updateWalletDigit(uint256 newNum) external onlyOwner { require(newNum >= 1); walletDigit = newNum; updateLimits(); } function updateDelayDigit(uint256 newNum) external onlyOwner{ delayDigit = newNum; } function updateTranferDelayEnabled(bool value) external onlyOwner{ transferDelayEnabled = value; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromMaxWallet(address updAds, bool isEx) public onlyOwner { _isExcludedMaxWalletAmount[updAds] = isEx; } function updateBuyFees(uint256 _treasuryFee, uint256 _burnFee, uint256 _reflectionFee) external onlyOwner { buyTreasuryFee = _treasuryFee; buyBurnFee = _burnFee; buyReflectionFee = _reflectionFee; buyTotalFees = buyTreasuryFee + buyBurnFee + buyReflectionFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellFees(uint256 _treasuryFee, uint256 _burnFee, uint256 _reflectionFee) external onlyOwner { sellTreasuryFee = _treasuryFee; sellBurnFee = _burnFee; sellReflectionFee = _reflectionFee; sellTotalFees = sellTreasuryFee + sellBurnFee + sellReflectionFee; require(sellTotalFees <= 15, "Must keep fees at 15% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function updateTreasuryWallet(address newTreasuryWallet) external onlyOwner { Treasury = newTreasuryWallet; } function updateLimits() private { maxTransactionAmount = _tSupply * transDigit / 100; swapTokensAtAmount = _tSupply * 1 / 10000; // 0.01% swap wallet; maxWallet = _tSupply * walletDigit / 100; } function isExcludedFromFees(address account) external view returns(bool) { return _isExcludedFromFees[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"); require(amount > 0, "Transfer amount must be greater than zero"); if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number + delayDigit; } } // when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedMaxWalletAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 reflectionFee = 0; if (takeFee){ // on buy if (automatedMarketMakerPairs[from] && to != address(uniswapV2Router)) { fees = amount.mul(buyTotalFees).div(100); getTokensForFees(amount, buyTreasuryFee, buyBurnFee, buyReflectionFee); } // on sell else if (automatedMarketMakerPairs[to] && from != address(uniswapV2Router)) { fees = amount.mul(sellTotalFees).div(100); getTokensForFees(amount, sellTreasuryFee, sellBurnFee, sellReflectionFee); } if (fees > 0) { _tokenTransfer(from, address(this), fees, 0); uint256 refiAmount = tokensForBurn + tokensForReflections; bool refiAndBurn = refiAmount > 0; if(refiAndBurn){ burnAndReflect(refiAmount); } } amount -= fees; } _tokenTransfer(from, to, amount, reflectionFee); } function getTokensForFees(uint256 _amount, uint256 _treasuryFee, uint256 _burnFee, uint256 _reflectionFee) private { tokensForTreasury += _amount.mul(_treasuryFee).div(100); tokensForBurn += _amount.mul(_burnFee).div(100); tokensForReflections += _amount.mul(_reflectionFee).div(100); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; if(contractBalance == 0) {return;} swapTokensForEth(contractBalance); tokensForTreasury = 0; (success,) = address(Treasury).call{value: address(this).balance}(""); } // Reflection function totalSupply() public view override returns (uint256) { return _tSupply; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]); } function tokenFromReflection(uint256 rAmount) private view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _tokenTransfer(address sender, address recipient, uint256 amount, uint256 reflectionFee) private { _transferStandard(sender, recipient, amount, reflectionFee); } function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 reflectionFee) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, reflectionFee); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount, uint256 reflectionFee) private view returns (uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, reflectionFee); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee); } function _getTValues(uint256 tAmount, uint256 reflectionFee) private pure returns (uint256, uint256) { uint256 tFee = tAmount.mul(reflectionFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function burnAndReflect(uint256 _amount) private { _tokenTransfer(address(this), deadAddress, _amount, 50); _tSupply -= _amount.div(2); tokensForReflections = 0; tokensForBurn = 0; updateLimits(); } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","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":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delayDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateDelayDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"updateTranferDelayEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateTransDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateWalletDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526200001966044364c5bb000060001962000a08565b620000279060001962000a35565b600855600d805461ffff60a81b1916600160a81b179055600f805460ff19168155600560118190556000601281905560138290556015929092556016556017553480156200007457600080fd5b506040805180820182526011815270427564204c6967687420436c617373696360781b6020808301918252835180850190945260048452632122a2a960e11b908401528151919291620000ca916003916200094c565b508051620000e09060049060208401906200094c565b5050506000620000f56200055560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200016581600162000559565b62000172816001620005d3565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620001b857600080fd5b505afa158015620001cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f3919062000a4f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023c57600080fd5b505afa15801562000251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000277919062000a4f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002c057600080fd5b505af1158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000a4f565b6001600160a01b031660a08190526200031690600162000559565b60a05162000326906001620005d3565b60a0516001600160a01b03166000908152602160205260409020805460ff1916600117905560135460125460115462000360919062000a7a565b6200036c919062000a7a565b60105560175460165460155462000384919062000a7a565b62000390919062000a7a565b601455600d8054610100600160a81b03191674591089f330bb2701a9cf38d7ab99e5835514f6590017905560085460066000620003ca3390565b6001600160a01b0316815260208101919091526040016000205566044364c5bb000060078190556002601b819055601c8190556001601d5560649162000411919062000a95565b6200041d919062000ab7565b600a55600754612710906200043490600562000a95565b62000440919062000ab7565b600c55601b54600754606491620004579162000a95565b62000463919062000ab7565b600b55620004856200047d6005546001600160a01b031690565b600162000648565b6200049230600162000648565b620004a161dead600162000648565b620004c0620004b86005546001600160a01b031690565b600162000559565b620004cd30600162000559565b620004dc61dead600162000559565b620004fb620004f36005546001600160a01b031690565b6001620005d3565b62000508306001620005d3565b6200051761dead6001620005d3565b6200053a6200052e6005546001600160a01b031690565b608051600754620006be565b6200054e33600754620007e660201b60201c565b5062000b0b565b3390565b6005546001600160a01b03163314620005a85760405162461bcd60e51b815260206004820181905260248201526000805160206200347b83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146200061e5760405162461bcd60e51b815260206004820181905260248201526000805160206200347b83398151915260448201526064016200059f565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006935760405162461bcd60e51b815260206004820181905260248201526000805160206200347b83398151915260448201526064016200059f565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6001600160a01b038316620007225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200059f565b6001600160a01b038216620007855760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200059f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166200083e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200059f565b6200085a81600254620008e260201b6200142c1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200088d9183906200142c620008e2821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620008f1838562000a7a565b905083811015620009455760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200059f565b9392505050565b8280546200095a9062000ace565b90600052602060002090601f0160209004810192826200097e5760008555620009c9565b82601f106200099957805160ff1916838001178555620009c9565b82800160010185558215620009c9579182015b82811115620009c9578251825591602001919060010190620009ac565b50620009d7929150620009db565b5090565b5b80821115620009d75760008155600101620009dc565b634e487b7160e01b600052601260045260246000fd5b60008262000a1a5762000a1a620009f2565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000a4a5762000a4a62000a1f565b500390565b60006020828403121562000a6257600080fd5b81516001600160a01b03811681146200094557600080fd5b6000821982111562000a905762000a9062000a1f565b500190565b600081600019048311821515161562000ab25762000ab262000a1f565b500290565b60008262000ac95762000ac9620009f2565b500490565b600181811c9082168062000ae357607f821691505b6020821081141562000b0557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161291262000b696000396000818161059d01528181610f1e01526118b301526000818161047e0152818161187501528181611c9301528181611d2b01528181612136015281816121fe015261223a01526129126000f3fe60806040526004361061036f5760003560e01c80638095d564116101c6578063c0246668116100f7578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610a02578063f203acb614610a18578063f2fde38b14610a2e578063f8b45b0514610a4e57600080fd5b8063d85ba06314610990578063dd62ed3e146109a6578063e2f45605146109ec57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe414610924578063cc2ffe7c1461093a578063d257b34f14610950578063d2fcc0011461097057600080fd5b8063c0246668146108ca578063c17b5b8c146108ea578063c876d0b91461090a57600080fd5b80639a7a23d611610164578063a9059cbb1161013e578063a9059cbb14610843578063adb873bd14610863578063b62496f514610879578063bbc0c742146108a957600080fd5b80639a7a23d6146107e35780639fdc482414610803578063a457c2d71461082357600080fd5b80638da5cb5b116101a05780638da5cb5b1461076b57806395d89b411461078957806396880b171461079e578063975d71e2146107cd57600080fd5b80638095d56414610716578063809d458d146107365780638a8c523c1461075657600080fd5b806339509351116102a05780636a486a8e1161023e578063715018a611610218578063715018a6146106b6578063751039fc146106cb5780637571336a146106e05780637ab439831461070057600080fd5b80636a486a8e1461066a5780636b2fb1241461068057806370a082311461069657600080fd5b80634fbee1931161027a5780634fbee193146105e0578063563df32f146106195780635c068a8c1461063e5780636042f7191461065457600080fd5b8063395093511461056b57806349bd5a5e1461058b5780634a62bb65146105bf57600080fd5b806318160ddd1161030d57806323136371116102e7578063231363711461050357806323b872dd1461051957806327c8f83514610539578063313ce5671461054f57600080fd5b806318160ddd146104b85780631d777856146104cd5780631fa07da5146104e357600080fd5b806310d5de531161034957806310d5de53146103f857806312611ae814610428578063150de0bb1461044c5780631694505e1461046c57600080fd5b806306fdde031461037b578063093f3a5c146103a6578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610a64565b60405161039d9190612523565b60405180910390f35b3480156103b257600080fd5b506103c66103c1366004612588565b610af6565b005b3480156103d457600080fd5b506103e86103e33660046125b8565b610b3c565b604051901515815260200161039d565b34801561040457600080fd5b506103e86104133660046125e4565b601f6020526000908152604090205460ff1681565b34801561043457600080fd5b5061043e601a5481565b60405190815260200161039d565b34801561045857600080fd5b506103c6610467366004612601565b610b53565b34801561047857600080fd5b506104a07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039d565b3480156104c457600080fd5b5060075461043e565b3480156104d957600080fd5b5061043e60195481565b3480156104ef57600080fd5b506103c66104fe366004612601565b610b9b565b34801561050f57600080fd5b5061043e60135481565b34801561052557600080fd5b506103e861053436600461261a565b610be0565b34801561054557600080fd5b506104a061dead81565b34801561055b57600080fd5b506040516006815260200161039d565b34801561057757600080fd5b506103e86105863660046125b8565b610c49565b34801561059757600080fd5b506104a07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b50600d546103e890600160a81b900460ff1681565b3480156105ec57600080fd5b506103e86105fb3660046125e4565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561062557600080fd5b50600d546104a09061010090046001600160a01b031681565b34801561064a57600080fd5b5061043e60115481565b34801561066057600080fd5b5061043e60175481565b34801561067657600080fd5b5061043e60145481565b34801561068c57600080fd5b5061043e60155481565b3480156106a257600080fd5b5061043e6106b13660046125e4565b610c7f565b3480156106c257600080fd5b506103c6610ca1565b3480156106d757600080fd5b506103e8610d15565b3480156106ec57600080fd5b506103c66106fb36600461265b565b610d55565b34801561070c57600080fd5b5061043e601b5481565b34801561072257600080fd5b506103c6610731366004612690565b610daa565b34801561074257600080fd5b506103c66107513660046125e4565b610e52565b34801561076257600080fd5b506103c6610ea4565b34801561077757600080fd5b506005546001600160a01b03166104a0565b34801561079557600080fd5b50610390610ee3565b3480156107aa57600080fd5b506103e86107b93660046125e4565b602080526000908152604090205460ff1681565b3480156107d957600080fd5b5061043e601c5481565b3480156107ef57600080fd5b506103c66107fe36600461265b565b610ef2565b34801561080f57600080fd5b506103c661081e366004612601565b610fec565b34801561082f57600080fd5b506103e861083e3660046125b8565b61101b565b34801561084f57600080fd5b506103e861085e3660046125b8565b61106a565b34801561086f57600080fd5b5061043e60165481565b34801561088557600080fd5b506103e86108943660046125e4565b60216020526000908152604090205460ff1681565b3480156108b557600080fd5b50600d546103e890600160b01b900460ff1681565b3480156108d657600080fd5b506103c66108e536600461265b565b611077565b3480156108f657600080fd5b506103c6610905366004612690565b6110cc565b34801561091657600080fd5b50600f546103e89060ff1681565b34801561093057600080fd5b5061043e600a5481565b34801561094657600080fd5b5061043e60185481565b34801561095c57600080fd5b506103e861096b366004612601565b61116f565b34801561097c57600080fd5b506103c661098b36600461265b565b6112ed565b34801561099c57600080fd5b5061043e60105481565b3480156109b257600080fd5b5061043e6109c13660046126bc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109f857600080fd5b5061043e600c5481565b348015610a0e57600080fd5b5061043e60125481565b348015610a2457600080fd5b5061043e601d5481565b348015610a3a57600080fd5b506103c6610a493660046125e4565b611341565b348015610a5a57600080fd5b5061043e600b5481565b606060038054610a73906126f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f906126f5565b8015610aec5780601f10610ac157610100808354040283529160200191610aec565b820191906000526020600020905b815481529060010190602001808311610acf57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b295760405162461bcd60e51b8152600401610b2090612730565b60405180910390fd5b600f805460ff1916911515919091179055565b6000610b49338484611492565b5060015b92915050565b6005546001600160a01b03163314610b7d5760405162461bcd60e51b8152600401610b2090612730565b6001811015610b8b57600080fd5b601b819055610b986115b6565b50565b6005546001600160a01b03163314610bc55760405162461bcd60e51b8152600401610b2090612730565b6001811015610bd357600080fd5b601c819055610b986115b6565b6000610bed848484611615565b610c3f8433610c3a85604051806060016040528060288152602001612890602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611df2565b611492565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b49918590610c3a908661142c565b6001600160a01b038116600090815260066020526040812054610b4d90611e2c565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610b2090612730565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610d425760405162461bcd60e51b8152600401610b2090612730565b50600d805460ff60a81b19169055600190565b6005546001600160a01b03163314610d7f5760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dd45760405162461bcd60e51b8152600401610b2090612730565b60118390556012829055601381905580610dee838561277b565b610df8919061277b565b6010819055600a1015610e4d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b20565b505050565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610b2090612730565b600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610ece5760405162461bcd60e51b8152600401610b2090612730565b600d805460ff60b01b1916600160b01b179055565b606060048054610a73906126f5565b6005546001600160a01b03163314610f1c5760405162461bcd60e51b8152600401610b2090612730565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610fc45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b20565b6001600160a01b0382166000908152602160205260409020805460ff19168215151790555050565b6005546001600160a01b031633146110165760405162461bcd60e51b8152600401610b2090612730565b601d55565b6000610b493384610c3a856040518060600160405280602581526020016128b8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611df2565b6000610b49338484611615565b6005546001600160a01b031633146110a15760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110f65760405162461bcd60e51b8152600401610b2090612730565b60158390556016829055601781905580611110838561277b565b61111a919061277b565b6014819055600f1015610e4d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b20565b6005546000906001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b2090612730565b620f4240620186a06111ad60075490565b6111b8906001612793565b6111c291906127b2565b6111cc91906127b2565b8210156112395760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b20565b620f42406103e861124960075490565b611254906005612793565b61125e91906127b2565b61126891906127b2565b8211156112d45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b20565b6112e182620f4240612793565b600c555060015b919050565b6005546001600160a01b031633146113175760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461136b5760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b0381166113d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b20565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611439838561277b565b90508381101561148b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b20565b9392505050565b6001600160a01b0383166114f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b20565b6001600160a01b0382166115555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b20565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6064601c546007546115c89190612793565b6115d291906127b2565b600a55600754612710906115e7906001612793565b6115f191906127b2565b600c55601b5460075460649161160691612793565b61161091906127b2565b600b55565b6001600160a01b0383166116795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b20565b6001600160a01b0382166116db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b20565b6000811161173d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b20565b600d54600160a81b900460ff1615611b5c576005546001600160a01b0384811691161480159061177b57506005546001600160a01b03838116911614155b801561178f57506001600160a01b03821615155b80156117a657506001600160a01b03821661dead14155b80156117b55750600d5460ff16155b15611b5c57600d54600160b01b900460ff1661184f576001600160a01b0383166000908152601e602052604090205460ff168061180a57506001600160a01b0382166000908152601e602052604090205460ff165b61184f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b20565b600f5460ff16156119a1576005546001600160a01b038381169116148015906118aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156118e857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156119a157326000908152600e602052604090205443116119835760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b20565b601d54611990904361277b565b326000908152600e60205260409020555b6001600160a01b03831660009081526021602052604090205460ff1680156119e257506001600160a01b0382166000908152601f602052604090205460ff16155b15611a5757600a54811115611a575760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b20565b6001600160a01b0383166000908152601f602052604090205460ff16611ae357600a54811115611ae35760405162461bcd60e51b815260206004820152603160248201527f7472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152703930b739b0b1ba34b7b720b6b7bab73a1760791b6064820152608401610b20565b6001600160a01b038216600090815260208052604090205460ff16611b5c57600b54611b0e83610c7f565b611b18908361277b565b1115611b5c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b20565b6000611b6730610c7f565b600c5490915081108015908190611b815750600d5460ff16155b8015611ba657506001600160a01b03851660009081526021602052604090205460ff16155b8015611bcb57506001600160a01b0385166000908152601e602052604090205460ff16155b8015611bf057506001600160a01b0384166000908152601e602052604090205460ff16155b15611c1557600d805460ff19166001179055611c0a611ea9565b600d805460ff191690555b600d546001600160a01b0386166000908152601e602052604090205460ff91821615911680611c5c57506001600160a01b0385166000908152601e602052604090205460ff165b15611c65575060005b6000808215611ddc576001600160a01b03881660009081526021602052604090205460ff168015611cc857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b15611d0657611ced6064611ce760105489611f3090919063ffffffff16565b90611faf565b9150611d0186601154601254601354611ff1565b611d93565b6001600160a01b03871660009081526021602052604090205460ff168015611d6057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b031614155b15611d9357611d7f6064611ce760145489611f3090919063ffffffff16565b9150611d9386601554601654601754611ff1565b8115611dcf57611da68830846000612068565b6000601a54601954611db8919061277b565b90508015801590611dcc57611dcc8261207a565b50505b611dd982876127d4565b95505b611de888888884612068565b5050505050505050565b60008184841115611e165760405162461bcd60e51b8152600401610b209190612523565b506000611e2384866127d4565b95945050505050565b6000600854821115611e935760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b20565b6000611e9d6120bc565b905061148b8382611faf565b6000611eb430610c7f565b9050600081611ec1575050565b611eca826120df565b6000601855600d546040516101009091046001600160a01b031690479060006040518083038185875af1925050503d8060008114611f24576040519150601f19603f3d011682016040523d82523d6000602084013e611f29565b606091505b5050505050565b600082611f3f57506000610b4d565b6000611f4b8385612793565b905082611f5885836127b2565b1461148b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b20565b600061148b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122ae565b6120006064611ce78686611f30565b60186000828254612011919061277b565b9091555061202690506064611ce78685611f30565b60196000828254612037919061277b565b9091555061204c90506064611ce78684611f30565b601a600082825461205d919061277b565b909155505050505050565b612074848484846122dc565b50505050565b6120893061dead836032612068565b612094816002611faf565b600760008282546120a591906127d4565b90915550506000601a819055601955610b986115b6565b60008060006120c96123c8565b90925090506120d88282611faf565b9250505090565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612114576121146127eb565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c59190612801565b816001815181106121d8576121d86127eb565b60200260200101906001600160a01b031690816001600160a01b031681525050612223307f000000000000000000000000000000000000000000000000000000000000000084611492565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061227890859060009086903090429060040161281e565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b505050505050565b600081836122cf5760405162461bcd60e51b8152600401610b209190612523565b506000611e2384866127b2565b60008060008060006122ee8787612406565b6001600160a01b038e166000908152600660205260409020549499509297509095509350915061231e9086612454565b6001600160a01b03808b1660009081526006602052604080822093909355908a168152205461234d908561142c565b6001600160a01b0389166000908152600660205260409020556123708382612496565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123b591815260200190565b60405180910390a3505050505050505050565b600854600090819066044364c5bb00006123e28282611faf565b8210156123fd5750506008549266044364c5bb000092509050565b90939092509050565b600080600080600080600061241b89896124ba565b9150915060006124296120bc565b9050600080600061243b8d86866124e7565b919f909e50909c50959a50939850939650505050505050565b600061148b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df2565b6008546124a39083612454565b6008556009546124b3908261142c565b6009555050565b600080806124cd6064611ce78787611f30565b905060006124db8683612454565b96919550909350505050565b60008080806124f68786611f30565b905060006125048787611f30565b905060006125128383612454565b929992985090965090945050505050565b600060208083528351808285015260005b8181101561255057858101830151858201604001528201612534565b81811115612562576000604083870101525b50601f01601f1916929092016040019392505050565b803580151581146112e857600080fd5b60006020828403121561259a57600080fd5b61148b82612578565b6001600160a01b0381168114610b9857600080fd5b600080604083850312156125cb57600080fd5b82356125d6816125a3565b946020939093013593505050565b6000602082840312156125f657600080fd5b813561148b816125a3565b60006020828403121561261357600080fd5b5035919050565b60008060006060848603121561262f57600080fd5b833561263a816125a3565b9250602084013561264a816125a3565b929592945050506040919091013590565b6000806040838503121561266e57600080fd5b8235612679816125a3565b915061268760208401612578565b90509250929050565b6000806000606084860312156126a557600080fd5b505081359360208301359350604090920135919050565b600080604083850312156126cf57600080fd5b82356126da816125a3565b915060208301356126ea816125a3565b809150509250929050565b600181811c9082168061270957607f821691505b6020821081141561272a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561278e5761278e612765565b500190565b60008160001904831182151516156127ad576127ad612765565b500290565b6000826127cf57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156127e6576127e6612765565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561281357600080fd5b815161148b816125a3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561286e5784516001600160a01b031683529383019391830191600101612849565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220348b7f9763662a0e82affa8642af82f2434b7883076dab6ecc744840802bb48b64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80638095d564116101c6578063c0246668116100f7578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610a02578063f203acb614610a18578063f2fde38b14610a2e578063f8b45b0514610a4e57600080fd5b8063d85ba06314610990578063dd62ed3e146109a6578063e2f45605146109ec57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe414610924578063cc2ffe7c1461093a578063d257b34f14610950578063d2fcc0011461097057600080fd5b8063c0246668146108ca578063c17b5b8c146108ea578063c876d0b91461090a57600080fd5b80639a7a23d611610164578063a9059cbb1161013e578063a9059cbb14610843578063adb873bd14610863578063b62496f514610879578063bbc0c742146108a957600080fd5b80639a7a23d6146107e35780639fdc482414610803578063a457c2d71461082357600080fd5b80638da5cb5b116101a05780638da5cb5b1461076b57806395d89b411461078957806396880b171461079e578063975d71e2146107cd57600080fd5b80638095d56414610716578063809d458d146107365780638a8c523c1461075657600080fd5b806339509351116102a05780636a486a8e1161023e578063715018a611610218578063715018a6146106b6578063751039fc146106cb5780637571336a146106e05780637ab439831461070057600080fd5b80636a486a8e1461066a5780636b2fb1241461068057806370a082311461069657600080fd5b80634fbee1931161027a5780634fbee193146105e0578063563df32f146106195780635c068a8c1461063e5780636042f7191461065457600080fd5b8063395093511461056b57806349bd5a5e1461058b5780634a62bb65146105bf57600080fd5b806318160ddd1161030d57806323136371116102e7578063231363711461050357806323b872dd1461051957806327c8f83514610539578063313ce5671461054f57600080fd5b806318160ddd146104b85780631d777856146104cd5780631fa07da5146104e357600080fd5b806310d5de531161034957806310d5de53146103f857806312611ae814610428578063150de0bb1461044c5780631694505e1461046c57600080fd5b806306fdde031461037b578063093f3a5c146103a6578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610a64565b60405161039d9190612523565b60405180910390f35b3480156103b257600080fd5b506103c66103c1366004612588565b610af6565b005b3480156103d457600080fd5b506103e86103e33660046125b8565b610b3c565b604051901515815260200161039d565b34801561040457600080fd5b506103e86104133660046125e4565b601f6020526000908152604090205460ff1681565b34801561043457600080fd5b5061043e601a5481565b60405190815260200161039d565b34801561045857600080fd5b506103c6610467366004612601565b610b53565b34801561047857600080fd5b506104a07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161039d565b3480156104c457600080fd5b5060075461043e565b3480156104d957600080fd5b5061043e60195481565b3480156104ef57600080fd5b506103c66104fe366004612601565b610b9b565b34801561050f57600080fd5b5061043e60135481565b34801561052557600080fd5b506103e861053436600461261a565b610be0565b34801561054557600080fd5b506104a061dead81565b34801561055b57600080fd5b506040516006815260200161039d565b34801561057757600080fd5b506103e86105863660046125b8565b610c49565b34801561059757600080fd5b506104a07f0000000000000000000000009ed99a2cc2ae21e5a18dcb0185eff7a97c96618681565b3480156105cb57600080fd5b50600d546103e890600160a81b900460ff1681565b3480156105ec57600080fd5b506103e86105fb3660046125e4565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561062557600080fd5b50600d546104a09061010090046001600160a01b031681565b34801561064a57600080fd5b5061043e60115481565b34801561066057600080fd5b5061043e60175481565b34801561067657600080fd5b5061043e60145481565b34801561068c57600080fd5b5061043e60155481565b3480156106a257600080fd5b5061043e6106b13660046125e4565b610c7f565b3480156106c257600080fd5b506103c6610ca1565b3480156106d757600080fd5b506103e8610d15565b3480156106ec57600080fd5b506103c66106fb36600461265b565b610d55565b34801561070c57600080fd5b5061043e601b5481565b34801561072257600080fd5b506103c6610731366004612690565b610daa565b34801561074257600080fd5b506103c66107513660046125e4565b610e52565b34801561076257600080fd5b506103c6610ea4565b34801561077757600080fd5b506005546001600160a01b03166104a0565b34801561079557600080fd5b50610390610ee3565b3480156107aa57600080fd5b506103e86107b93660046125e4565b602080526000908152604090205460ff1681565b3480156107d957600080fd5b5061043e601c5481565b3480156107ef57600080fd5b506103c66107fe36600461265b565b610ef2565b34801561080f57600080fd5b506103c661081e366004612601565b610fec565b34801561082f57600080fd5b506103e861083e3660046125b8565b61101b565b34801561084f57600080fd5b506103e861085e3660046125b8565b61106a565b34801561086f57600080fd5b5061043e60165481565b34801561088557600080fd5b506103e86108943660046125e4565b60216020526000908152604090205460ff1681565b3480156108b557600080fd5b50600d546103e890600160b01b900460ff1681565b3480156108d657600080fd5b506103c66108e536600461265b565b611077565b3480156108f657600080fd5b506103c6610905366004612690565b6110cc565b34801561091657600080fd5b50600f546103e89060ff1681565b34801561093057600080fd5b5061043e600a5481565b34801561094657600080fd5b5061043e60185481565b34801561095c57600080fd5b506103e861096b366004612601565b61116f565b34801561097c57600080fd5b506103c661098b36600461265b565b6112ed565b34801561099c57600080fd5b5061043e60105481565b3480156109b257600080fd5b5061043e6109c13660046126bc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109f857600080fd5b5061043e600c5481565b348015610a0e57600080fd5b5061043e60125481565b348015610a2457600080fd5b5061043e601d5481565b348015610a3a57600080fd5b506103c6610a493660046125e4565b611341565b348015610a5a57600080fd5b5061043e600b5481565b606060038054610a73906126f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f906126f5565b8015610aec5780601f10610ac157610100808354040283529160200191610aec565b820191906000526020600020905b815481529060010190602001808311610acf57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b295760405162461bcd60e51b8152600401610b2090612730565b60405180910390fd5b600f805460ff1916911515919091179055565b6000610b49338484611492565b5060015b92915050565b6005546001600160a01b03163314610b7d5760405162461bcd60e51b8152600401610b2090612730565b6001811015610b8b57600080fd5b601b819055610b986115b6565b50565b6005546001600160a01b03163314610bc55760405162461bcd60e51b8152600401610b2090612730565b6001811015610bd357600080fd5b601c819055610b986115b6565b6000610bed848484611615565b610c3f8433610c3a85604051806060016040528060288152602001612890602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611df2565b611492565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b49918590610c3a908661142c565b6001600160a01b038116600090815260066020526040812054610b4d90611e2c565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610b2090612730565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610d425760405162461bcd60e51b8152600401610b2090612730565b50600d805460ff60a81b19169055600190565b6005546001600160a01b03163314610d7f5760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dd45760405162461bcd60e51b8152600401610b2090612730565b60118390556012829055601381905580610dee838561277b565b610df8919061277b565b6010819055600a1015610e4d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b20565b505050565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610b2090612730565b600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610ece5760405162461bcd60e51b8152600401610b2090612730565b600d805460ff60b01b1916600160b01b179055565b606060048054610a73906126f5565b6005546001600160a01b03163314610f1c5760405162461bcd60e51b8152600401610b2090612730565b7f0000000000000000000000009ed99a2cc2ae21e5a18dcb0185eff7a97c9661866001600160a01b0316826001600160a01b03161415610fc45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b20565b6001600160a01b0382166000908152602160205260409020805460ff19168215151790555050565b6005546001600160a01b031633146110165760405162461bcd60e51b8152600401610b2090612730565b601d55565b6000610b493384610c3a856040518060600160405280602581526020016128b8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611df2565b6000610b49338484611615565b6005546001600160a01b031633146110a15760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110f65760405162461bcd60e51b8152600401610b2090612730565b60158390556016829055601781905580611110838561277b565b61111a919061277b565b6014819055600f1015610e4d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b20565b6005546000906001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b2090612730565b620f4240620186a06111ad60075490565b6111b8906001612793565b6111c291906127b2565b6111cc91906127b2565b8210156112395760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b20565b620f42406103e861124960075490565b611254906005612793565b61125e91906127b2565b61126891906127b2565b8211156112d45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b20565b6112e182620f4240612793565b600c555060015b919050565b6005546001600160a01b031633146113175760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461136b5760405162461bcd60e51b8152600401610b2090612730565b6001600160a01b0381166113d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b20565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611439838561277b565b90508381101561148b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b20565b9392505050565b6001600160a01b0383166114f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b20565b6001600160a01b0382166115555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b20565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6064601c546007546115c89190612793565b6115d291906127b2565b600a55600754612710906115e7906001612793565b6115f191906127b2565b600c55601b5460075460649161160691612793565b61161091906127b2565b600b55565b6001600160a01b0383166116795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b20565b6001600160a01b0382166116db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b20565b6000811161173d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b20565b600d54600160a81b900460ff1615611b5c576005546001600160a01b0384811691161480159061177b57506005546001600160a01b03838116911614155b801561178f57506001600160a01b03821615155b80156117a657506001600160a01b03821661dead14155b80156117b55750600d5460ff16155b15611b5c57600d54600160b01b900460ff1661184f576001600160a01b0383166000908152601e602052604090205460ff168061180a57506001600160a01b0382166000908152601e602052604090205460ff165b61184f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b20565b600f5460ff16156119a1576005546001600160a01b038381169116148015906118aa57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156118e857507f0000000000000000000000009ed99a2cc2ae21e5a18dcb0185eff7a97c9661866001600160a01b0316826001600160a01b031614155b156119a157326000908152600e602052604090205443116119835760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b20565b601d54611990904361277b565b326000908152600e60205260409020555b6001600160a01b03831660009081526021602052604090205460ff1680156119e257506001600160a01b0382166000908152601f602052604090205460ff16155b15611a5757600a54811115611a575760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b20565b6001600160a01b0383166000908152601f602052604090205460ff16611ae357600a54811115611ae35760405162461bcd60e51b815260206004820152603160248201527f7472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152703930b739b0b1ba34b7b720b6b7bab73a1760791b6064820152608401610b20565b6001600160a01b038216600090815260208052604090205460ff16611b5c57600b54611b0e83610c7f565b611b18908361277b565b1115611b5c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b20565b6000611b6730610c7f565b600c5490915081108015908190611b815750600d5460ff16155b8015611ba657506001600160a01b03851660009081526021602052604090205460ff16155b8015611bcb57506001600160a01b0385166000908152601e602052604090205460ff16155b8015611bf057506001600160a01b0384166000908152601e602052604090205460ff16155b15611c1557600d805460ff19166001179055611c0a611ea9565b600d805460ff191690555b600d546001600160a01b0386166000908152601e602052604090205460ff91821615911680611c5c57506001600160a01b0385166000908152601e602052604090205460ff165b15611c65575060005b6000808215611ddc576001600160a01b03881660009081526021602052604090205460ff168015611cc857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316876001600160a01b031614155b15611d0657611ced6064611ce760105489611f3090919063ffffffff16565b90611faf565b9150611d0186601154601254601354611ff1565b611d93565b6001600160a01b03871660009081526021602052604090205460ff168015611d6057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316886001600160a01b031614155b15611d9357611d7f6064611ce760145489611f3090919063ffffffff16565b9150611d9386601554601654601754611ff1565b8115611dcf57611da68830846000612068565b6000601a54601954611db8919061277b565b90508015801590611dcc57611dcc8261207a565b50505b611dd982876127d4565b95505b611de888888884612068565b5050505050505050565b60008184841115611e165760405162461bcd60e51b8152600401610b209190612523565b506000611e2384866127d4565b95945050505050565b6000600854821115611e935760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b20565b6000611e9d6120bc565b905061148b8382611faf565b6000611eb430610c7f565b9050600081611ec1575050565b611eca826120df565b6000601855600d546040516101009091046001600160a01b031690479060006040518083038185875af1925050503d8060008114611f24576040519150601f19603f3d011682016040523d82523d6000602084013e611f29565b606091505b5050505050565b600082611f3f57506000610b4d565b6000611f4b8385612793565b905082611f5885836127b2565b1461148b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b20565b600061148b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122ae565b6120006064611ce78686611f30565b60186000828254612011919061277b565b9091555061202690506064611ce78685611f30565b60196000828254612037919061277b565b9091555061204c90506064611ce78684611f30565b601a600082825461205d919061277b565b909155505050505050565b612074848484846122dc565b50505050565b6120893061dead836032612068565b612094816002611faf565b600760008282546120a591906127d4565b90915550506000601a819055601955610b986115b6565b60008060006120c96123c8565b90925090506120d88282611faf565b9250505090565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612114576121146127eb565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c59190612801565b816001815181106121d8576121d86127eb565b60200260200101906001600160a01b031690816001600160a01b031681525050612223307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611492565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061227890859060009086903090429060040161281e565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b505050505050565b600081836122cf5760405162461bcd60e51b8152600401610b209190612523565b506000611e2384866127b2565b60008060008060006122ee8787612406565b6001600160a01b038e166000908152600660205260409020549499509297509095509350915061231e9086612454565b6001600160a01b03808b1660009081526006602052604080822093909355908a168152205461234d908561142c565b6001600160a01b0389166000908152600660205260409020556123708382612496565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123b591815260200190565b60405180910390a3505050505050505050565b600854600090819066044364c5bb00006123e28282611faf565b8210156123fd5750506008549266044364c5bb000092509050565b90939092509050565b600080600080600080600061241b89896124ba565b9150915060006124296120bc565b9050600080600061243b8d86866124e7565b919f909e50909c50959a50939850939650505050505050565b600061148b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df2565b6008546124a39083612454565b6008556009546124b3908261142c565b6009555050565b600080806124cd6064611ce78787611f30565b905060006124db8683612454565b96919550909350505050565b60008080806124f68786611f30565b905060006125048787611f30565b905060006125128383612454565b929992985090965090945050505050565b600060208083528351808285015260005b8181101561255057858101830151858201604001528201612534565b81811115612562576000604083870101525b50601f01601f1916929092016040019392505050565b803580151581146112e857600080fd5b60006020828403121561259a57600080fd5b61148b82612578565b6001600160a01b0381168114610b9857600080fd5b600080604083850312156125cb57600080fd5b82356125d6816125a3565b946020939093013593505050565b6000602082840312156125f657600080fd5b813561148b816125a3565b60006020828403121561261357600080fd5b5035919050565b60008060006060848603121561262f57600080fd5b833561263a816125a3565b9250602084013561264a816125a3565b929592945050506040919091013590565b6000806040838503121561266e57600080fd5b8235612679816125a3565b915061268760208401612578565b90509250929050565b6000806000606084860312156126a557600080fd5b505081359360208301359350604090920135919050565b600080604083850312156126cf57600080fd5b82356126da816125a3565b915060208301356126ea816125a3565b809150509250929050565b600181811c9082168061270957607f821691505b6020821081141561272a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561278e5761278e612765565b500190565b60008160001904831182151516156127ad576127ad612765565b500290565b6000826127cf57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156127e6576127e6612765565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561281357600080fd5b815161148b816125a3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561286e5784516001600160a01b031683529383019391830191600101612849565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220348b7f9763662a0e82affa8642af82f2434b7883076dab6ecc744840802bb48b64736f6c63430008090033
Deployed Bytecode Sourcemap
27385:15624:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7504:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32658:112;;;;;;;;;;-1:-1:-1;32658:112:0;;;;;:::i;:::-;;:::i;:::-;;9670:169;;;;;;;;;;-1:-1:-1;9670:169:0;;;;;:::i;:::-;;:::i;:::-;;;1587:14:1;;1580:22;1562:41;;1550:2;1535:18;9670:169:0;1422:187:1;29110:64:0;;;;;;;;;;-1:-1:-1;29110:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28799:35;;;;;;;;;;;;;;;;;;;2012:25:1;;;2000:2;1985:18;28799:35:0;1866:177:1;32387:157:0;;;;;;;;;;-1:-1:-1;32387:157:0;;;;;:::i;:::-;;:::i;27867:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2424:32:1;;;2406:51;;2394:2;2379:18;27867:51:0;2233:230:1;39885:96:0;;;;;;;;;;-1:-1:-1;39965:8:0;;39885:96;;28764:28;;;;;;;;;;;;;;;;32224:155;;;;;;;;;;-1:-1:-1;32224:155:0;;;;;:::i;:::-;;:::i;28518:35::-;;;;;;;;;;;;;;;;10321:355;;;;;;;;;;-1:-1:-1;10321:355:0;;;;;:::i;:::-;;:::i;27970:53::-;;;;;;;;;;;;28016:6;27970:53;;8466:92;;;;;;;;;;-1:-1:-1;8466:92:0;;8549:1;3279:36:1;;3267:2;3252:18;8466:92:0;3137:184:1;11085:218:0;;;;;;;;;;-1:-1:-1;11085:218:0;;;;;:::i;:::-;;:::i;27925:38::-;;;;;;;;;;;;;;;28094:33;;;;;;;;;;-1:-1:-1;28094:33:0;;;;-1:-1:-1;;;28094:33:0;;;;;;34750:127;;;;;;;;;;-1:-1:-1;34750:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;34841:28:0;34817:4;34841:28;;;:19;:28;;;;;;;;;34750:127;28062:23;;;;;;;;;;-1:-1:-1;28062:23:0;;;;;;;-1:-1:-1;;;;;28062:23:0;;;28442:33;;;;;;;;;;;;;;;;28680:36;;;;;;;;;;;;;;;;28566:28;;;;;;;;;;;;;;;;28601:35;;;;;;;;;;;;;;;;39989:138;;;;;;;;;;-1:-1:-1;39989:138:0;;;;;:::i;:::-;;:::i;21970:148::-;;;;;;;;;;;;;:::i;31622:121::-;;;;;;;;;;;;;:::i;32782:144::-;;;;;;;;;;-1:-1:-1;32782:144:0;;;;;:::i;:::-;;:::i;28847:26::-;;;;;;;;;;;;;;;;33076:373;;;;;;;;;;-1:-1:-1;33076:373:0;;;;;:::i;:::-;;:::i;34385:123::-;;;;;;;;;;-1:-1:-1;34385:123:0;;;;;:::i;:::-;;:::i;31483:83::-;;;;;;;;;;;;;:::i;21328:79::-;;;;;;;;;;-1:-1:-1;21393:6:0;;-1:-1:-1;;;;;21393:6:0;21328:79;;7723:104;;;;;;;;;;;;;:::i;29181:59::-;;;;;;;;;;-1:-1:-1;29181:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28880:25;;;;;;;;;;;;;;;;33991:246;;;;;;;;;;-1:-1:-1;33991:246:0;;;;;:::i;:::-;;:::i;32552:98::-;;;;;;;;;;-1:-1:-1;32552:98:0;;;;;:::i;:::-;;:::i;11806:269::-;;;;;;;;;;-1:-1:-1;11806:269:0;;;;;:::i;:::-;;:::i;9134:175::-;;;;;;;;;;-1:-1:-1;9134:175:0;;;;;:::i;:::-;;:::i;28643:30::-;;;;;;;;;;;;;;;;29398:58;;;;;;;;;;-1:-1:-1;29398:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28134:33;;;;;;;;;;-1:-1:-1;28134:33:0;;;;-1:-1:-1;;;28134:33:0;;;;;;33851:132;;;;;;;;;;-1:-1:-1;33851:132:0;;;;;:::i;:::-;;:::i;33461:382::-;;;;;;;;;;-1:-1:-1;33461:382:0;;;;;:::i;:::-;;:::i;28359:40::-;;;;;;;;;;-1:-1:-1;28359:40:0;;;;;;;;27752:35;;;;;;;;;;;;;;;;28725:32;;;;;;;;;;;;;;;;31804:408;;;;;;;;;;-1:-1:-1;31804:408:0;;;;;:::i;:::-;;:::i;32934:134::-;;;;;;;;;;-1:-1:-1;32934:134:0;;;;;:::i;:::-;;:::i;28408:27::-;;;;;;;;;;;;;;;;9372:151;;;;;;;;;;-1:-1:-1;9372:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9488:18:0;;;9461:7;9488:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9372:151;27825:33;;;;;;;;;;;;;;;;28482:29;;;;;;;;;;;;;;;;28912:25;;;;;;;;;;;;;;;;22273:244;;;;;;;;;;-1:-1:-1;22273:244:0;;;;;:::i;:::-;;:::i;27794:24::-;;;;;;;;;;;;;;;;7504:100;7558:13;7591:5;7584:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7504:100;:::o;32658:112::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;;;;;;;;;32734:20:::1;:28:::0;;-1:-1:-1;;32734:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32658:112::o;9670:169::-;9753:4;9770:39;219:10;9793:7;9802:6;9770:8;:39::i;:::-;-1:-1:-1;9827:4:0;9670:169;;;;;:::o;32387:157::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;32478:1:::1;32468:6;:11;;32460:20;;;::::0;::::1;;32491:11;:20:::0;;;32522:14:::1;:12;:14::i;:::-;32387:157:::0;:::o;32224:155::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;32314:1:::1;32304:6;:11;;32296:20;;;::::0;::::1;;32327:10;:19:::0;;;32357:14:::1;:12;:14::i;10321:355::-:0;10461:4;10478:36;10488:6;10496:9;10507:6;10478:9;:36::i;:::-;10525:121;10534:6;219:10;10556:89;10594:6;10556:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10556:19:0;;;;;;:11;:19;;;;;;;;219:10;10556:33;;;;;;;;;;:37;:89::i;:::-;10525:8;:121::i;:::-;-1:-1:-1;10664:4:0;10321:355;;;;;:::o;11085:218::-;219:10;11173:4;11222:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11222:34:0;;;;;;;;;;11173:4;;11190:83;;11213:7;;11222:50;;11261:10;11222:38;:50::i;39989:138::-;-1:-1:-1;;;;;40102:16:0;;40055:7;40102:16;;;:7;:16;;;;;;40082:37;;:19;:37::i;21970:148::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;22061:6:::1;::::0;22040:40:::1;::::0;22077:1:::1;::::0;-1:-1:-1;;;;;22061:6:0::1;::::0;22040:40:::1;::::0;22077:1;;22040:40:::1;22091:6;:19:::0;;-1:-1:-1;;;;;;22091:19:0::1;::::0;;21970:148::o;31622:121::-;21540:6;;31674:4;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;-1:-1:-1;31691:14:0::1;:22:::0;;-1:-1:-1;;;;31691:22:0::1;::::0;;;31622:121;:::o;32782:144::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32872:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;32872:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32782:144::o;33076:373::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;33193:14:::1;:29:::0;;;33233:10:::1;:21:::0;;;33265:16:::1;:33:::0;;;33284:14;33324:27:::1;33246:8:::0;33210:12;33324:27:::1;:::i;:::-;:46;;;;:::i;:::-;33309:12;:61:::0;;;33405:2:::1;-1:-1:-1::0;33389:18:0::1;33381:60;;;::::0;-1:-1:-1;;;33381:60:0;;5573:2:1;33381:60:0::1;::::0;::::1;5555:21:1::0;5612:2;5592:18;;;5585:30;5651:31;5631:18;;;5624:59;5700:18;;33381:60:0::1;5371:353:1::0;33381:60:0::1;33076:373:::0;;;:::o;34385:123::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;34472:8:::1;:28:::0;;-1:-1:-1;;;;;34472:28:0;;::::1;;;-1:-1:-1::0;;;;;;34472:28:0;;::::1;::::0;;;::::1;::::0;;34385:123::o;31483:83::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;31538:13:::1;:20:::0;;-1:-1:-1;;;;31538:20:0::1;-1:-1:-1::0;;;31538:20:0::1;::::0;;31483:83::o;7723:104::-;7779:13;7812:7;7805:14;;;;;:::i;33991:246::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;34100:13:::1;-1:-1:-1::0;;;;;34092:21:0::1;:4;-1:-1:-1::0;;;;;34092:21:0::1;;;34084:91;;;::::0;-1:-1:-1;;;34084:91:0;;5931:2:1;34084:91:0::1;::::0;::::1;5913:21:1::0;5970:2;5950:18;;;5943:30;6009:34;5989:18;;;5982:62;6080:27;6060:18;;;6053:55;6125:19;;34084:91:0::1;5729:421:1::0;34084:91:0::1;-1:-1:-1::0;;;;;34328:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;34328:39:0;;;;;;;33991:246;;:::o;32552:98::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;32623:10:::1;:19:::0;32552:98::o;11806:269::-;11899:4;11916:129;219:10;11939:7;11948:96;11987:15;11948:96;;;;;;;;;;;;;;;;;219:10;11948:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11948:34:0;;;;;;;;;;;;:38;:96::i;9134:175::-;9220:4;9237:42;219:10;9261:9;9272:6;9237:9;:42::i;33851:132::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33936:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;33936:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33851:132::o;33461:382::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;33579:15:::1;:30:::0;;;33620:11:::1;:22:::0;;;33653:17:::1;:34:::0;;;33673:14;33714:29:::1;33634:8:::0;33597:12;33714:29:::1;:::i;:::-;:49;;;;:::i;:::-;33698:13;:65:::0;;;33799:2:::1;-1:-1:-1::0;33782:19:0::1;33774:61;;;::::0;-1:-1:-1;;;33774:61:0;;6357:2:1;33774:61:0::1;::::0;::::1;6339:21:1::0;6396:2;6376:18;;;6369:30;6435:31;6415:18;;;6408:59;6484:18;;33774:61:0::1;6155:353:1::0;31804:408:0;21540:6;;31885:4;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;31953:3:::1;31943:6;31923:13;39965:8:::0;;;39885:96;31923:13:::1;:17;::::0;31939:1:::1;31923:17;:::i;:::-;:26;;;;:::i;:::-;31922:34;;;;:::i;:::-;31909:9;:47;;31901:113;;;::::0;-1:-1:-1;;;31901:113:0;;7110:2:1;31901:113:0::1;::::0;::::1;7092:21:1::0;7149:2;7129:18;;;7122:30;7188:34;7168:18;;;7161:62;-1:-1:-1;;;7239:18:1;;;7232:51;7300:19;;31901:113:0::1;6908:417:1::0;31901:113:0::1;32074:3;32066:4;32046:13;39965:8:::0;;;39885:96;32046:13:::1;:17;::::0;32062:1:::1;32046:17;:::i;:::-;:24;;;;:::i;:::-;32045:32;;;;:::i;:::-;32032:9;:45;;32024:110;;;::::0;-1:-1:-1;;;32024:110:0;;7532:2:1;32024:110:0::1;::::0;::::1;7514:21:1::0;7571:2;7551:18;;;7544:30;7610:34;7590:18;;;7583:62;-1:-1:-1;;;7661:18:1;;;7654:50;7721:19;;32024:110:0::1;7330:416:1::0;32024:110:0::1;32165:19;:9:::0;32178:5:::1;32165:19;:::i;:::-;32144:18;:40:::0;-1:-1:-1;32201:4:0::1;21610:1;31804:408:::0;;;:::o;32934:134::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33019:34:0;;;::::1;;::::0;;;:26:::1;:34:::0;;;;;:41;;-1:-1:-1;;33019:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32934:134::o;22273:244::-;21540:6;;-1:-1:-1;;;;;21540:6:0;219:10;21540:22;21532:67;;;;-1:-1:-1;;;21532:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22362:22:0;::::1;22354:73;;;::::0;-1:-1:-1;;;22354:73:0;;7953:2:1;22354:73:0::1;::::0;::::1;7935:21:1::0;7992:2;7972:18;;;7965:30;8031:34;8011:18;;;8004:62;-1:-1:-1;;;8082:18:1;;;8075:36;8128:19;;22354:73:0::1;7751:402:1::0;22354:73:0::1;22464:6;::::0;22443:38:::1;::::0;-1:-1:-1;;;;;22443:38:0;;::::1;::::0;22464:6:::1;::::0;22443:38:::1;::::0;22464:6:::1;::::0;22443:38:::1;22492:6;:17:::0;;-1:-1:-1;;;;;;22492:17:0::1;-1:-1:-1::0;;;;;22492:17:0;;;::::1;::::0;;;::::1;::::0;;22273:244::o;16372:181::-;16430:7;;16462:5;16466:1;16462;:5;:::i;:::-;16450:17;;16491:1;16486;:6;;16478:46;;;;-1:-1:-1;;;16478:46:0;;8360:2:1;16478:46:0;;;8342:21:1;8399:2;8379:18;;;8372:30;8438:29;8418:18;;;8411:57;8485:18;;16478:46:0;8158:351:1;16478:46:0;16544:1;16372:181;-1:-1:-1;;;16372:181:0:o;14992:382::-;-1:-1:-1;;;;;15128:19:0;;15120:68;;;;-1:-1:-1;;;15120:68:0;;8716:2:1;15120:68:0;;;8698:21:1;8755:2;8735:18;;;8728:30;8794:34;8774:18;;;8767:62;-1:-1:-1;;;8845:18:1;;;8838:34;8889:19;;15120:68:0;8514:400:1;15120:68:0;-1:-1:-1;;;;;15207:21:0;;15199:68;;;;-1:-1:-1;;;15199:68:0;;9121:2:1;15199:68:0;;;9103:21:1;9160:2;9140:18;;;9133:30;9199:34;9179:18;;;9172:62;-1:-1:-1;;;9250:18:1;;;9243:32;9292:19;;15199:68:0;8919:398:1;15199:68:0;-1:-1:-1;;;;;15280:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15334:32;;2012:25:1;;;15334:32:0;;1985:18:1;15334:32:0;;;;;;;14992:382;;;:::o;34516:226::-;34606:3;34593:10;;34582:8;;:21;;;;:::i;:::-;:27;;;;:::i;:::-;34559:20;:50;34641:8;;34656:5;;34641:12;;34652:1;34641:12;:::i;:::-;:20;;;;:::i;:::-;34620:18;:41;34717:11;;34706:8;;34731:3;;34706:22;;;:::i;:::-;:28;;;;:::i;:::-;34694:9;:40;34516:226::o;34885:3683::-;-1:-1:-1;;;;;35017:18:0;;35009:68;;;;-1:-1:-1;;;35009:68:0;;9524:2:1;35009:68:0;;;9506:21:1;9563:2;9543:18;;;9536:30;9602:34;9582:18;;;9575:62;-1:-1:-1;;;9653:18:1;;;9646:35;9698:19;;35009:68:0;9322:401:1;35009:68:0;-1:-1:-1;;;;;35096:16:0;;35088:64;;;;-1:-1:-1;;;35088:64:0;;9930:2:1;35088:64:0;;;9912:21:1;9969:2;9949:18;;;9942:30;10008:34;9988:18;;;9981:62;-1:-1:-1;;;10059:18:1;;;10052:33;10102:19;;35088:64:0;9728:399:1;35088:64:0;35180:1;35171:6;:10;35163:64;;;;-1:-1:-1;;;35163:64:0;;10334:2:1;35163:64:0;;;10316:21:1;10373:2;10353:18;;;10346:30;10412:34;10392:18;;;10385:62;-1:-1:-1;;;10463:18:1;;;10456:39;10512:19;;35163:64:0;10132:405:1;35163:64:0;35244:14;;-1:-1:-1;;;35244:14:0;;;;35240:1514;;;21393:6;;-1:-1:-1;;;;;35297:15:0;;;21393:6;;35297:15;;;;:49;;-1:-1:-1;21393:6:0;;-1:-1:-1;;;;;35333:13:0;;;21393:6;;35333:13;;35297:49;:86;;;;-1:-1:-1;;;;;;35367:16:0;;;;35297:86;:128;;;;-1:-1:-1;;;;;;35404:21:0;;35418:6;35404:21;;35297:128;:158;;;;-1:-1:-1;35447:8:0;;;;35446:9;35297:158;35275:1468;;;35495:13;;-1:-1:-1;;;35495:13:0;;;;35490:150;;-1:-1:-1;;;;;35541:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;35570:23:0;;;;;;:19;:23;;;;;;;;35541:52;35533:87;;;;-1:-1:-1;;;35533:87:0;;10744:2:1;35533:87:0;;;10726:21:1;10783:2;10763:18;;;10756:30;-1:-1:-1;;;10802:18:1;;;10795:52;10864:18;;35533:87:0;10542:346:1;35533:87:0;35665:20;;;;35661:436;;;21393:6;;-1:-1:-1;;;;;35713:13:0;;;21393:6;;35713:13;;;;:47;;;35744:15;-1:-1:-1;;;;;35730:30:0;:2;-1:-1:-1;;;;;35730:30:0;;;35713:47;:79;;;;;35778:13;-1:-1:-1;;;;;35764:28:0;:2;-1:-1:-1;;;;;35764:28:0;;;35713:79;35709:369;;;35857:9;35828:39;;;;:28;:39;;;;;;35870:12;-1:-1:-1;35820:140:0;;;;-1:-1:-1;;;35820:140:0;;11095:2:1;35820:140:0;;;11077:21:1;11134:2;11114:18;;;11107:30;11173:34;11153:18;;;11146:62;11244:34;11224:18;;;11217:62;-1:-1:-1;;;11295:19:1;;;11288:40;11345:19;;35820:140:0;10893:477:1;35820:140:0;36044:10;;36029:25;;:12;:25;:::i;:::-;36016:9;35987:39;;;;:28;:39;;;;;:67;35709:369;-1:-1:-1;;;;;36150:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;36186:35:0;;;;;;:31;:35;;;;;;;;36185:36;36150:71;36146:216;;;36264:20;;36254:6;:30;;36246:96;;;;-1:-1:-1;;;36246:96:0;;11577:2:1;36246:96:0;;;11559:21:1;11616:2;11596:18;;;11589:30;11655:34;11635:18;;;11628:62;-1:-1:-1;;;11706:18:1;;;11699:51;11767:19;;36246:96:0;11375:417:1;36246:96:0;-1:-1:-1;;;;;36387:37:0;;;;;;:31;:37;;;;;;;;36382:179;;36467:20;;36457:6;:30;;36449:92;;;;-1:-1:-1;;;36449:92:0;;11999:2:1;36449:92:0;;;11981:21:1;12038:2;12018:18;;;12011:30;12077:34;12057:18;;;12050:62;-1:-1:-1;;;12128:18:1;;;12121:47;12185:19;;36449:92:0;11797:413:1;36449:92:0;-1:-1:-1;;;;;36586:30:0;;;;;;:26;:30;;;;;;;;36581:147;;36675:9;;36658:13;36668:2;36658:9;:13::i;:::-;36649:22;;:6;:22;:::i;:::-;:35;;36641:67;;;;-1:-1:-1;;;36641:67:0;;12417:2:1;36641:67:0;;;12399:21:1;12456:2;12436:18;;;12429:30;-1:-1:-1;;;12475:18:1;;;12468:49;12534:18;;36641:67:0;12215:343:1;36641:67:0;36760:28;36791:24;36809:4;36791:9;:24::i;:::-;36875:18;;36760:55;;-1:-1:-1;36851:42:0;;;;;;;36925:33;;-1:-1:-1;36950:8:0;;;;36949:9;36925:33;:82;;;;-1:-1:-1;;;;;;36976:31:0;;;;;;:25;:31;;;;;;;;36975:32;36925:82;:125;;;;-1:-1:-1;;;;;;37025:25:0;;;;;;:19;:25;;;;;;;;37024:26;36925:125;:166;;;;-1:-1:-1;;;;;;37068:23:0;;;;;;:19;:23;;;;;;;;37067:24;36925:166;36906:311;;;37118:8;:15;;-1:-1:-1;;37118:15:0;37129:4;37118:15;;;37162:10;:8;:10::i;:::-;37189:8;:16;;-1:-1:-1;;37189:16:0;;;36906:311;37245:8;;-1:-1:-1;;;;;37355:25:0;;37229:12;37355:25;;;:19;:25;;;;;;37245:8;;;;37244:9;;37355:25;;:52;;-1:-1:-1;;;;;;37384:23:0;;;;;;:19;:23;;;;;;;;37355:52;37351:100;;;-1:-1:-1;37434:5:0;37351:100;37471:12;37498:21;37541:7;37537:964;;;-1:-1:-1;;;;;37593:31:0;;;;;;:25;:31;;;;;;;;:65;;;;;37642:15;-1:-1:-1;;;;;37628:30:0;:2;-1:-1:-1;;;;;37628:30:0;;;37593:65;37589:527;;;37686:33;37715:3;37686:24;37697:12;;37686:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;37679:40;;37738:70;37755:6;37763:14;;37779:10;;37791:16;;37738;:70::i;:::-;37589:527;;;-1:-1:-1;;;;;37873:29:0;;;;;;:25;:29;;;;;;;;:65;;;;;37922:15;-1:-1:-1;;;;;37906:32:0;:4;-1:-1:-1;;;;;37906:32:0;;;37873:65;37869:247;;;37970:34;38000:3;37970:25;37981:13;;37970:6;:10;;:25;;;;:::i;:34::-;37963:41;;38027:73;38044:6;38052:15;;38069:11;;38082:17;;38027:16;:73::i;:::-;38136:8;;38132:327;;38165:44;38180:4;38194;38201;38207:1;38165:14;:44::i;:::-;38228:18;38265:20;;38249:13;;:36;;;;:::i;:::-;38228:57;-1:-1:-1;38323:14:0;;;;;38358:84;;38396:26;38411:10;38396:14;:26::i;:::-;38146:313;;38132:327;38475:14;38485:4;38475:14;;:::i;:::-;;;37537:964;38513:47;38528:4;38534:2;38538:6;38546:13;38513:14;:47::i;:::-;34998:3570;;;;;34885:3683;;;:::o;17275:192::-;17361:7;17397:12;17389:6;;;;17381:29;;;;-1:-1:-1;;;17381:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17421:9:0;17433:5;17437:1;17433;:5;:::i;:::-;17421:17;17275:192;-1:-1:-1;;;;;17275:192:0:o;40135:254::-;40202:7;40241;;40230;:18;;40222:73;;;;-1:-1:-1;;;40222:73:0;;12895:2:1;40222:73:0;;;12877:21:1;12934:2;12914:18;;;12907:30;12973:34;12953:18;;;12946:62;-1:-1:-1;;;13024:18:1;;;13017:40;13074:19;;40222:73:0;12693:406:1;40222:73:0;40306:19;40329:10;:8;:10::i;:::-;40306:33;-1:-1:-1;40357:24:0;:7;40306:33;40357:11;:24::i;39511:347::-;39550:23;39576:24;39594:4;39576:9;:24::i;:::-;39550:50;-1:-1:-1;39611:12:0;39647:20;39644:34;;39670:7;;39511:347::o;39644:34::-;39690:33;39707:15;39690:16;:33::i;:::-;39757:1;39737:17;:21;39802:8;;39794:56;;39802:8;;;;-1:-1:-1;;;;;39802:8:0;;39824:21;;39794:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39511:347:0:o;17726:471::-;17784:7;18029:6;18025:47;;-1:-1:-1;18059:1:0;18052:8;;18025:47;18084:9;18096:5;18100:1;18096;:5;:::i;:::-;18084:17;-1:-1:-1;18129:1:0;18120:5;18124:1;18084:17;18120:5;:::i;:::-;:10;18112:56;;;;-1:-1:-1;;;18112:56:0;;13516:2:1;18112:56:0;;;13498:21:1;13555:2;13535:18;;;13528:30;13594:34;13574:18;;;13567:62;-1:-1:-1;;;13645:18:1;;;13638:31;13686:19;;18112:56:0;13314:397:1;18673:132:0;18731:7;18758:39;18762:1;18765;18758:39;;;;;;;;;;;;;;;;;:3;:39::i;38576:318::-;38723:34;38753:3;38723:25;:7;38735:12;38723:11;:25::i;:34::-;38702:17;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;38785:30:0;;-1:-1:-1;38811:3:0;38785:21;:7;38797:8;38785:11;:21::i;:30::-;38768:13;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;38850:36:0;;-1:-1:-1;38882:3:0;38850:27;:7;38862:14;38850:11;:27::i;:36::-;38826:20;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;38576:318:0:o;40397:190::-;40520:59;40538:6;40546:9;40557:6;40565:13;40520:17;:59::i;:::-;40397:190;;;;:::o;42754:248::-;42814:55;42837:4;28016:6;42857:7;42866:2;42814:14;:55::i;:::-;42892:14;:7;42904:1;42892:11;:14::i;:::-;42880:8;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;42940:1:0;42917:20;:24;;;42952:13;:17;42980:14;:12;:14::i;42313:163::-;42354:7;42375:15;42392;42411:19;:17;:19::i;:::-;42374:56;;-1:-1:-1;42374:56:0;-1:-1:-1;42448:20:0;42374:56;;42448:11;:20::i;:::-;42441:27;;;;42313:163;:::o;38902:601::-;39054:16;;;39068:1;39054:16;;;;;;;;39030:21;;39054:16;;;;;;;;;;-1:-1:-1;39054:16:0;39030:40;;39099:4;39081;39086:1;39081:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39081:23:0;;;-1:-1:-1;;;;;39081:23:0;;;;;39125:15;-1:-1:-1;;;;;39125:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39115:4;39120:1;39115:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;39115:32:0;;;-1:-1:-1;;;;;39115:32:0;;;;;39160:62;39177:4;39192:15;39210:11;39160:8;:62::i;:::-;39261:224;;-1:-1:-1;;;39261:224:0;;-1:-1:-1;;;;;39261:15:0;:66;;;;:224;;39342:11;;39368:1;;39412:4;;39439;;39459:15;;39261:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38957:546;38902:601;:::o;19301:278::-;19387:7;19422:12;19415:5;19407:28;;;;-1:-1:-1;;;19407:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19446:9:0;19458:5;19462:1;19458;:5;:::i;40595:483::-;40717:15;40734:23;40759:12;40773:23;40798:12;40814:34;40825:7;40834:13;40814:10;:34::i;:::-;-1:-1:-1;;;;;40877:15:0;;;;;;:7;:15;;;;;;40716:132;;-1:-1:-1;40716:132:0;;-1:-1:-1;40716:132:0;;-1:-1:-1;40716:132:0;-1:-1:-1;40716:132:0;-1:-1:-1;40877:28:0;;40716:132;40877:19;:28::i;:::-;-1:-1:-1;;;;;40859:15:0;;;;;;;:7;:15;;;;;;:46;;;;40937:18;;;;;;;:39;;40960:15;40937:22;:39::i;:::-;-1:-1:-1;;;;;40916:18:0;;;;;;:7;:18;;;;;:60;40987:23;40999:4;41005;40987:11;:23::i;:::-;41043:9;-1:-1:-1;;;;;41026:44:0;41035:6;-1:-1:-1;;;;;41026:44:0;;41054:15;41026:44;;;;2012:25:1;;2000:2;1985:18;;1866:177;41026:44:0;;;;;;;;40705:373;;;;;40595:483;;;;:::o;42484:258::-;42581:7;;42534;;;;27605:14;42651:20;42581:7;27605:14;42651:11;:20::i;:::-;42641:7;:30;42637:61;;;-1:-1:-1;;42681:7:0;;;27605:14;;-1:-1:-1;42484:258:0;-1:-1:-1;42484:258:0:o;42637:61::-;42717:7;;42726;;-1:-1:-1;42484:258:0;-1:-1:-1;42484:258:0:o;41241:449::-;41323:7;41332;41341;41350;41359;41380:23;41405:12;41421:35;41433:7;41442:13;41421:11;:35::i;:::-;41379:77;;;;41467:19;41490:10;:8;:10::i;:::-;41467:33;;41512:15;41529:23;41554:12;41570:39;41582:7;41591:4;41597:11;41570;:39::i;:::-;41511:98;;;;-1:-1:-1;41511:98:0;;-1:-1:-1;41660:15:0;;-1:-1:-1;41677:4:0;;-1:-1:-1;41241:449:0;;-1:-1:-1;;;;;;;41241:449:0:o;16836:136::-;16894:7;16921:43;16925:1;16928;16921:43;;;;;;;;;;;;;;;;;:3;:43::i;41086:147::-;41164:7;;:17;;41176:4;41164:11;:17::i;:::-;41154:7;:27;41205:10;;:20;;41220:4;41205:14;:20::i;:::-;41192:10;:33;-1:-1:-1;;41086:147:0:o;41698:265::-;41781:7;;;41825:35;41856:3;41825:26;:7;41837:13;41825:11;:26::i;:35::-;41810:50;-1:-1:-1;41871:23:0;41897:17;:7;41810:50;41897:11;:17::i;:::-;41871:43;41950:4;;-1:-1:-1;41698:265:0;;-1:-1:-1;;;;41698:265:0:o;41971:334::-;42066:7;;;;42122:24;:7;42134:11;42122;:24::i;:::-;42104:42;-1:-1:-1;42157:12:0;42172:21;:4;42181:11;42172:8;:21::i;:::-;42157:36;-1:-1:-1;42204:23:0;42230:17;:7;42157:36;42230:11;:17::i;:::-;42266:7;;;;-1:-1:-1;42292:4:0;;-1:-1:-1;41971:334:0;;-1:-1:-1;;;;;41971:334:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:160::-;681:20;;737:13;;730:21;720:32;;710:60;;766:1;763;756:12;781:180;837:6;890:2;878:9;869:7;865:23;861:32;858:52;;;906:1;903;896:12;858:52;929:26;945:9;929:26;:::i;966:131::-;-1:-1:-1;;;;;1041:31:1;;1031:42;;1021:70;;1087:1;1084;1077:12;1102:315;1170:6;1178;1231:2;1219:9;1210:7;1206:23;1202:32;1199:52;;;1247:1;1244;1237:12;1199:52;1286:9;1273:23;1305:31;1330:5;1305:31;:::i;:::-;1355:5;1407:2;1392:18;;;;1379:32;;-1:-1:-1;;;1102:315:1:o;1614:247::-;1673:6;1726:2;1714:9;1705:7;1701:23;1697:32;1694:52;;;1742:1;1739;1732:12;1694:52;1781:9;1768:23;1800:31;1825:5;1800:31;:::i;2048:180::-;2107:6;2160:2;2148:9;2139:7;2135:23;2131:32;2128:52;;;2176:1;2173;2166:12;2128:52;-1:-1:-1;2199:23:1;;2048:180;-1:-1:-1;2048:180:1:o;2468:456::-;2545:6;2553;2561;2614:2;2602:9;2593:7;2589:23;2585:32;2582:52;;;2630:1;2627;2620:12;2582:52;2669:9;2656:23;2688:31;2713:5;2688:31;:::i;:::-;2738:5;-1:-1:-1;2795:2:1;2780:18;;2767:32;2808:33;2767:32;2808:33;:::i;:::-;2468:456;;2860:7;;-1:-1:-1;;;2914:2:1;2899:18;;;;2886:32;;2468:456::o;3326:315::-;3391:6;3399;3452:2;3440:9;3431:7;3427:23;3423:32;3420:52;;;3468:1;3465;3458:12;3420:52;3507:9;3494:23;3526:31;3551:5;3526:31;:::i;:::-;3576:5;-1:-1:-1;3600:35:1;3631:2;3616:18;;3600:35;:::i;:::-;3590:45;;3326:315;;;;;:::o;3646:316::-;3723:6;3731;3739;3792:2;3780:9;3771:7;3767:23;3763:32;3760:52;;;3808:1;3805;3798:12;3760:52;-1:-1:-1;;3831:23:1;;;3901:2;3886:18;;3873:32;;-1:-1:-1;3952:2:1;3937:18;;;3924:32;;3646:316;-1:-1:-1;3646:316:1:o;3967:388::-;4035:6;4043;4096:2;4084:9;4075:7;4071:23;4067:32;4064:52;;;4112:1;4109;4102:12;4064:52;4151:9;4138:23;4170:31;4195:5;4170:31;:::i;:::-;4220:5;-1:-1:-1;4277:2:1;4262:18;;4249:32;4290:33;4249:32;4290:33;:::i;:::-;4342:7;4332:17;;;3967:388;;;;;:::o;4360:380::-;4439:1;4435:12;;;;4482;;;4503:61;;4557:4;4549:6;4545:17;4535:27;;4503:61;4610:2;4602:6;4599:14;4579:18;4576:38;4573:161;;;4656:10;4651:3;4647:20;4644:1;4637:31;4691:4;4688:1;4681:15;4719:4;4716:1;4709:15;4573:161;;4360:380;;;:::o;4745:356::-;4947:2;4929:21;;;4966:18;;;4959:30;5025:34;5020:2;5005:18;;4998:62;5092:2;5077:18;;4745:356::o;5106:127::-;5167:10;5162:3;5158:20;5155:1;5148:31;5198:4;5195:1;5188:15;5222:4;5219:1;5212:15;5238:128;5278:3;5309:1;5305:6;5302:1;5299:13;5296:39;;;5315:18;;:::i;:::-;-1:-1:-1;5351:9:1;;5238:128::o;6513:168::-;6553:7;6619:1;6615;6611:6;6607:14;6604:1;6601:21;6596:1;6589:9;6582:17;6578:45;6575:71;;;6626:18;;:::i;:::-;-1:-1:-1;6666:9:1;;6513:168::o;6686:217::-;6726:1;6752;6742:132;;6796:10;6791:3;6787:20;6784:1;6777:31;6831:4;6828:1;6821:15;6859:4;6856:1;6849:15;6742:132;-1:-1:-1;6888:9:1;;6686:217::o;12563:125::-;12603:4;12631:1;12628;12625:8;12622:34;;;12636:18;;:::i;:::-;-1:-1:-1;12673:9:1;;12563:125::o;13848:127::-;13909:10;13904:3;13900:20;13897:1;13890:31;13940:4;13937:1;13930:15;13964:4;13961:1;13954:15;13980:251;14050:6;14103:2;14091:9;14082:7;14078:23;14074:32;14071:52;;;14119:1;14116;14109:12;14071:52;14151:9;14145:16;14170:31;14195:5;14170:31;:::i;14236:980::-;14498:4;14546:3;14535:9;14531:19;14577:6;14566:9;14559:25;14603:2;14641:6;14636:2;14625:9;14621:18;14614:34;14684:3;14679:2;14668:9;14664:18;14657:31;14708:6;14743;14737:13;14774:6;14766;14759:22;14812:3;14801:9;14797:19;14790:26;;14851:2;14843:6;14839:15;14825:29;;14872:1;14882:195;14896:6;14893:1;14890:13;14882:195;;;14961:13;;-1:-1:-1;;;;;14957:39:1;14945:52;;15052:15;;;;15017:12;;;;14993:1;14911:9;14882:195;;;-1:-1:-1;;;;;;;15133:32:1;;;;15128:2;15113:18;;15106:60;-1:-1:-1;;;15197:3:1;15182:19;15175:35;15094:3;14236:980;-1:-1:-1;;;14236:980:1:o
Swarm Source
ipfs://348b7f9763662a0e82affa8642af82f2434b7883076dab6ecc744840802bb48b
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.