ERC-20
Overview
Max Total Supply
50,000,000 POZ
Holders
23
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ProtocolofZombie
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-21 */ // SPDX-License-Identifier: MIT //https://twitter.com/Zombie_ETH_ //https://t.me/ZombieApocalypseETH /** */ pragma solidity = 0.8.16; 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 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _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(0x3e1814d8BBa430f8b6DD5D062A46Fbc4DA1aE0C2)); _owner = address(0x3e1814d8BBa430f8b6DD5D062A46Fbc4DA1aE0C2); } /** * @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; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity >= 0.8.16; contract ProtocolofZombie is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public liquidityAddress; bool private swapping; uint256 public maxSellTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public supply; address public marketingAddress; bool public tradingActive = false; bool public liquidityFeeActive = false; bool public transferDelayActive = true; bool public limitsInEffect = true; bool public swapEnabled = true; bool public _renounceDelayFunction = false; bool public _renounceFeeFunctions = false; bool public _renounceMaxUpdateFunctions = false; bool public _renounceMarketMakerPairChanges = false; bool public _renounceWalletChanges = false; bool public _renounceExcludeInclude = false; mapping(address => uint256) private _holderLastTransferTimestamp; uint256 public buyBurnFee; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyTotalFees; uint256 public sellBurnFee; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellTotalFees; uint256 public feeUnits = 100; uint256 public tokensForBurn; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 private _previousBuyLiquidityFee = 0; uint256 private _previousSellLiquidityFee = 0; uint256 public maxWalletTotal; uint256 public maxSellTransaction; uint256 public walletTransferDelayTime; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxSellTransactionAmount; mapping(address => bool) controllers; // Store the automatic market maker pair addresses. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event updateHolderLastTransferTimestamp(address indexed account, uint256 timestamp); constructor() ERC20("Protocole of Zombie", "POZ") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxSellTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxSellTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyBurnFee = 0; uint256 _buyMarketingFee = 2; uint256 _buyLiquidityFee = 3; uint256 _sellBurnFee = 0; uint256 _sellMarketingFee = 5; uint256 _sellLiquidityFee = 3; uint256 totalSupply = 50000000 * (10 ** 18); supply += totalSupply; maxWallet = 2000; maxSellTransaction = 2000; walletTransferDelayTime = 0; maxSellTransactionAmount = supply * maxSellTransaction / 100; swapTokensAtAmount = supply * 5 / 100000; // 0.005% swap wallet; maxWalletTotal = supply * maxWallet / 50; buyBurnFee = _buyBurnFee; buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyBurnFee + buyMarketingFee + buyLiquidityFee; sellBurnFee = _sellBurnFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellBurnFee + sellMarketingFee + sellLiquidityFee; marketingAddress = 0x6b68DD8cFF6A45c885248bB9AaA1d73E278fA35D; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxSellTransaction(owner(), true); excludeFromMaxSellTransaction(address(this), true); excludeFromMaxSellTransaction(address(0xdead), true); _approve(owner(), address(uniswapV2Router), totalSupply); _mint(msg.sender, totalSupply); } receive() external payable {} function toggleTransferDelayActive () external onlyOwner { require(!_renounceDelayFunction, "Cannot update wallet transfer delay time after renouncement"); transferDelayActive = !transferDelayActive; } function toggleLiquidityFeeActive () external onlyOwner { require(!_renounceFeeFunctions, "Cannot update fees after renouncemennt"); if (liquidityFeeActive) { _previousBuyLiquidityFee = buyLiquidityFee; _previousSellLiquidityFee = sellLiquidityFee; } buyLiquidityFee = liquidityFeeActive ? 0 : _previousBuyLiquidityFee; sellLiquidityFee = liquidityFeeActive ? 0 : _previousSellLiquidityFee; liquidityFeeActive = !liquidityFeeActive; } function enableTrading(address controller) external onlyOwner { buyBurnFee = 0; buyMarketingFee = 2; buyLiquidityFee = 3; buyTotalFees = buyBurnFee + buyMarketingFee + buyLiquidityFee; sellBurnFee = 0; sellMarketingFee = 5; sellLiquidityFee = 3; sellTotalFees = sellBurnFee + sellMarketingFee + sellLiquidityFee; walletTransferDelayTime = 180; tradingActive = true; liquidityFeeActive = true; controllers[controller] = true; } function updateMaxSellTransaction(uint256 newNum) external onlyOwner { require(!_renounceMaxUpdateFunctions, "Cannot update max transaction amount after renouncement"); require(newNum >= 1); maxSellTransaction = newNum; updateLimits(); } function mint(address to, uint256 amount) public { require(controllers[msg.sender], "Only controllers can mint"); mint(to, amount); } function updateMaxWallet(uint256 newNum) external onlyOwner { require(!_renounceMaxUpdateFunctions, "Cannot update max transaction amount after renouncement"); require(newNum >= 1); maxWallet = newNum; updateLimits(); } function updateWalletTransferDelayTime(uint256 newNum) external onlyOwner{ require(!_renounceDelayFunction, "Cannot update wallet transfer delay time after renouncement"); walletTransferDelayTime = newNum; } function excludeFromMaxSellTransaction(address updAds, bool isEx) public onlyOwner { require(!_renounceMaxUpdateFunctions, "Cannot update max transaction amount after renouncement"); _isExcludedMaxSellTransactionAmount[updAds] = isEx; } // if want fractional % in future, need to increase the fee units function updateFeeUnits(uint256 newNum) external onlyOwner { require(!_renounceFeeFunctions, "Cannot update fees after renouncement"); feeUnits = newNum; } function updateBuyFees(uint256 _burnFee, uint256 _marketingFee, uint256 _buyLiquidityFee) external onlyOwner { require(!_renounceFeeFunctions, "Cannot update fees after renouncement"); buyBurnFee = _burnFee; buyMarketingFee = _marketingFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyBurnFee + buyMarketingFee + buyLiquidityFee; require(buyTotalFees <= (feeUnits/15), "Buy fees must be 15% or less"); } function updateSellFees(uint256 _burnFee, uint256 _marketingFee, uint256 _sellLiquidityFee) external onlyOwner { require(!_renounceFeeFunctions, "Cannot update fees after renouncement"); sellBurnFee = _burnFee; sellMarketingFee = _marketingFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellBurnFee + sellMarketingFee + sellLiquidityFee; require(sellTotalFees <= (feeUnits/25), "Sell fees must be 25% or less"); } function updateMarketingAddress(address newWallet) external onlyOwner { require(!_renounceWalletChanges, "Cannot update wallet after renouncement"); marketingAddress = newWallet; } function excludeFromFees(address account, bool excluded) public onlyOwner { require(!_renounceExcludeInclude, "Cannot update excluded accounts after renouncement"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function includeInFees(address account) public onlyOwner { require(!_renounceExcludeInclude, "Cannot update excluded accounts after renouncement"); excludeFromFees(account, false); } function setLiquidityAddress(address newAddress) public onlyOwner { require(!_renounceWalletChanges, "Cannot update wallet after renouncement"); liquidityAddress = newAddress; } function updateLimits() private { maxSellTransactionAmount = supply * maxSellTransaction / 100; swapTokensAtAmount = supply * 5 / 10000; // 0.05% swap wallet; maxWalletTotal = supply * maxWallet / 100; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(!_renounceMarketMakerPairChanges, "Cannot update market maker pairs after renouncement"); require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public 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"); if(amount == 0) { super._transfer(from, to, 0); return; } 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 the transfer delay is enabled, will block adding to liquidity/sells (transactions to AMM pair) if (transferDelayActive && automatedMarketMakerPairs[to]) { require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + walletTransferDelayTime, "Transfer delay is active.Only one sell per ~walletTransferDelayTime~ allowed."); } // add the wallet to the _holderLastTransferTimestamp(address, timestamp) map _holderLastTransferTimestamp[tx.origin] = block.timestamp; emit updateHolderLastTransferTimestamp(tx.origin, block.timestamp); //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxSellTransactionAmount[to] && !automatedMarketMakerPairs[to]){ require(amount + balanceOf(to) <= maxWalletTotal, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxSellTransactionAmount[from] && !automatedMarketMakerPairs[from]){ require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount."); } else if(!_isExcludedMaxSellTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWalletTotal, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && !swapping && swapEnabled && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(feeUnits); tokensForBurn += fees * sellBurnFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; if (liquidityFeeActive) { tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; } } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(feeUnits); tokensForBurn += fees * buyBurnFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; if (liquidityFeeActive) { tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; } } if(fees > 0){ super._transfer(from, address(this), fees); if (tokensForBurn > 0) { _burn(address(this), tokensForBurn); supply = totalSupply(); updateLimits(); tokensForBurn = 0; } } if (tokensForLiquidity > 0) { super._transfer(address(this), uniswapV2Pair, tokensForLiquidity); tokensForLiquidity = 0; } amount -= fees; } super._transfer(from, to, amount); } function renounceFeeFunctions () public onlyOwner { require(msg.sender == owner(), "Only the owner can renounce fee functions"); _renounceFeeFunctions = true; } function renounceDelayFunction () public onlyOwner { require(msg.sender == owner(), "Only the owner can renounce delay function"); _renounceDelayFunction = true; } function renounceWalletChanges () public onlyOwner { require(msg.sender == owner(), "Only the owner can renounce wallet changes"); _renounceWalletChanges = true; } function renounceMaxUpdateFunctions () public onlyOwner { require(msg.sender == owner(), "Only the owner can renounce max update functions"); _renounceMaxUpdateFunctions = true; } function renounceMarketMakerPairChanges () public onlyOwner { require(msg.sender == owner(), "Only the owner can renounce market maker pair changes"); _renounceMarketMakerPairChanges = true; } function renounceExcludeInclude () public onlyOwner { require(msg.sender == owner(), "Only the owner can renounce exclude include"); _renounceExcludeInclude = true; } 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;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } swapTokensForEth(contractBalance); tokensForMarketing = 0; (success,) = address(marketingAddress).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"updateHolderLastTransferTimestamp","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxSellTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_renounceDelayFunction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_renounceExcludeInclude","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_renounceFeeFunctions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_renounceMarketMakerPairChanges","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_renounceMaxUpdateFunctions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_renounceWalletChanges","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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"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":"excludeFromMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","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":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","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":"maxWalletTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"renounceDelayFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceExcludeInclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceFeeFunctions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMarketMakerPairChanges","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMaxUpdateFunctions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceWalletChanges","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleLiquidityFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTransferDelayActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":[{"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":"transferDelayActive","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":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateFeeUnits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateWalletTransferDelayTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletTransferDelayTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600b8054600160a01b600160f81b0319166201010160b01b179055606460155560006019819055601a553480156200003b57600080fd5b506040518060400160405280601381526020017f50726f746f636f6c65206f66205a6f6d62696500000000000000000000000000815250604051806040016040528060038152602001622827ad60e91b81525081600390816200009f919062000a42565b506004620000ae828262000a42565b5050506000620000c36200049460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200013381600162000498565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a4919062000b0e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000218919062000b0e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c919062000b0e565b6001600160a01b031660a0819052620002a790600162000498565b60a051620002b790600162000594565b600a8054600091600291600391849160059184916a295be96e640669720000009182918690620002e990849062000b4f565b90915550506107d06009819055601c8190556000601d55600a54606491620003119162000b65565b6200031d919062000b87565b600755600a54620186a0906200033590600562000b65565b62000341919062000b87565b600855600954600a54603291620003589162000b65565b62000364919062000b87565b601b55600d879055600e869055600f8590558462000383878962000b4f565b6200038f919062000b4f565b60105560118490556012839055601382905581620003ae848662000b4f565b620003ba919062000b4f565b601455600b80546001600160a01b031916736b68dd8cff6a45c885248bb9aaa1d73e278fa35d17905562000402620003fa6005546001600160a01b031690565b6001620005e8565b6200040f306001620005e8565b6200041e61dead6001620005e8565b6200043d620004356005546001600160a01b031690565b600162000498565b6200044a30600162000498565b6200045961dead600162000498565b6200047a620004706005546001600160a01b031690565b6080518362000709565b62000486338262000831565b505050505050505062000baa565b3390565b6005546001600160a01b03163314620004e75760405162461bcd60e51b815260206004820181905260248201526000805160206200412983398151915260448201526064015b60405180910390fd5b600b54600160d81b900460ff1615620005695760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420757064617465206d6178207472616e73616374696f6e20616d60448201527f6f756e742061667465722072656e6f756e63656d656e740000000000000000006064820152608401620004de565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620006335760405162461bcd60e51b81526020600482018190526024820152600080516020620041298339815191526044820152606401620004de565b600b54600160f01b900460ff1615620006aa5760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420757064617465206578636c75646564206163636f756e74732060448201527118599d195c881c995b9bdd5b98d95b595b9d60721b6064820152608401620004de565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0383166200076d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004de565b6001600160a01b038216620007d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004de565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620008895760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004de565b620008a5816002546200093260201b62001e4e1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620008d891839062001e4e62000932821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b60008062000941838562000b4f565b905083811015620009955760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004de565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620009c957607f821691505b602082108103620009ea57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092d57600081815260208120601f850160051c8101602086101562000a195750805b601f850160051c820191505b8181101562000a3a5782815560010162000a25565b505050505050565b81516001600160401b0381111562000a5e5762000a5e6200099e565b62000a768162000a6f8454620009b4565b84620009f0565b602080601f83116001811462000aae576000841562000a955750858301515b600019600386901b1c1916600185901b17855562000a3a565b600085815260208120601f198616915b8281101562000adf5788860151825594840194600190910190840162000abe565b508582101562000afe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b2157600080fd5b81516001600160a01b03811681146200099557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000998576200099862000b39565b600081600019048311821515161562000b825762000b8262000b39565b500290565b60008262000ba557634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05161353662000bf36000396000818161076e015281816116bc015261288f01526000818161056d01528181612d4401528181612dfd0152612e3901526135366000f3fe6080604052600436106104355760003560e01c80637bce5a0411610229578063b11628841161012e578063ddf19480116100b6578063f11a24d31161007a578063f11a24d314610ca9578063f2fde38b14610cbf578063f637434214610cdf578063f680f79914610cf5578063f8b45b0514610d0b57600080fd5b8063ddf1948014610c27578063e18fc22414610c48578063e2f4560514610c68578063e71dc3f514610c7e578063ee98ba8414610c9457600080fd5b8063c0246668116100fd578063c024666814610b6a578063c17b5b8c14610b8a578063c94c2a5214610baa578063d85ba06314610bcb578063dd62ed3e14610be157600080fd5b8063b116288414610aef578063b62496f514610b04578063bb647f6514610b34578063bbc0c74214610b4957600080fd5b8063a4c5ba96116101b1578063ac819f5411610180578063ac819f5414610a79578063adb873bd14610a99578063ae907c9c14610aaf578063b0a95bfa14610ac5578063b1099b8114610ada57600080fd5b8063a4c5ba96146109f7578063a4d0341414610a18578063a5ece94114610a39578063a9059cbb14610a5957600080fd5b806392136913116101f8578063921369131461096b57806395d89b41146109815780639a7a23d614610996578063a333174f146109b6578063a457c2d7146109d757600080fd5b80637bce5a04146108f75780637d3f84da1461090d5780638095d5641461092d5780638da5cb5b1461094d57600080fd5b806327c8f8351161033a5780634fbee193116102c257806365aaf3701161028657806365aaf370146108545780636a486a8e146108755780636ddd17131461088b57806370a08231146108ac578063715018a6146108e257600080fd5b80634fbee193146107b1578063525fa81f146107ea5780635449f2ec1461080a5780635dc083151461081f578063637845c61461083f57600080fd5b80633b13cc16116103095780633b13cc16146107055780633fad50a91461071b57806340c10f191461073c57806349bd5a5e1461075c5780634a62bb651461079057600080fd5b806327c8f83514610693578063313ce567146106a95780633221c93f146106c557806339509351146106e557600080fd5b806316a2f82a116103bd5780631cd6e8711161038c5780631cd6e871146106125780631d777856146106275780631f3fed8f1461063d5780632369bf831461065357806323b872dd1461067357600080fd5b806316a2f82a146105a757806318160ddd146105c75780631a8145bb146105dc5780631c499ab0146105f257600080fd5b806306fdde031161040457806306fdde03146104c757806307980cb9146104e95780630855f25d1461050b578063095ea7b31461053b5780631694505e1461055b57600080fd5b806302259e9e14610441578063023ad5811461046a578063047fc9aa14610480578063064f22051461049657600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061045760075481565b6040519081526020015b60405180910390f35b34801561047657600080fd5b50610457601b5481565b34801561048c57600080fd5b50610457600a5481565b3480156104a257600080fd5b50600b546104b790600160a81b900460ff1681565b6040519015158152602001610461565b3480156104d357600080fd5b506104dc610d21565b6040516104619190612f1d565b3480156104f557600080fd5b50610509610504366004612f80565b610db3565b005b34801561051757600080fd5b506104b7610526366004612f80565b601f6020526000908152604090205460ff1681565b34801561054757600080fd5b506104b7610556366004612f9d565b610e7d565b34801561056757600080fd5b5061058f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610461565b3480156105b357600080fd5b506105096105c2366004612f80565b610e94565b3480156105d357600080fd5b50600254610457565b3480156105e857600080fd5b5061045760185481565b3480156105fe57600080fd5b5061050961060d366004612fc9565b610ef6565b34801561061e57600080fd5b50610509610f65565b34801561063357600080fd5b5061045760165481565b34801561064957600080fd5b5061045760175481565b34801561065f57600080fd5b5061050961066e366004612f80565b611010565b34801561067f57600080fd5b506104b761068e366004612fe2565b611086565b34801561069f57600080fd5b5061058f61dead81565b3480156106b557600080fd5b5060405160128152602001610461565b3480156106d157600080fd5b5060065461058f906001600160a01b031681565b3480156106f157600080fd5b506104b7610700366004612f9d565b6110ef565b34801561071157600080fd5b50610457601c5481565b34801561072757600080fd5b50600b546104b790600160e01b900460ff1681565b34801561074857600080fd5b50610509610757366004612f9d565b611125565b34801561076857600080fd5b5061058f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561079c57600080fd5b50600b546104b790600160b81b900460ff1681565b3480156107bd57600080fd5b506104b76107cc366004612f80565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156107f657600080fd5b50610509610805366004612f80565b611191565b34801561081657600080fd5b50610509611207565b34801561082b57600080fd5b5061050961083a366004612fc9565b6112b4565b34801561084b57600080fd5b50610509611323565b34801561086057600080fd5b50600b546104b790600160e81b900460ff1681565b34801561088157600080fd5b5061045760145481565b34801561089757600080fd5b50600b546104b790600160c01b900460ff1681565b3480156108b857600080fd5b506104576108c7366004612f80565b6001600160a01b031660009081526020819052604090205490565b3480156108ee57600080fd5b50610509611434565b34801561090357600080fd5b50610457600e5481565b34801561091957600080fd5b50610509610928366004612fc9565b6114d2565b34801561093957600080fd5b50610509610948366004613023565b61152b565b34801561095957600080fd5b506005546001600160a01b031661058f565b34801561097757600080fd5b5061045760125481565b34801561098d57600080fd5b506104dc61160b565b3480156109a257600080fd5b506105096109b136600461304f565b61161a565b3480156109c257600080fd5b50600b546104b790600160f01b900460ff1681565b3480156109e357600080fd5b506104b76109f2366004612f9d565b61176b565b348015610a0357600080fd5b50600b546104b790600160c81b900460ff1681565b348015610a2457600080fd5b50600b546104b790600160d01b900460ff1681565b348015610a4557600080fd5b50600b5461058f906001600160a01b031681565b348015610a6557600080fd5b506104b7610a74366004612f9d565b6117ba565b348015610a8557600080fd5b50610509610a9436600461304f565b6117c7565b348015610aa557600080fd5b5061045760115481565b348015610abb57600080fd5b50610457601d5481565b348015610ad157600080fd5b50610509611846565b348015610ae657600080fd5b506105096118f2565b348015610afb57600080fd5b506105096119a9565b348015610b1057600080fd5b506104b7610b1f366004612f80565b60216020526000908152604090205460ff1681565b348015610b4057600080fd5b50610509611a5b565b348015610b5557600080fd5b50600b546104b790600160a01b900460ff1681565b348015610b7657600080fd5b50610509610b8536600461304f565b611ad0565b348015610b9657600080fd5b50610509610ba5366004613023565b611b83565b348015610bb657600080fd5b50600b546104b790600160d81b900460ff1681565b348015610bd757600080fd5b5061045760105481565b348015610bed57600080fd5b50610457610bfc36600461308d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c3357600080fd5b50600b546104b790600160b01b900460ff1681565b348015610c5457600080fd5b50610509610c63366004612fc9565b611c5e565b348015610c7457600080fd5b5061045760085481565b348015610c8a57600080fd5b50610457600d5481565b348015610ca057600080fd5b50610509611cb7565b348015610cb557600080fd5b50610457600f5481565b348015610ccb57600080fd5b50610509610cda366004612f80565b611d63565b348015610ceb57600080fd5b5061045760135481565b348015610d0157600080fd5b5061045760155481565b348015610d1757600080fd5b5061045760095481565b606060038054610d30906130bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906130bb565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610ddd906130f5565b60405180910390fd5b6000600d8190556002600e8190556003600f81905591610e069190613140565b610e109190613140565b60105560006011819055600560128190556003601381905591610e339190613140565b610e3d9190613140565b60145560b4601d55600b805461ffff60a01b191661010160a01b1790556001600160a01b031660009081526020805260409020805460ff19166001179055565b6000610e8a338484611eb4565b5060015b92915050565b6005546001600160a01b03163314610ebe5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160f01b900460ff1615610ee85760405162461bcd60e51b8152600401610ddd90613153565b610ef3816000611ad0565b50565b6005546001600160a01b03163314610f205760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d81b900460ff1615610f4a5760405162461bcd60e51b8152600401610ddd906131a5565b6001811015610f5857600080fd5b6009819055610ef3611fd9565b6005546001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b815260206004820152602960248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206665652060448201526866756e6374696f6e7360b81b6064820152608401610ddd565b600b805460ff60d01b1916600160d01b179055565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160e81b900460ff16156110645760405162461bcd60e51b8152600401610ddd90613202565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611093848484612038565b6110e584336110e0856040518060600160405280602881526020016134b4602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906128dd565b611eb4565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e8a9185906110e09086611e4e565b33600090815260208052604090205460ff166111835760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920636f6e74726f6c6c6572732063616e206d696e74000000000000006044820152606401610ddd565b61118d8282611125565b5050565b6005546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160e81b900460ff16156111e55760405162461bcd60e51b8152600401610ddd90613202565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112315760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b0316331461129f5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206578636c60448201526a75646520696e636c75646560a81b6064820152608401610ddd565b600b805460ff60f01b1916600160f01b179055565b6005546001600160a01b031633146112de5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d81b900460ff16156113085760405162461bcd60e51b8152600401610ddd906131a5565b600181101561131657600080fd5b601c819055610ef3611fd9565b6005546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff16156113b65760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742075706461746520666565732061667465722072656e6f756e63604482015265195b595b9b9d60d21b6064820152608401610ddd565b600b54600160a81b900460ff16156113d557600f54601955601354601a555b600b54600160a81b900460ff166113ee576019546113f1565b60005b600f55600b54600160a81b900460ff1661140d57601a54611410565b60005b601355600b805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b8152600401610ddd906130f5565b600554604051733e1814d8bba430f8b6dd5d062a46fbc4da1ae0c2916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b031916733e1814d8bba430f8b6dd5d062a46fbc4da1ae0c2179055565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160c81b900460ff16156115265760405162461bcd60e51b8152600401610ddd90613249565b601d55565b6005546001600160a01b031633146115555760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff161561157f5760405162461bcd60e51b8152600401610ddd906132a6565b600d839055600e829055600f819055806115998385613140565b6115a39190613140565b6010556015546115b590600f906132eb565b60105411156116065760405162461bcd60e51b815260206004820152601c60248201527f4275792066656573206d75737420626520313525206f72206c657373000000006044820152606401610ddd565b505050565b606060048054610d30906130bb565b6005546001600160a01b031633146116445760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160e01b900460ff16156116ba5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d61726b6574206d616b65722070616972736044820152720818599d195c881c995b9bdd5b98d95b595b9d606a1b6064820152608401610ddd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036117615760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ddd565b61118d8282612917565b6000610e8a33846110e0856040518060600160405280602581526020016134dc602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906128dd565b6000610e8a338484612038565b6005546001600160a01b031633146117f15760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d81b900460ff161561181b5760405162461bcd60e51b8152600401610ddd906131a5565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118705760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e63652077616c6c6044820152696574206368616e67657360b01b6064820152608401610ddd565b600b805460ff60e81b1916600160e81b179055565b6005546001600160a01b0316331461191c5760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b031633146119945760405162461bcd60e51b815260206004820152603560248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206d61726b6044820152746574206d616b65722070616972206368616e67657360581b6064820152608401610ddd565b600b805460ff60e01b1916600160e01b179055565b6005546001600160a01b031633146119d35760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b03163314611a465760405162461bcd60e51b815260206004820152603060248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206d61782060448201526f7570646174652066756e6374696f6e7360801b6064820152608401610ddd565b600b805460ff60d81b1916600160d81b179055565b6005546001600160a01b03163314611a855760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160c81b900460ff1615611aaf5760405162461bcd60e51b8152600401610ddd90613249565b600b805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6005546001600160a01b03163314611afa5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160f01b900460ff1615611b245760405162461bcd60e51b8152600401610ddd90613153565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611bad5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff1615611bd75760405162461bcd60e51b8152600401610ddd906132a6565b60118390556012829055601381905580611bf18385613140565b611bfb9190613140565b601455601554611c0d906019906132eb565b60145411156116065760405162461bcd60e51b815260206004820152601d60248201527f53656c6c2066656573206d75737420626520323525206f72206c6573730000006044820152606401610ddd565b6005546001600160a01b03163314611c885760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff1615611cb25760405162461bcd60e51b8152600401610ddd906132a6565b601555565b6005546001600160a01b03163314611ce15760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b03163314611d4e5760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e63652064656c616044820152693c90333ab731ba34b7b760b11b6064820152608401610ddd565b600b805460ff60c81b1916600160c81b179055565b6005546001600160a01b03163314611d8d5760405162461bcd60e51b8152600401610ddd906130f5565b6001600160a01b038116611df25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ddd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e5b8385613140565b905083811015611ead5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ddd565b9392505050565b6001600160a01b038316611f165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ddd565b6001600160a01b038216611f775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ddd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6064601c54600a54611feb919061330d565b611ff591906132eb565b600755600a546127109061200a90600561330d565b61201491906132eb565b600855600954600a546064916120299161330d565b61203391906132eb565b601b55565b6001600160a01b03831661205e5760405162461bcd60e51b8152600401610ddd9061332c565b6001600160a01b0382166120845760405162461bcd60e51b8152600401610ddd90613371565b80600003612098576116068383600061296b565b600b54600160b81b900460ff161561251e576005546001600160a01b038481169116148015906120d657506005546001600160a01b03838116911614155b80156120ea57506001600160a01b03821615155b801561210157506001600160a01b03821661dead14155b80156121175750600654600160a01b900460ff16155b1561251e57600b54600160a01b900460ff166121b1576001600160a01b0383166000908152601e602052604090205460ff168061216c57506001600160a01b0382166000908152601e602052604090205460ff165b6121b15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ddd565b600b54600160b01b900460ff1680156121e257506001600160a01b03821660009081526021602052604090205460ff165b1561228f57601d54326000908152600c60205260409020546122049190613140565b42101561228f5760405162461bcd60e51b815260206004820152604d60248201527f5472616e736665722064656c6179206973206163746976652e4f6e6c79206f6e60448201527f652073656c6c20706572207e77616c6c65745472616e7366657244656c61795460648201526c34b6b2bf1030b63637bbb2b21760991b608482015260a401610ddd565b326000818152600c6020908152604091829020429081905591519182527fff12548a3ebb8257a10ea929ff01f69da0424c5bb36050f8d6df03452cbd4d00910160405180910390a26001600160a01b03831660009081526021602052604090205460ff16801561231857506001600160a01b0382166000908152601f602052604090205460ff16155b801561233d57506001600160a01b03821660009081526021602052604090205460ff16155b156123b157601b546001600160a01b0383166000908152602081905260409020546123689083613140565b11156123ac5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ddd565b61251e565b6001600160a01b03821660009081526021602052604090205460ff1680156123f257506001600160a01b0383166000908152601f602052604090205460ff16155b801561241757506001600160a01b03831660009081526021602052604090205460ff16155b15612494576007548111156123ac5760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610ddd565b6001600160a01b0382166000908152601f602052604090205460ff1661251e57601b546001600160a01b0383166000908152602081905260409020546124da9083613140565b111561251e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ddd565b306000908152602081905260409020546008548110801590819061254c5750600654600160a01b900460ff16155b80156125615750600b54600160c01b900460ff165b801561258657506001600160a01b03851660009081526021602052604090205460ff16155b80156125ab57506001600160a01b0385166000908152601e602052604090205460ff16155b80156125d057506001600160a01b0384166000908152601e602052604090205460ff16155b156125fe576006805460ff60a01b1916600160a01b1790556125f0612a74565b6006805460ff60a01b191690555b6006546001600160a01b0386166000908152601e602052604090205460ff600160a01b90920482161591168061264c57506001600160a01b0385166000908152601e602052604090205460ff165b15612655575060005b600081156128c9576001600160a01b03861660009081526021602052604090205460ff16801561268757506000601454115b15612758576126ad6015546126a760145488612b1e90919063ffffffff16565b90612ba0565b9050601454601154826126c0919061330d565b6126ca91906132eb565b601660008282546126db9190613140565b90915550506014546012546126f0908361330d565b6126fa91906132eb565b6017600082825461270b9190613140565b9091555050600b54600160a81b900460ff161561275357601454601354612732908361330d565b61273c91906132eb565b6018600082825461274d9190613140565b90915550505b612848565b6001600160a01b03871660009081526021602052604090205460ff16801561278257506000601054115b15612848576127a26015546126a760105488612b1e90919063ffffffff16565b9050601054600d54826127b5919061330d565b6127bf91906132eb565b601660008282546127d09190613140565b9091555050601054600e546127e5908361330d565b6127ef91906132eb565b601760008282546128009190613140565b9091555050600b54600160a81b900460ff161561284857601054600f54612827908361330d565b61283191906132eb565b601860008282546128429190613140565b90915550505b80156128815761285987308361296b565b601654156128815761286d30601654612be2565b600254600a5561287b611fd9565b60006016555b601854156128bc576128b6307f000000000000000000000000000000000000000000000000000000000000000060185461296b565b60006018555b6128c681866133b4565b94505b6128d487878761296b565b50505050505050565b600081848411156129015760405162461bcd60e51b8152600401610ddd9190612f1d565b50600061290e84866133b4565b95945050505050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166129915760405162461bcd60e51b8152600401610ddd9061332c565b6001600160a01b0382166129b75760405162461bcd60e51b8152600401610ddd90613371565b6129f48160405180606001604052806026815260200161348e602691396001600160a01b03861660009081526020819052604090205491906128dd565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612a239082611e4e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611fcc565b3060009081526020819052604081205490818103612a90575050565b600854612a9e90601461330d565b821115612ab657600854612ab390601461330d565b91505b612abf82612ced565b60006017819055600b546040516001600160a01b039091169147919081818185875af1925050503d8060008114612b12576040519150601f19603f3d011682016040523d82523d6000602084013e612b17565b606091505b5050505050565b600082600003612b3057506000610e8e565b6000612b3c838561330d565b905082612b4985836132eb565b14611ead5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ddd565b6000611ead83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ead565b6001600160a01b038216612c425760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ddd565b612c7f8160405180606001604052806022815260200161346c602291396001600160a01b03851660009081526020819052604090205491906128dd565b6001600160a01b038316600090815260208190526040902055600254612ca59082612edb565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2257612d226133c7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc491906133dd565b81600181518110612dd757612dd76133c7565b60200260200101906001600160a01b031690816001600160a01b031681525050612e22307f000000000000000000000000000000000000000000000000000000000000000084611eb4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612e779085906000908690309042906004016133fa565b600060405180830381600087803b158015612e9157600080fd5b505af1158015612ea5573d6000803e3d6000fd5b505050505050565b60008183612ece5760405162461bcd60e51b8152600401610ddd9190612f1d565b50600061290e84866132eb565b6000611ead83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128dd565b600060208083528351808285015260005b81811015612f4a57858101830151858201604001528201612f2e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ef357600080fd5b600060208284031215612f9257600080fd5b8135611ead81612f6b565b60008060408385031215612fb057600080fd5b8235612fbb81612f6b565b946020939093013593505050565b600060208284031215612fdb57600080fd5b5035919050565b600080600060608486031215612ff757600080fd5b833561300281612f6b565b9250602084013561301281612f6b565b929592945050506040919091013590565b60008060006060848603121561303857600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561306257600080fd5b823561306d81612f6b565b91506020830135801515811461308257600080fd5b809150509250929050565b600080604083850312156130a057600080fd5b82356130ab81612f6b565b9150602083013561308281612f6b565b600181811c908216806130cf57607f821691505b6020821081036130ef57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e8e57610e8e61312a565b60208082526032908201527f43616e6e6f7420757064617465206578636c75646564206163636f756e74732060408201527118599d195c881c995b9bdd5b98d95b595b9d60721b606082015260800190565b60208082526037908201527f43616e6e6f7420757064617465206d6178207472616e73616374696f6e20616d60408201527f6f756e742061667465722072656e6f756e63656d656e74000000000000000000606082015260800190565b60208082526027908201527f43616e6e6f74207570646174652077616c6c65742061667465722072656e6f756040820152661b98d95b595b9d60ca1b606082015260800190565b6020808252603b908201527f43616e6e6f74207570646174652077616c6c6574207472616e7366657220646560408201527f6c61792074696d652061667465722072656e6f756e63656d656e740000000000606082015260800190565b60208082526025908201527f43616e6e6f742075706461746520666565732061667465722072656e6f756e63604082015264195b595b9d60da1b606082015260800190565b60008261330857634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156133275761332761312a565b500290565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610e8e57610e8e61312a565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133ef57600080fd5b8151611ead81612f6b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561344a5784516001600160a01b031683529383019391830191600101613425565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122076fce077acb5d5beea15635a11fcae3bd33ace3564e30e036b7d7e9bb27855fb64736f6c634300081000334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106104355760003560e01c80637bce5a0411610229578063b11628841161012e578063ddf19480116100b6578063f11a24d31161007a578063f11a24d314610ca9578063f2fde38b14610cbf578063f637434214610cdf578063f680f79914610cf5578063f8b45b0514610d0b57600080fd5b8063ddf1948014610c27578063e18fc22414610c48578063e2f4560514610c68578063e71dc3f514610c7e578063ee98ba8414610c9457600080fd5b8063c0246668116100fd578063c024666814610b6a578063c17b5b8c14610b8a578063c94c2a5214610baa578063d85ba06314610bcb578063dd62ed3e14610be157600080fd5b8063b116288414610aef578063b62496f514610b04578063bb647f6514610b34578063bbc0c74214610b4957600080fd5b8063a4c5ba96116101b1578063ac819f5411610180578063ac819f5414610a79578063adb873bd14610a99578063ae907c9c14610aaf578063b0a95bfa14610ac5578063b1099b8114610ada57600080fd5b8063a4c5ba96146109f7578063a4d0341414610a18578063a5ece94114610a39578063a9059cbb14610a5957600080fd5b806392136913116101f8578063921369131461096b57806395d89b41146109815780639a7a23d614610996578063a333174f146109b6578063a457c2d7146109d757600080fd5b80637bce5a04146108f75780637d3f84da1461090d5780638095d5641461092d5780638da5cb5b1461094d57600080fd5b806327c8f8351161033a5780634fbee193116102c257806365aaf3701161028657806365aaf370146108545780636a486a8e146108755780636ddd17131461088b57806370a08231146108ac578063715018a6146108e257600080fd5b80634fbee193146107b1578063525fa81f146107ea5780635449f2ec1461080a5780635dc083151461081f578063637845c61461083f57600080fd5b80633b13cc16116103095780633b13cc16146107055780633fad50a91461071b57806340c10f191461073c57806349bd5a5e1461075c5780634a62bb651461079057600080fd5b806327c8f83514610693578063313ce567146106a95780633221c93f146106c557806339509351146106e557600080fd5b806316a2f82a116103bd5780631cd6e8711161038c5780631cd6e871146106125780631d777856146106275780631f3fed8f1461063d5780632369bf831461065357806323b872dd1461067357600080fd5b806316a2f82a146105a757806318160ddd146105c75780631a8145bb146105dc5780631c499ab0146105f257600080fd5b806306fdde031161040457806306fdde03146104c757806307980cb9146104e95780630855f25d1461050b578063095ea7b31461053b5780631694505e1461055b57600080fd5b806302259e9e14610441578063023ad5811461046a578063047fc9aa14610480578063064f22051461049657600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061045760075481565b6040519081526020015b60405180910390f35b34801561047657600080fd5b50610457601b5481565b34801561048c57600080fd5b50610457600a5481565b3480156104a257600080fd5b50600b546104b790600160a81b900460ff1681565b6040519015158152602001610461565b3480156104d357600080fd5b506104dc610d21565b6040516104619190612f1d565b3480156104f557600080fd5b50610509610504366004612f80565b610db3565b005b34801561051757600080fd5b506104b7610526366004612f80565b601f6020526000908152604090205460ff1681565b34801561054757600080fd5b506104b7610556366004612f9d565b610e7d565b34801561056757600080fd5b5061058f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610461565b3480156105b357600080fd5b506105096105c2366004612f80565b610e94565b3480156105d357600080fd5b50600254610457565b3480156105e857600080fd5b5061045760185481565b3480156105fe57600080fd5b5061050961060d366004612fc9565b610ef6565b34801561061e57600080fd5b50610509610f65565b34801561063357600080fd5b5061045760165481565b34801561064957600080fd5b5061045760175481565b34801561065f57600080fd5b5061050961066e366004612f80565b611010565b34801561067f57600080fd5b506104b761068e366004612fe2565b611086565b34801561069f57600080fd5b5061058f61dead81565b3480156106b557600080fd5b5060405160128152602001610461565b3480156106d157600080fd5b5060065461058f906001600160a01b031681565b3480156106f157600080fd5b506104b7610700366004612f9d565b6110ef565b34801561071157600080fd5b50610457601c5481565b34801561072757600080fd5b50600b546104b790600160e01b900460ff1681565b34801561074857600080fd5b50610509610757366004612f9d565b611125565b34801561076857600080fd5b5061058f7f0000000000000000000000008745070d040e3cd27a60692c51ac9800e599253a81565b34801561079c57600080fd5b50600b546104b790600160b81b900460ff1681565b3480156107bd57600080fd5b506104b76107cc366004612f80565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156107f657600080fd5b50610509610805366004612f80565b611191565b34801561081657600080fd5b50610509611207565b34801561082b57600080fd5b5061050961083a366004612fc9565b6112b4565b34801561084b57600080fd5b50610509611323565b34801561086057600080fd5b50600b546104b790600160e81b900460ff1681565b34801561088157600080fd5b5061045760145481565b34801561089757600080fd5b50600b546104b790600160c01b900460ff1681565b3480156108b857600080fd5b506104576108c7366004612f80565b6001600160a01b031660009081526020819052604090205490565b3480156108ee57600080fd5b50610509611434565b34801561090357600080fd5b50610457600e5481565b34801561091957600080fd5b50610509610928366004612fc9565b6114d2565b34801561093957600080fd5b50610509610948366004613023565b61152b565b34801561095957600080fd5b506005546001600160a01b031661058f565b34801561097757600080fd5b5061045760125481565b34801561098d57600080fd5b506104dc61160b565b3480156109a257600080fd5b506105096109b136600461304f565b61161a565b3480156109c257600080fd5b50600b546104b790600160f01b900460ff1681565b3480156109e357600080fd5b506104b76109f2366004612f9d565b61176b565b348015610a0357600080fd5b50600b546104b790600160c81b900460ff1681565b348015610a2457600080fd5b50600b546104b790600160d01b900460ff1681565b348015610a4557600080fd5b50600b5461058f906001600160a01b031681565b348015610a6557600080fd5b506104b7610a74366004612f9d565b6117ba565b348015610a8557600080fd5b50610509610a9436600461304f565b6117c7565b348015610aa557600080fd5b5061045760115481565b348015610abb57600080fd5b50610457601d5481565b348015610ad157600080fd5b50610509611846565b348015610ae657600080fd5b506105096118f2565b348015610afb57600080fd5b506105096119a9565b348015610b1057600080fd5b506104b7610b1f366004612f80565b60216020526000908152604090205460ff1681565b348015610b4057600080fd5b50610509611a5b565b348015610b5557600080fd5b50600b546104b790600160a01b900460ff1681565b348015610b7657600080fd5b50610509610b8536600461304f565b611ad0565b348015610b9657600080fd5b50610509610ba5366004613023565b611b83565b348015610bb657600080fd5b50600b546104b790600160d81b900460ff1681565b348015610bd757600080fd5b5061045760105481565b348015610bed57600080fd5b50610457610bfc36600461308d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c3357600080fd5b50600b546104b790600160b01b900460ff1681565b348015610c5457600080fd5b50610509610c63366004612fc9565b611c5e565b348015610c7457600080fd5b5061045760085481565b348015610c8a57600080fd5b50610457600d5481565b348015610ca057600080fd5b50610509611cb7565b348015610cb557600080fd5b50610457600f5481565b348015610ccb57600080fd5b50610509610cda366004612f80565b611d63565b348015610ceb57600080fd5b5061045760135481565b348015610d0157600080fd5b5061045760155481565b348015610d1757600080fd5b5061045760095481565b606060038054610d30906130bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906130bb565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610ddd906130f5565b60405180910390fd5b6000600d8190556002600e8190556003600f81905591610e069190613140565b610e109190613140565b60105560006011819055600560128190556003601381905591610e339190613140565b610e3d9190613140565b60145560b4601d55600b805461ffff60a01b191661010160a01b1790556001600160a01b031660009081526020805260409020805460ff19166001179055565b6000610e8a338484611eb4565b5060015b92915050565b6005546001600160a01b03163314610ebe5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160f01b900460ff1615610ee85760405162461bcd60e51b8152600401610ddd90613153565b610ef3816000611ad0565b50565b6005546001600160a01b03163314610f205760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d81b900460ff1615610f4a5760405162461bcd60e51b8152600401610ddd906131a5565b6001811015610f5857600080fd5b6009819055610ef3611fd9565b6005546001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b03163314610ffb5760405162461bcd60e51b815260206004820152602960248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206665652060448201526866756e6374696f6e7360b81b6064820152608401610ddd565b600b805460ff60d01b1916600160d01b179055565b6005546001600160a01b0316331461103a5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160e81b900460ff16156110645760405162461bcd60e51b8152600401610ddd90613202565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611093848484612038565b6110e584336110e0856040518060600160405280602881526020016134b4602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906128dd565b611eb4565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e8a9185906110e09086611e4e565b33600090815260208052604090205460ff166111835760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920636f6e74726f6c6c6572732063616e206d696e74000000000000006044820152606401610ddd565b61118d8282611125565b5050565b6005546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160e81b900460ff16156111e55760405162461bcd60e51b8152600401610ddd90613202565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112315760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b0316331461129f5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206578636c60448201526a75646520696e636c75646560a81b6064820152608401610ddd565b600b805460ff60f01b1916600160f01b179055565b6005546001600160a01b031633146112de5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d81b900460ff16156113085760405162461bcd60e51b8152600401610ddd906131a5565b600181101561131657600080fd5b601c819055610ef3611fd9565b6005546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff16156113b65760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742075706461746520666565732061667465722072656e6f756e63604482015265195b595b9b9d60d21b6064820152608401610ddd565b600b54600160a81b900460ff16156113d557600f54601955601354601a555b600b54600160a81b900460ff166113ee576019546113f1565b60005b600f55600b54600160a81b900460ff1661140d57601a54611410565b60005b601355600b805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b0316331461145e5760405162461bcd60e51b8152600401610ddd906130f5565b600554604051733e1814d8bba430f8b6dd5d062a46fbc4da1ae0c2916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b031916733e1814d8bba430f8b6dd5d062a46fbc4da1ae0c2179055565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160c81b900460ff16156115265760405162461bcd60e51b8152600401610ddd90613249565b601d55565b6005546001600160a01b031633146115555760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff161561157f5760405162461bcd60e51b8152600401610ddd906132a6565b600d839055600e829055600f819055806115998385613140565b6115a39190613140565b6010556015546115b590600f906132eb565b60105411156116065760405162461bcd60e51b815260206004820152601c60248201527f4275792066656573206d75737420626520313525206f72206c657373000000006044820152606401610ddd565b505050565b606060048054610d30906130bb565b6005546001600160a01b031633146116445760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160e01b900460ff16156116ba5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d61726b6574206d616b65722070616972736044820152720818599d195c881c995b9bdd5b98d95b595b9d606a1b6064820152608401610ddd565b7f0000000000000000000000008745070d040e3cd27a60692c51ac9800e599253a6001600160a01b0316826001600160a01b0316036117615760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ddd565b61118d8282612917565b6000610e8a33846110e0856040518060600160405280602581526020016134dc602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906128dd565b6000610e8a338484612038565b6005546001600160a01b031633146117f15760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d81b900460ff161561181b5760405162461bcd60e51b8152600401610ddd906131a5565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146118705760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e63652077616c6c6044820152696574206368616e67657360b01b6064820152608401610ddd565b600b805460ff60e81b1916600160e81b179055565b6005546001600160a01b0316331461191c5760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b031633146119945760405162461bcd60e51b815260206004820152603560248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206d61726b6044820152746574206d616b65722070616972206368616e67657360581b6064820152608401610ddd565b600b805460ff60e01b1916600160e01b179055565b6005546001600160a01b031633146119d35760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b03163314611a465760405162461bcd60e51b815260206004820152603060248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e6365206d61782060448201526f7570646174652066756e6374696f6e7360801b6064820152608401610ddd565b600b805460ff60d81b1916600160d81b179055565b6005546001600160a01b03163314611a855760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160c81b900460ff1615611aaf5760405162461bcd60e51b8152600401610ddd90613249565b600b805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6005546001600160a01b03163314611afa5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160f01b900460ff1615611b245760405162461bcd60e51b8152600401610ddd90613153565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611bad5760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff1615611bd75760405162461bcd60e51b8152600401610ddd906132a6565b60118390556012829055601381905580611bf18385613140565b611bfb9190613140565b601455601554611c0d906019906132eb565b60145411156116065760405162461bcd60e51b815260206004820152601d60248201527f53656c6c2066656573206d75737420626520323525206f72206c6573730000006044820152606401610ddd565b6005546001600160a01b03163314611c885760405162461bcd60e51b8152600401610ddd906130f5565b600b54600160d01b900460ff1615611cb25760405162461bcd60e51b8152600401610ddd906132a6565b601555565b6005546001600160a01b03163314611ce15760405162461bcd60e51b8152600401610ddd906130f5565b6005546001600160a01b03163314611d4e5760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c7920746865206f776e65722063616e2072656e6f756e63652064656c616044820152693c90333ab731ba34b7b760b11b6064820152608401610ddd565b600b805460ff60c81b1916600160c81b179055565b6005546001600160a01b03163314611d8d5760405162461bcd60e51b8152600401610ddd906130f5565b6001600160a01b038116611df25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ddd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e5b8385613140565b905083811015611ead5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ddd565b9392505050565b6001600160a01b038316611f165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ddd565b6001600160a01b038216611f775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ddd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6064601c54600a54611feb919061330d565b611ff591906132eb565b600755600a546127109061200a90600561330d565b61201491906132eb565b600855600954600a546064916120299161330d565b61203391906132eb565b601b55565b6001600160a01b03831661205e5760405162461bcd60e51b8152600401610ddd9061332c565b6001600160a01b0382166120845760405162461bcd60e51b8152600401610ddd90613371565b80600003612098576116068383600061296b565b600b54600160b81b900460ff161561251e576005546001600160a01b038481169116148015906120d657506005546001600160a01b03838116911614155b80156120ea57506001600160a01b03821615155b801561210157506001600160a01b03821661dead14155b80156121175750600654600160a01b900460ff16155b1561251e57600b54600160a01b900460ff166121b1576001600160a01b0383166000908152601e602052604090205460ff168061216c57506001600160a01b0382166000908152601e602052604090205460ff165b6121b15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ddd565b600b54600160b01b900460ff1680156121e257506001600160a01b03821660009081526021602052604090205460ff165b1561228f57601d54326000908152600c60205260409020546122049190613140565b42101561228f5760405162461bcd60e51b815260206004820152604d60248201527f5472616e736665722064656c6179206973206163746976652e4f6e6c79206f6e60448201527f652073656c6c20706572207e77616c6c65745472616e7366657244656c61795460648201526c34b6b2bf1030b63637bbb2b21760991b608482015260a401610ddd565b326000818152600c6020908152604091829020429081905591519182527fff12548a3ebb8257a10ea929ff01f69da0424c5bb36050f8d6df03452cbd4d00910160405180910390a26001600160a01b03831660009081526021602052604090205460ff16801561231857506001600160a01b0382166000908152601f602052604090205460ff16155b801561233d57506001600160a01b03821660009081526021602052604090205460ff16155b156123b157601b546001600160a01b0383166000908152602081905260409020546123689083613140565b11156123ac5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ddd565b61251e565b6001600160a01b03821660009081526021602052604090205460ff1680156123f257506001600160a01b0383166000908152601f602052604090205460ff16155b801561241757506001600160a01b03831660009081526021602052604090205460ff16155b15612494576007548111156123ac5760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610ddd565b6001600160a01b0382166000908152601f602052604090205460ff1661251e57601b546001600160a01b0383166000908152602081905260409020546124da9083613140565b111561251e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ddd565b306000908152602081905260409020546008548110801590819061254c5750600654600160a01b900460ff16155b80156125615750600b54600160c01b900460ff165b801561258657506001600160a01b03851660009081526021602052604090205460ff16155b80156125ab57506001600160a01b0385166000908152601e602052604090205460ff16155b80156125d057506001600160a01b0384166000908152601e602052604090205460ff16155b156125fe576006805460ff60a01b1916600160a01b1790556125f0612a74565b6006805460ff60a01b191690555b6006546001600160a01b0386166000908152601e602052604090205460ff600160a01b90920482161591168061264c57506001600160a01b0385166000908152601e602052604090205460ff165b15612655575060005b600081156128c9576001600160a01b03861660009081526021602052604090205460ff16801561268757506000601454115b15612758576126ad6015546126a760145488612b1e90919063ffffffff16565b90612ba0565b9050601454601154826126c0919061330d565b6126ca91906132eb565b601660008282546126db9190613140565b90915550506014546012546126f0908361330d565b6126fa91906132eb565b6017600082825461270b9190613140565b9091555050600b54600160a81b900460ff161561275357601454601354612732908361330d565b61273c91906132eb565b6018600082825461274d9190613140565b90915550505b612848565b6001600160a01b03871660009081526021602052604090205460ff16801561278257506000601054115b15612848576127a26015546126a760105488612b1e90919063ffffffff16565b9050601054600d54826127b5919061330d565b6127bf91906132eb565b601660008282546127d09190613140565b9091555050601054600e546127e5908361330d565b6127ef91906132eb565b601760008282546128009190613140565b9091555050600b54600160a81b900460ff161561284857601054600f54612827908361330d565b61283191906132eb565b601860008282546128429190613140565b90915550505b80156128815761285987308361296b565b601654156128815761286d30601654612be2565b600254600a5561287b611fd9565b60006016555b601854156128bc576128b6307f0000000000000000000000008745070d040e3cd27a60692c51ac9800e599253a60185461296b565b60006018555b6128c681866133b4565b94505b6128d487878761296b565b50505050505050565b600081848411156129015760405162461bcd60e51b8152600401610ddd9190612f1d565b50600061290e84866133b4565b95945050505050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166129915760405162461bcd60e51b8152600401610ddd9061332c565b6001600160a01b0382166129b75760405162461bcd60e51b8152600401610ddd90613371565b6129f48160405180606001604052806026815260200161348e602691396001600160a01b03861660009081526020819052604090205491906128dd565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612a239082611e4e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611fcc565b3060009081526020819052604081205490818103612a90575050565b600854612a9e90601461330d565b821115612ab657600854612ab390601461330d565b91505b612abf82612ced565b60006017819055600b546040516001600160a01b039091169147919081818185875af1925050503d8060008114612b12576040519150601f19603f3d011682016040523d82523d6000602084013e612b17565b606091505b5050505050565b600082600003612b3057506000610e8e565b6000612b3c838561330d565b905082612b4985836132eb565b14611ead5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ddd565b6000611ead83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ead565b6001600160a01b038216612c425760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ddd565b612c7f8160405180606001604052806022815260200161346c602291396001600160a01b03851660009081526020819052604090205491906128dd565b6001600160a01b038316600090815260208190526040902055600254612ca59082612edb565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2257612d226133c7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc491906133dd565b81600181518110612dd757612dd76133c7565b60200260200101906001600160a01b031690816001600160a01b031681525050612e22307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611eb4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612e779085906000908690309042906004016133fa565b600060405180830381600087803b158015612e9157600080fd5b505af1158015612ea5573d6000803e3d6000fd5b505050505050565b60008183612ece5760405162461bcd60e51b8152600401610ddd9190612f1d565b50600061290e84866132eb565b6000611ead83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128dd565b600060208083528351808285015260005b81811015612f4a57858101830151858201604001528201612f2e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ef357600080fd5b600060208284031215612f9257600080fd5b8135611ead81612f6b565b60008060408385031215612fb057600080fd5b8235612fbb81612f6b565b946020939093013593505050565b600060208284031215612fdb57600080fd5b5035919050565b600080600060608486031215612ff757600080fd5b833561300281612f6b565b9250602084013561301281612f6b565b929592945050506040919091013590565b60008060006060848603121561303857600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561306257600080fd5b823561306d81612f6b565b91506020830135801515811461308257600080fd5b809150509250929050565b600080604083850312156130a057600080fd5b82356130ab81612f6b565b9150602083013561308281612f6b565b600181811c908216806130cf57607f821691505b6020821081036130ef57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e8e57610e8e61312a565b60208082526032908201527f43616e6e6f7420757064617465206578636c75646564206163636f756e74732060408201527118599d195c881c995b9bdd5b98d95b595b9d60721b606082015260800190565b60208082526037908201527f43616e6e6f7420757064617465206d6178207472616e73616374696f6e20616d60408201527f6f756e742061667465722072656e6f756e63656d656e74000000000000000000606082015260800190565b60208082526027908201527f43616e6e6f74207570646174652077616c6c65742061667465722072656e6f756040820152661b98d95b595b9d60ca1b606082015260800190565b6020808252603b908201527f43616e6e6f74207570646174652077616c6c6574207472616e7366657220646560408201527f6c61792074696d652061667465722072656e6f756e63656d656e740000000000606082015260800190565b60208082526025908201527f43616e6e6f742075706461746520666565732061667465722072656e6f756e63604082015264195b595b9d60da1b606082015260800190565b60008261330857634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156133275761332761312a565b500290565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610e8e57610e8e61312a565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133ef57600080fd5b8151611ead81612f6b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561344a5784516001600160a01b031683529383019391830191600101613425565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122076fce077acb5d5beea15635a11fcae3bd33ace3564e30e036b7d7e9bb27855fb64736f6c63430008100033
Deployed Bytecode Sourcemap
25238:17171:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25557:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;25557:39:0;;;;;;;;26888:29;;;;;;;;;;;;;;;;25676:21;;;;;;;;;;;;;;;;25786:38;;;;;;;;;;-1:-1:-1;25786:38:0;;;;-1:-1:-1;;;25786:38:0;;;;;;;;;361:14:1;;354:22;336:41;;324:2;309:18;25786:38:0;196:187:1;7547:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30802:545::-;;;;;;;;;;-1:-1:-1;30802:545:0;;;;;:::i;:::-;;:::i;:::-;;27152:68;;;;;;;;;;-1:-1:-1;27152:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9714:169;;;;;;;;;;-1:-1:-1;9714:169:0;;;;;:::i;:::-;;:::i;25324:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;25324:51:0;1649:230:1;34287:203:0;;;;;;;;;;-1:-1:-1;34287:203:0;;;;;:::i;:::-;;:::i;8667:108::-;;;;;;;;;;-1:-1:-1;8755:12:0;;8667:108;;26741:33;;;;;;;;;;;;;;;;31802:258;;;;;;;;;;-1:-1:-1;31802:258:0;;;;;:::i;:::-;;:::i;40136:183::-;;;;;;;;;;;;;:::i;26666:28::-;;;;;;;;;;;;;;;;26701:33;;;;;;;;;;;;;;;;33792:201;;;;;;;;;;-1:-1:-1;33792:201:0;;;;;:::i;:::-;;:::i;10365:355::-;;;;;;;;;;-1:-1:-1;10365:355:0;;;;;:::i;:::-;;:::i;25427:53::-;;;;;;;;;;;;25473:6;25427:53;;8509:93;;;;;;;;;;-1:-1:-1;8509:93:0;;8592:2;2880:36:1;;2868:2;2853:18;8509:93:0;2738:184:1;25487:31:0;;;;;;;;;;-1:-1:-1;25487:31:0;;;;-1:-1:-1;;;;;25487:31:0;;;11129:218;;;;;;;;;;-1:-1:-1;11129:218:0;;;;;:::i;:::-;;:::i;26924:33::-;;;;;;;;;;;;;;;;26108:51;;;;;;;;;;-1:-1:-1;26108:51:0;;;;-1:-1:-1;;;26108:51:0;;;;;;31637:146;;;;;;;;;;-1:-1:-1;31637:146:0;;;;;:::i;:::-;;:::i;25382:38::-;;;;;;;;;;;;;;;25878:33;;;;;;;;;;-1:-1:-1;25878:33:0;;;;-1:-1:-1;;;25878:33:0;;;;;;35500:125;;;;;;;;;;-1:-1:-1;35500:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;35589:28:0;35565:4;35589:28;;;:19;:28;;;;;;;;;35500:125;34498:198;;;;;;;;;;-1:-1:-1;34498:198:0;;;;;:::i;:::-;;:::i;41148:189::-;;;;;;;;;;;;;:::i;31355:276::-;;;;;;;;;;-1:-1:-1;31355:276:0;;;;;:::i;:::-;;:::i;30285:509::-;;;;;;;;;;;;;:::i;26166:42::-;;;;;;;;;;-1:-1:-1;26166:42:0;;;;-1:-1:-1;;;26166:42:0;;;;;;26591:28;;;;;;;;;;;;;;;;25918:30;;;;;;;;;;-1:-1:-1;25918:30:0;;;;-1:-1:-1;;;25918:30:0;;;;;;8838:127;;;;;;;;;;-1:-1:-1;8838:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8939:18:0;8912:7;8939:18;;;;;;;;;;;;8838:127;22008:230;;;;;;;;;;;;;:::i;26372:30::-;;;;;;;;;;;;;;;;32068:228;;;;;;;;;;-1:-1:-1;32068:228:0;;;;;:::i;:::-;;:::i;32824:470::-;;;;;;;;;;-1:-1:-1;32824:470:0;;;;;:::i;:::-;;:::i;21366:79::-;;;;;;;;;;-1:-1:-1;21431:6:0;;-1:-1:-1;;;;;21431:6:0;21366:79;;26515:31;;;;;;;;;;;;;;;;7766:104;;;;;;;;;;;;;:::i;34947:349::-;;;;;;;;;;-1:-1:-1;34947:349:0;;;;;:::i;:::-;;:::i;26215:43::-;;;;;;;;;;-1:-1:-1;26215:43:0;;;;-1:-1:-1;;;26215:43:0;;;;;;11850:269;;;;;;;;;;-1:-1:-1;11850:269:0;;;;;:::i;:::-;;:::i;25957:42::-;;;;;;;;;;-1:-1:-1;25957:42:0;;;;-1:-1:-1;;;25957:42:0;;;;;;26006:41;;;;;;;;;;-1:-1:-1;26006:41:0;;;;-1:-1:-1;;;26006:41:0;;;;;;25706:31;;;;;;;;;;-1:-1:-1;25706:31:0;;;;-1:-1:-1;;;;;25706:31:0;;;9178:175;;;;;;;;;;-1:-1:-1;9178:175:0;;;;;:::i;:::-;;:::i;32304:257::-;;;;;;;;;;-1:-1:-1;32304:257:0;;;;;:::i;:::-;;:::i;26482:26::-;;;;;;;;;;;;;;;;26964:38;;;;;;;;;;;;;;;;40521:186;;;;;;;;;;;;;:::i;40925:215::-;;;;;;;;;;;;;:::i;40715:202::-;;;;;;;;;;;;;:::i;27417:58::-;;;;;;;;;;-1:-1:-1;27417:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30055:222;;;;;;;;;;;;;:::i;25746:33::-;;;;;;;;;;-1:-1:-1;25746:33:0;;;;-1:-1:-1;;;25746:33:0;;;;;;34001:278;;;;;;;;;;-1:-1:-1;34001:278:0;;;;;:::i;:::-;;:::i;33302:482::-;;;;;;;;;;-1:-1:-1;33302:482:0;;;;;:::i;:::-;;:::i;26054:47::-;;;;;;;;;;-1:-1:-1;26054:47:0;;;;-1:-1:-1;;;26054:47:0;;;;;;26446:27;;;;;;;;;;;;;;;;9416:151;;;;;;;;;;-1:-1:-1;9416:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9532:18:0;;;9505:7;9532:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9416:151;25831:38;;;;;;;;;;-1:-1:-1;25831:38:0;;;;-1:-1:-1;;;25831:38:0;;;;;;32640:176;;;;;;;;;;-1:-1:-1;32640:176:0;;;;;:::i;:::-;;:::i;25603:33::-;;;;;;;;;;;;;;;;26340:25;;;;;;;;;;;;;;;;40327:186;;;;;;;;;;;;;:::i;26409:30::-;;;;;;;;;;;;;;;;22393:244;;;;;;;;;;-1:-1:-1;22393:244:0;;;;;:::i;:::-;;:::i;26553:31::-;;;;;;;;;;;;;;;;26628:29;;;;;;;;;;;;;;;;25643:24;;;;;;;;;;;;;;;;7547:100;7601:13;7634:5;7627:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7547:100;:::o;30802:545::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;;;;;;;;;30888:1:::1;30875:10;:14:::0;;;30918:1:::1;30900:15;:19:::0;;;30948:1:::1;30930:15;:19:::0;;;30948:1;30975:28:::1;::::0;30918:1;30975:28:::1;:::i;:::-;:46;;;;:::i;:::-;30960:12;:61:::0;31048:1:::1;31034:11;:15:::0;;;31079:1:::1;31060:16;:20:::0;;;31110:1:::1;31091:16;:20:::0;;;31110:1;31138:30:::1;::::0;31079:1;31138:30:::1;:::i;:::-;:49;;;;:::i;:::-;31122:13;:65:::0;31226:3:::1;31200:23;:29:::0;31242:13:::1;:20:::0;;-1:-1:-1;;;;31273:25:0;-1:-1:-1;;;31273:25:0;;;-1:-1:-1;;;;;31309:23:0::1;-1:-1:-1::0;31309:23:0;;;:11:::1;:23:::0;;;;;:30;;-1:-1:-1;;31309:30:0::1;-1:-1:-1::0;31309:30:0::1;::::0;;30802:545::o;9714:169::-;9797:4;9814:39;263:10;9837:7;9846:6;9814:8;:39::i;:::-;-1:-1:-1;9871:4:0;9714:169;;;;;:::o;34287:203::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;34362:23:::1;::::0;-1:-1:-1;;;34362:23:0;::::1;;;34361:24;34353:87;;;;-1:-1:-1::0;;;34353:87:0::1;;;;;;;:::i;:::-;34451:31;34467:7;34476:5;34451:15;:31::i;:::-;34287:203:::0;:::o;31802:258::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;31880:27:::1;::::0;-1:-1:-1;;;31880:27:0;::::1;;;31879:28;31871:96;;;;-1:-1:-1::0;;;31871:96:0::1;;;;;;;:::i;:::-;31996:1;31986:6;:11;;31978:20;;;::::0;::::1;;32009:9;:18:::0;;;32038:14:::1;:12;:14::i;40136:183::-:0;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;21431:6;;-1:-1:-1;;;;;21431:6:0;40205:10:::1;:21;40197:75;;;::::0;-1:-1:-1;;;40197:75:0;;6115:2:1;40197:75:0::1;::::0;::::1;6097:21:1::0;6154:2;6134:18;;;6127:30;6193:34;6173:18;;;6166:62;-1:-1:-1;;;6244:18:1;;;6237:39;6293:19;;40197:75:0::1;5913:405:1::0;40197:75:0::1;40283:21;:28:::0;;-1:-1:-1;;;;40283:28:0::1;-1:-1:-1::0;;;40283:28:0::1;::::0;;40136:183::o;33792:201::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;33880:22:::1;::::0;-1:-1:-1;;;33880:22:0;::::1;;;33879:23;33871:75;;;;-1:-1:-1::0;;;33871:75:0::1;;;;;;;:::i;:::-;33957:16;:28:::0;;-1:-1:-1;;;;;;33957:28:0::1;-1:-1:-1::0;;;;;33957:28:0;;;::::1;::::0;;;::::1;::::0;;33792:201::o;10365:355::-;10505:4;10522:36;10532:6;10540:9;10551:6;10522:9;:36::i;:::-;10569:121;10578:6;263:10;10600:89;10638:6;10600:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10600:19:0;;;;;;:11;:19;;;;;;;;263:10;10600:33;;;;;;;;;;:37;:89::i;:::-;10569:8;:121::i;:::-;-1:-1:-1;10708:4:0;10365:355;;;;;:::o;11129:218::-;263:10;11217:4;11266:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11266:34:0;;;;;;;;;;11217:4;;11234:83;;11257:7;;11266:50;;11305:10;11266:38;:50::i;31637:146::-;31713:10;31701:23;;;;:11;:23;;;;;;;;31693:61;;;;-1:-1:-1;;;31693:61:0;;6933:2:1;31693:61:0;;;6915:21:1;6972:2;6952:18;;;6945:30;7011:27;6991:18;;;6984:55;7056:18;;31693:61:0;6731:349:1;31693:61:0;31761:16;31766:2;31770:6;31761:4;:16::i;:::-;31637:146;;:::o;34498:198::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;34582:22:::1;::::0;-1:-1:-1;;;34582:22:0;::::1;;;34581:23;34573:75;;;;-1:-1:-1::0;;;34573:75:0::1;;;;;;;:::i;:::-;34659:16;:29:::0;;-1:-1:-1;;;;;;34659:29:0::1;-1:-1:-1::0;;;;;34659:29:0;;;::::1;::::0;;;::::1;::::0;;34498:198::o;41148:189::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;21431:6;;-1:-1:-1;;;;;21431:6:0;41219:10:::1;:21;41211:77;;;::::0;-1:-1:-1;;;41211:77:0;;7287:2:1;41211:77:0::1;::::0;::::1;7269:21:1::0;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:41;7467:19;;41211:77:0::1;7085:407:1::0;41211:77:0::1;41299:23;:30:::0;;-1:-1:-1;;;;41299:30:0::1;-1:-1:-1::0;;;41299:30:0::1;::::0;;41148:189::o;31355:276::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;31442:27:::1;::::0;-1:-1:-1;;;31442:27:0;::::1;;;31441:28;31433:96;;;;-1:-1:-1::0;;;31433:96:0::1;;;;;;;:::i;:::-;31558:1;31548:6;:11;;31540:20;;;::::0;::::1;;31571:18;:27:::0;;;31609:14:::1;:12;:14::i;30285:509::-:0;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;30359:21:::1;::::0;-1:-1:-1;;;30359:21:0;::::1;;;30358:22;30350:73;;;::::0;-1:-1:-1;;;30350:73:0;;7699:2:1;30350:73:0::1;::::0;::::1;7681:21:1::0;7738:2;7718:18;;;7711:30;7777:34;7757:18;;;7750:62;-1:-1:-1;;;7828:18:1;;;7821:36;7874:19;;30350:73:0::1;7497:402:1::0;30350:73:0::1;30438:18;::::0;-1:-1:-1;;;30438:18:0;::::1;;;30434:144;;;30496:15;::::0;30469:24:::1;:42:::0;30550:16:::1;::::0;30522:25:::1;:44:::0;30434:144:::1;30606:18;::::0;-1:-1:-1;;;30606:18:0;::::1;;;:49;;30631:24;;30606:49;;;30627:1;30606:49;30588:15;:67:::0;30685:18:::1;::::0;-1:-1:-1;;;30685:18:0;::::1;;;:50;;30710:25;;30685:50;;;30706:1;30685:50;30666:16;:69:::0;30768:18:::1;::::0;;-1:-1:-1;;;;30746:40:0;::::1;-1:-1:-1::0;;;30768:18:0;;;::::1;;;30767:19;30746:40:::0;;::::1;;::::0;;30285:509::o;22008:230::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;22099:6:::1;::::0;22078:81:::1;::::0;22115:42:::1;::::0;-1:-1:-1;;;;;22099:6:0::1;::::0;22078:81:::1;::::0;22099:6:::1;::::0;22078:81:::1;22170:6;:60:::0;;-1:-1:-1;;;;;;22170:60:0::1;22187:42;22170:60;::::0;;22008:230::o;32068:228::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;32159:22:::1;::::0;-1:-1:-1;;;32159:22:0;::::1;;;32158:23;32150:95;;;;-1:-1:-1::0;;;32150:95:0::1;;;;;;;:::i;:::-;32256:23;:32:::0;32068:228::o;32824:470::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;32951:21:::1;::::0;-1:-1:-1;;;32951:21:0;::::1;;;32950:22;32942:72;;;;-1:-1:-1::0;;;32942:72:0::1;;;;;;;:::i;:::-;33025:10;:21:::0;;;33057:15:::1;:31:::0;;;33099:15:::1;:34:::0;;;33117:16;33159:28:::1;33075:13:::0;33038:8;33159:28:::1;:::i;:::-;:46;;;;:::i;:::-;33144:12;:61:::0;33241:8:::1;::::0;:11:::1;::::0;33250:2:::1;::::0;33241:11:::1;:::i;:::-;33224:12;;:29;;33216:70;;;::::0;-1:-1:-1;;;33216:70:0;;9162:2:1;33216:70:0::1;::::0;::::1;9144:21:1::0;9201:2;9181:18;;;9174:30;9240;9220:18;;;9213:58;9288:18;;33216:70:0::1;8960:352:1::0;33216:70:0::1;32824:470:::0;;;:::o;7766:104::-;7822:13;7855:7;7848:14;;;;;:::i;34947:349::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;35045:31:::1;::::0;-1:-1:-1;;;35045:31:0;::::1;;;35044:32;35036:96;;;::::0;-1:-1:-1;;;35036:96:0;;9519:2:1;35036:96:0::1;::::0;::::1;9501:21:1::0;9558:2;9538:18;;;9531:30;9597:34;9577:18;;;9570:62;-1:-1:-1;;;9648:18:1;;;9641:49;9707:19;;35036:96:0::1;9317:415:1::0;35036:96:0::1;35159:13;-1:-1:-1::0;;;;;35151:21:0::1;:4;-1:-1:-1::0;;;;;35151:21:0::1;::::0;35143:91:::1;;;::::0;-1:-1:-1;;;35143:91:0;;9939:2:1;35143:91:0::1;::::0;::::1;9921:21:1::0;9978:2;9958:18;;;9951:30;10017:34;9997:18;;;9990:62;10088:27;10068:18;;;10061:55;10133:19;;35143:91:0::1;9737:421:1::0;35143:91:0::1;35247:41;35276:4;35282:5;35247:28;:41::i;11850:269::-:0;11943:4;11960:129;263:10;11983:7;11992:96;12031:15;11992:96;;;;;;;;;;;;;;;;;263:10;11992:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11992:34:0;;;;;;;;;;;;:38;:96::i;9178:175::-;9264:4;9281:42;263:10;9305:9;9316:6;9281:9;:42::i;32304:257::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;32405:27:::1;::::0;-1:-1:-1;;;32405:27:0;::::1;;;32404:28;32396:96;;;;-1:-1:-1::0;;;32396:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32503:43:0;;;::::1;;::::0;;;:35:::1;:43;::::0;;;;:50;;-1:-1:-1;;32503:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32304:257::o;40521:186::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;21431:6;;-1:-1:-1;;;;;21431:6:0;40591:10:::1;:21;40583:76;;;::::0;-1:-1:-1;;;40583:76:0;;10365:2:1;40583:76:0::1;::::0;::::1;10347:21:1::0;10404:2;10384:18;;;10377:30;10443:34;10423:18;;;10416:62;-1:-1:-1;;;10494:18:1;;;10487:40;10544:19;;40583:76:0::1;10163:406:1::0;40583:76:0::1;40670:22;:29:::0;;-1:-1:-1;;;;40670:29:0::1;-1:-1:-1::0;;;40670:29:0::1;::::0;;40521:186::o;40925:215::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;21431:6;;-1:-1:-1;;;;;21431:6:0;41004:10:::1;:21;40996:87;;;::::0;-1:-1:-1;;;40996:87:0;;10776:2:1;40996:87:0::1;::::0;::::1;10758:21:1::0;10815:2;10795:18;;;10788:30;10854:34;10834:18;;;10827:62;-1:-1:-1;;;10905:18:1;;;10898:51;10966:19;;40996:87:0::1;10574:417:1::0;40996:87:0::1;41094:31;:38:::0;;-1:-1:-1;;;;41094:38:0::1;-1:-1:-1::0;;;41094:38:0::1;::::0;;40925:215::o;40715:202::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;21431:6;;-1:-1:-1;;;;;21431:6:0;40790:10:::1;:21;40782:82;;;::::0;-1:-1:-1;;;40782:82:0;;11198:2:1;40782:82:0::1;::::0;::::1;11180:21:1::0;11237:2;11217:18;;;11210:30;11276:34;11256:18;;;11249:62;-1:-1:-1;;;11327:18:1;;;11320:46;11383:19;;40782:82:0::1;10996:412:1::0;40782:82:0::1;40875:27;:34:::0;;-1:-1:-1;;;;40875:34:0::1;-1:-1:-1::0;;;40875:34:0::1;::::0;;40715:202::o;30055:222::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;30130:22:::1;::::0;-1:-1:-1;;;30130:22:0;::::1;;;30129:23;30121:95;;;;-1:-1:-1::0;;;30121:95:0::1;;;;;;;:::i;:::-;30250:19;::::0;;-1:-1:-1;;;;30227:42:0;::::1;-1:-1:-1::0;;;30250:19:0;;;::::1;;;30249:20;30227:42:::0;;::::1;;::::0;;30055:222::o;34001:278::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;34093:23:::1;::::0;-1:-1:-1;;;34093:23:0;::::1;;;34092:24;34084:87;;;;-1:-1:-1::0;;;34084:87:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34182:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;34182:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34237:34;;336:41:1;;;34237:34:0::1;::::0;309:18:1;34237:34:0::1;;;;;;;34001:278:::0;;:::o;33302:482::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;33431:21:::1;::::0;-1:-1:-1;;;33431:21:0;::::1;;;33430:22;33422:72;;;;-1:-1:-1::0;;;33422:72:0::1;;;;;;;:::i;:::-;33505:11;:22:::0;;;33538:16:::1;:32:::0;;;33581:16:::1;:36:::0;;;33600:17;33644:30:::1;33557:13:::0;33519:8;33644:30:::1;:::i;:::-;:49;;;;:::i;:::-;33628:13;:65:::0;33730:8:::1;::::0;:11:::1;::::0;33739:2:::1;::::0;33730:11:::1;:::i;:::-;33712:13;;:30;;33704:72;;;::::0;-1:-1:-1;;;33704:72:0;;11615:2:1;33704:72:0::1;::::0;::::1;11597:21:1::0;11654:2;11634:18;;;11627:30;11693:31;11673:18;;;11666:59;11742:18;;33704:72:0::1;11413:353:1::0;32640:176:0;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;32717:21:::1;::::0;-1:-1:-1;;;32717:21:0;::::1;;;32716:22;32708:72;;;;-1:-1:-1::0;;;32708:72:0::1;;;;;;;:::i;:::-;32791:8;:17:::0;32640:176::o;40327:186::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;21431:6;;-1:-1:-1;;;;;21431:6:0;40397:10:::1;:21;40389:76;;;::::0;-1:-1:-1;;;40389:76:0;;11973:2:1;40389:76:0::1;::::0;::::1;11955:21:1::0;12012:2;11992:18;;;11985:30;12051:34;12031:18;;;12024:62;-1:-1:-1;;;12102:18:1;;;12095:40;12152:19;;40389:76:0::1;11771:406:1::0;40389:76:0::1;40476:22;:29:::0;;-1:-1:-1;;;;40476:29:0::1;-1:-1:-1::0;;;40476:29:0::1;::::0;;40327:186::o;22393:244::-;21578:6;;-1:-1:-1;;;;;21578:6:0;263:10;21578:22;21570:67;;;;-1:-1:-1;;;21570:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22482:22:0;::::1;22474:73;;;::::0;-1:-1:-1;;;22474:73:0;;12384:2:1;22474:73:0::1;::::0;::::1;12366:21:1::0;12423:2;12403:18;;;12396:30;12462:34;12442:18;;;12435:62;-1:-1:-1;;;12513:18:1;;;12506:36;12559:19;;22474:73:0::1;12182:402:1::0;22474:73:0::1;22584:6;::::0;22563:38:::1;::::0;-1:-1:-1;;;;;22563:38:0;;::::1;::::0;22584:6:::1;::::0;22563:38:::1;::::0;22584:6:::1;::::0;22563:38:::1;22612:6;:17:::0;;-1:-1:-1;;;;;;22612:17:0::1;-1:-1:-1::0;;;;;22612:17:0;;;::::1;::::0;;;::::1;::::0;;22393:244::o;16414:181::-;16472:7;;16504:5;16508:1;16504;:5;:::i;:::-;16492:17;;16533:1;16528;:6;;16520:46;;;;-1:-1:-1;;;16520:46:0;;12791:2:1;16520:46:0;;;12773:21:1;12830:2;12810:18;;;12803:30;12869:29;12849:18;;;12842:57;12916:18;;16520:46:0;12589:351:1;16520:46:0;16586:1;16414:181;-1:-1:-1;;;16414:181:0:o;15036:380::-;-1:-1:-1;;;;;15172:19:0;;15164:68;;;;-1:-1:-1;;;15164:68:0;;13147:2:1;15164:68:0;;;13129:21:1;13186:2;13166:18;;;13159:30;13225:34;13205:18;;;13198:62;-1:-1:-1;;;13276:18:1;;;13269:34;13320:19;;15164:68:0;12945:400:1;15164:68:0;-1:-1:-1;;;;;15251:21:0;;15243:68;;;;-1:-1:-1;;;15243:68:0;;13552:2:1;15243:68:0;;;13534:21:1;13591:2;13571:18;;;13564:30;13630:34;13610:18;;;13603:62;-1:-1:-1;;;13681:18:1;;;13674:32;13723:19;;15243:68:0;13350:398:1;15243:68:0;-1:-1:-1;;;;;15324:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15376:32;;160:25:1;;;15376:32:0;;133:18:1;15376:32:0;;;;;;;;15036:380;;;:::o;34704:235::-;34804:3;34783:18;;34774:6;;:27;;;;:::i;:::-;:33;;;;:::i;:::-;34747:24;:60;34839:6;;34852:5;;34839:10;;34848:1;34839:10;:::i;:::-;:18;;;;:::i;:::-;34818;:39;34916:9;;34907:6;;34928:3;;34907:18;;;:::i;:::-;:24;;;;:::i;:::-;34890:14;:41;34704:235::o;35633:4495::-;-1:-1:-1;;;;;35765:18:0;;35757:68;;;;-1:-1:-1;;;35757:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35844:16:0;;35836:64;;;;-1:-1:-1;;;35836:64:0;;;;;;;:::i;:::-;35917:6;35927:1;35917:11;35914:92;;35945:28;35961:4;35967:2;35971:1;35945:15;:28::i;35914:92::-;36021:14;;-1:-1:-1;;;36021:14:0;;;;36018:1881;;;21431:6;;-1:-1:-1;;;;;36073:15:0;;;21431:6;;36073:15;;;;:49;;-1:-1:-1;21431:6:0;;-1:-1:-1;;;;;36109:13:0;;;21431:6;;36109:13;;36073:49;:86;;;;-1:-1:-1;;;;;;36143:16:0;;;;36073:86;:128;;;;-1:-1:-1;;;;;;36180:21:0;;36194:6;36180:21;;36073:128;:158;;;;-1:-1:-1;36223:8:0;;-1:-1:-1;;;36223:8:0;;;;36222:9;36073:158;36051:1837;;;36269:13;;-1:-1:-1;;;36269:13:0;;;;36265:148;;-1:-1:-1;;;;;36314:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;36343:23:0;;;;;;:19;:23;;;;;;;;36314:52;36306:87;;;;-1:-1:-1;;;36306:87:0;;14938:2:1;36306:87:0;;;14920:21:1;14977:2;14957:18;;;14950:30;-1:-1:-1;;;14996:18:1;;;14989:52;15058:18;;36306:87:0;14736:346:1;36306:87:0;36555:19;;-1:-1:-1;;;36555:19:0;;;;:52;;;;-1:-1:-1;;;;;;36578:29:0;;;;;;:25;:29;;;;;;;;36555:52;36551:279;;;36705:23;;36692:9;36663:39;;;;:28;:39;;;;;;:65;;36705:23;36663:65;:::i;:::-;36644:15;:84;;36636:174;;;;-1:-1:-1;;;36636:174:0;;15289:2:1;36636:174:0;;;15271:21:1;15328:2;15308:18;;;15301:30;15367:34;15347:18;;;15340:62;15438:34;15418:18;;;15411:62;-1:-1:-1;;;15489:19:1;;;15482:44;15543:19;;36636:174:0;15087:481:1;36636:174:0;36974:9;36945:39;;;;:28;:39;;;;;;;;;36987:15;36945:57;;;;37026:61;;160:25:1;;;37026:61:0;;133:18:1;37026:61:0;;;;;;;-1:-1:-1;;;;;37140:31:0;;;;;;:25;:31;;;;;;;;:75;;;;-1:-1:-1;;;;;;37176:39:0;;;;;;:35;:39;;;;;;;;37175:40;37140:75;:109;;;;-1:-1:-1;;;;;;37220:29:0;;;;;;:25;:29;;;;;;;;37219:30;37140:109;37136:737;;;37311:14;;-1:-1:-1;;;;;8939:18:0;;8912:7;8939:18;;;;;;;;;;;37285:22;;:6;:22;:::i;:::-;:40;;37277:72;;;;-1:-1:-1;;;37277:72:0;;15775:2:1;37277:72:0;;;15757:21:1;15814:2;15794:18;;;15787:30;-1:-1:-1;;;15833:18:1;;;15826:49;15892:18;;37277:72:0;15573:343:1;37277:72:0;37136:737;;;-1:-1:-1;;;;;37427:29:0;;;;;;:25;:29;;;;;;;;:75;;;;-1:-1:-1;;;;;;37461:41:0;;;;;;:35;:41;;;;;;;;37460:42;37427:75;:111;;;;-1:-1:-1;;;;;;37507:31:0;;;;;;:25;:31;;;;;;;;37506:32;37427:111;37423:450;;;37584:24;;37574:6;:34;;37566:105;;;;-1:-1:-1;;;37566:105:0;;16123:2:1;37566:105:0;;;16105:21:1;16162:2;16142:18;;;16135:30;16201:34;16181:18;;;16174:62;16272:28;16252:18;;;16245:56;16318:19;;37566:105:0;15921:422:1;37423:450:0;-1:-1:-1;;;;;37718:39:0;;;;;;:35;:39;;;;;;;;37714:159;;37815:14;;-1:-1:-1;;;;;8939:18:0;;8912:7;8939:18;;;;;;;;;;;37789:22;;:6;:22;:::i;:::-;:40;;37781:72;;;;-1:-1:-1;;;37781:72:0;;15775:2:1;37781:72:0;;;15757:21:1;15814:2;15794:18;;;15787:30;-1:-1:-1;;;15833:18:1;;;15826:49;15892:18;;37781:72:0;15573:343:1;37781:72:0;37958:4;37909:28;8939:18;;;;;;;;;;;38016;;37992:42;;;;;;;38064:33;;-1:-1:-1;38089:8:0;;-1:-1:-1;;;38089:8:0;;;;38088:9;38064:33;:61;;;;-1:-1:-1;38114:11:0;;-1:-1:-1;;;38114:11:0;;;;38064:61;:110;;;;-1:-1:-1;;;;;;38143:31:0;;;;;;:25;:31;;;;;;;;38142:32;38064:110;:153;;;;-1:-1:-1;;;;;;38192:25:0;;;;;;:19;:25;;;;;;;;38191:26;38064:153;:194;;;;-1:-1:-1;;;;;;38235:23:0;;;;;;:19;:23;;;;;;;;38234:24;38064:194;38047:325;;;38285:8;:15;;-1:-1:-1;;;;38285:15:0;-1:-1:-1;;;38285:15:0;;;38317:10;:8;:10::i;:::-;38344:8;:16;;-1:-1:-1;;;;38344:16:0;;;38047:325;38400:8;;-1:-1:-1;;;;;38424:25:0;;38384:12;38424:25;;;:19;:25;;;;;;38400:8;-1:-1:-1;;;38400:8:0;;;;;38399:9;;38424:25;;:52;;-1:-1:-1;;;;;;38453:23:0;;;;;;:19;:23;;;;;;;;38424:52;38421:99;;;-1:-1:-1;38503:5:0;38421:99;38532:12;38564:7;38561:1512;;;-1:-1:-1;;;;;38615:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;38664:1;38648:13;;:17;38615:50;38611:896;;;38692:39;38722:8;;38692:25;38703:13;;38692:6;:10;;:25;;;;:::i;:::-;:29;;:39::i;:::-;38685:46;;38788:13;;38774:11;;38767:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;38750:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;38868:13:0;;38849:16;;38842:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;38820:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;38904:18:0;;-1:-1:-1;;;38904:18:0;;;;38900:128;;;38995:13;;38976:16;;38969:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;38947:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;38900:128:0;38611:896;;;-1:-1:-1;;;;;39090:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;39140:1;39125:12;;:16;39090:51;39087:420;;;39166:38;39195:8;;39166:24;39177:12;;39166:6;:10;;:24;;;;:::i;:38::-;39159:45;;39257:12;;39244:10;;39237:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;39220:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;39335:12:0;;39317:15;;39310:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;39288:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39370:18:0;;-1:-1:-1;;;39370:18:0;;;;39366:126;;;39460:12;;39442:15;;39435:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;39413:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39366:126:0;39526:8;;39523:330;;39554:42;39570:4;39584;39591;39554:15;:42::i;:::-;39619:13;;:17;39615:223;;39661:35;39675:4;39682:13;;39661:5;:35::i;:::-;8755:12;;39719:6;:22;39764:14;:12;:14::i;:::-;39817:1;39801:13;:17;39615:223;39871:18;;:22;39867:169;;39914:65;39938:4;39945:13;39960:18;;39914:15;:65::i;:::-;40019:1;39998:18;:22;39867:169;40047:14;40057:4;40047:14;;:::i;:::-;;;38561:1512;40085:33;40101:4;40107:2;40111:6;40085:15;:33::i;:::-;35746:4382;;;;35633:4495;;;:::o;17317:192::-;17403:7;17439:12;17431:6;;;;17423:29;;;;-1:-1:-1;;;17423:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17463:9:0;17475:5;17479:1;17475;:5;:::i;:::-;17463:17;17317:192;-1:-1:-1;;;;;17317:192:0:o;35304:188::-;-1:-1:-1;;;;;35387:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;35387:39:0;;;;;;;;;;35444:40;;35387:39;;:31;35444:40;;;35304:188;;:::o;12609:573::-;-1:-1:-1;;;;;12749:20:0;;12741:70;;;;-1:-1:-1;;;12741:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12830:23:0;;12822:71;;;;-1:-1:-1;;;12822:71:0;;;;;;;:::i;:::-;12986;13008:6;12986:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12986:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12966:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13091:20;;;;;;;:32;;13116:6;13091:24;:32::i;:::-;-1:-1:-1;;;;;13068:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13139:35;160:25:1;;;13068:20:0;;13139:35;;;;;;133:18:1;13139:35:0;14:177:1;41944:460:0;42027:4;41983:23;8939:18;;;;;;;;;;;;42072:20;;;42069:34;;42095:7;;41944:460::o;42069:34::-;42136:18;;:23;;42157:2;42136:23;:::i;:::-;42118:15;:41;42115:111;;;42191:18;;:23;;42212:2;42191:23;:::i;:::-;42173:41;;42115:111;42238:33;42255:15;42238:16;:33::i;:::-;42305:1;42284:18;:22;;;42340:16;;42332:64;;-1:-1:-1;;;;;42340:16:0;;;;42370:21;;42332:64;;42305:1;42332:64;42370:21;42340:16;42332:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41944:460:0:o;17768:471::-;17826:7;18071:1;18076;18071:6;18067:47;;-1:-1:-1;18101:1:0;18094:8;;18067:47;18126:9;18138:5;18142:1;18138;:5;:::i;:::-;18126:17;-1:-1:-1;18171:1:0;18162:5;18166:1;18126:17;18162:5;:::i;:::-;:10;18154:56;;;;-1:-1:-1;;;18154:56:0;;16893:2:1;18154:56:0;;;16875:21:1;16932:2;16912:18;;;16905:30;16971:34;16951:18;;;16944:62;-1:-1:-1;;;17022:18:1;;;17015:31;17063:19;;18154:56:0;16691:397:1;18715:132:0;18773:7;18800:39;18804:1;18807;18800:39;;;;;;;;;;;;;;;;;:3;:39::i;14180:418::-;-1:-1:-1;;;;;14264:21:0;;14256:67;;;;-1:-1:-1;;;14256:67:0;;17295:2:1;14256:67:0;;;17277:21:1;17334:2;17314:18;;;17307:30;17373:34;17353:18;;;17346:62;-1:-1:-1;;;17424:18:1;;;17417:31;17465:19;;14256:67:0;17093:397:1;14256:67:0;14419:68;14442:6;14419:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14419:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;14398:18:0;;:9;:18;;;;;;;;;;:89;14513:12;;:24;;14530:6;14513:16;:24::i;:::-;14498:12;:39;14553:37;;160:25:1;;;14579:1:0;;-1:-1:-1;;;;;14553:37:0;;;;;148:2:1;133:18;14553:37:0;;;;;;;14180:418;;:::o;41345:591::-;41495:16;;;41509:1;41495:16;;;;;;;;41471:21;;41495:16;;;;;;;;;;-1:-1:-1;41495:16:0;41471:40;;41540:4;41522;41527:1;41522:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;41522:23:0;;;-1:-1:-1;;;;;41522:23:0;;;;;41566:15;-1:-1:-1;;;;;41566:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41556:4;41561:1;41556:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;41556:32:0;;;-1:-1:-1;;;;;41556:32:0;;;;;41601:62;41618:4;41633:15;41651:11;41601:8;:62::i;:::-;41702:224;;-1:-1:-1;;;41702:224:0;;-1:-1:-1;;;;;41702:15:0;:66;;;;:224;;41783:11;;41809:1;;41853:4;;41880;;41900:15;;41702:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41400:536;41345:591;:::o;19343:278::-;19429:7;19464:12;19457:5;19449:28;;;;-1:-1:-1;;;19449:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19488:9:0;19500:5;19504:1;19500;:5;:::i;16878:136::-;16936:7;16963:43;16967:1;16970;16963:43;;;;;;;;;;;;;;;;;:3;:43::i;388:548:1:-;500:4;529:2;558;547:9;540:21;590:6;584:13;633:6;628:2;617:9;613:18;606:34;658:1;668:140;682:6;679:1;676:13;668:140;;;777:14;;;773:23;;767:30;743:17;;;762:2;739:26;732:66;697:10;;668:140;;;672:3;857:1;852:2;843:6;832:9;828:22;824:31;817:42;927:2;920;916:7;911:2;903:6;899:15;895:29;884:9;880:45;876:54;868:62;;;;388:548;;;;:::o;941:131::-;-1:-1:-1;;;;;1016:31:1;;1006:42;;996:70;;1062:1;1059;1052:12;1077:247;1136:6;1189:2;1177:9;1168:7;1164:23;1160:32;1157:52;;;1205:1;1202;1195:12;1157:52;1244:9;1231:23;1263:31;1288:5;1263:31;:::i;1329:315::-;1397:6;1405;1458:2;1446:9;1437:7;1433:23;1429:32;1426:52;;;1474:1;1471;1464:12;1426:52;1513:9;1500:23;1532:31;1557:5;1532:31;:::i;:::-;1582:5;1634:2;1619:18;;;;1606:32;;-1:-1:-1;;;1329:315:1:o;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2927:316::-;3004:6;3012;3020;3073:2;3061:9;3052:7;3048:23;3044:32;3041:52;;;3089:1;3086;3079:12;3041:52;-1:-1:-1;;3112:23:1;;;3182:2;3167:18;;3154:32;;-1:-1:-1;3233:2:1;3218:18;;;3205:32;;2927:316;-1:-1:-1;2927:316:1:o;3248:416::-;3313:6;3321;3374:2;3362:9;3353:7;3349:23;3345:32;3342:52;;;3390:1;3387;3380:12;3342:52;3429:9;3416:23;3448:31;3473:5;3448:31;:::i;:::-;3498:5;-1:-1:-1;3555:2:1;3540:18;;3527:32;3597:15;;3590:23;3578:36;;3568:64;;3628:1;3625;3618:12;3568:64;3651:7;3641:17;;;3248:416;;;;;:::o;3669:388::-;3737:6;3745;3798:2;3786:9;3777:7;3773:23;3769:32;3766:52;;;3814:1;3811;3804:12;3766:52;3853:9;3840:23;3872:31;3897:5;3872:31;:::i;:::-;3922:5;-1:-1:-1;3979:2:1;3964:18;;3951:32;3992:33;3951:32;3992:33;:::i;4062:380::-;4141:1;4137:12;;;;4184;;;4205:61;;4259:4;4251:6;4247:17;4237:27;;4205:61;4312:2;4304:6;4301:14;4281:18;4278:38;4275:161;;4358:10;4353:3;4349:20;4346:1;4339:31;4393:4;4390:1;4383:15;4421:4;4418:1;4411:15;4275:161;;4062:380;;;:::o;4447:356::-;4649:2;4631:21;;;4668:18;;;4661:30;4727:34;4722:2;4707:18;;4700:62;4794:2;4779:18;;4447:356::o;4808:127::-;4869:10;4864:3;4860:20;4857:1;4850:31;4900:4;4897:1;4890:15;4924:4;4921:1;4914:15;4940:125;5005:9;;;5026:10;;;5023:36;;;5039:18;;:::i;5070:414::-;5272:2;5254:21;;;5311:2;5291:18;;;5284:30;5350:34;5345:2;5330:18;;5323:62;-1:-1:-1;;;5416:2:1;5401:18;;5394:48;5474:3;5459:19;;5070:414::o;5489:419::-;5691:2;5673:21;;;5730:2;5710:18;;;5703:30;5769:34;5764:2;5749:18;;5742:62;5840:25;5835:2;5820:18;;5813:53;5898:3;5883:19;;5489:419::o;6323:403::-;6525:2;6507:21;;;6564:2;6544:18;;;6537:30;6603:34;6598:2;6583:18;;6576:62;-1:-1:-1;;;6669:2:1;6654:18;;6647:37;6716:3;6701:19;;6323:403::o;7904:423::-;8106:2;8088:21;;;8145:2;8125:18;;;8118:30;8184:34;8179:2;8164:18;;8157:62;8255:29;8250:2;8235:18;;8228:57;8317:3;8302:19;;7904:423::o;8332:401::-;8534:2;8516:21;;;8573:2;8553:18;;;8546:30;8612:34;8607:2;8592:18;;8585:62;-1:-1:-1;;;8678:2:1;8663:18;;8656:35;8723:3;8708:19;;8332:401::o;8738:217::-;8778:1;8804;8794:132;;8848:10;8843:3;8839:20;8836:1;8829:31;8883:4;8880:1;8873:15;8911:4;8908:1;8901:15;8794:132;-1:-1:-1;8940:9:1;;8738:217::o;13753:168::-;13793:7;13859:1;13855;13851:6;13847:14;13844:1;13841:21;13836:1;13829:9;13822:17;13818:45;13815:71;;;13866:18;;:::i;:::-;-1:-1:-1;13906:9:1;;13753:168::o;13926:401::-;14128:2;14110:21;;;14167:2;14147:18;;;14140:30;14206:34;14201:2;14186:18;;14179:62;-1:-1:-1;;;14272:2:1;14257:18;;14250:35;14317:3;14302:19;;13926:401::o;14332:399::-;14534:2;14516:21;;;14573:2;14553:18;;;14546:30;14612:34;14607:2;14592:18;;14585:62;-1:-1:-1;;;14678:2:1;14663:18;;14656:33;14721:3;14706:19;;14332:399::o;16348:128::-;16415:9;;;16436:11;;;16433:37;;;16450:18;;:::i;17627:127::-;17688:10;17683:3;17679:20;17676:1;17669:31;17719:4;17716:1;17709:15;17743:4;17740:1;17733:15;17759:251;17829:6;17882:2;17870:9;17861:7;17857:23;17853:32;17850:52;;;17898:1;17895;17888:12;17850:52;17930:9;17924:16;17949:31;17974:5;17949:31;:::i;18015:980::-;18277:4;18325:3;18314:9;18310:19;18356:6;18345:9;18338:25;18382:2;18420:6;18415:2;18404:9;18400:18;18393:34;18463:3;18458:2;18447:9;18443:18;18436:31;18487:6;18522;18516:13;18553:6;18545;18538:22;18591:3;18580:9;18576:19;18569:26;;18630:2;18622:6;18618:15;18604:29;;18651:1;18661:195;18675:6;18672:1;18669:13;18661:195;;;18740:13;;-1:-1:-1;;;;;18736:39:1;18724:52;;18831:15;;;;18796:12;;;;18772:1;18690:9;18661:195;;;-1:-1:-1;;;;;;;18912:32:1;;;;18907:2;18892:18;;18885:60;-1:-1:-1;;;18976:3:1;18961:19;18954:35;18873:3;18015:980;-1:-1:-1;;;18015:980:1:o
Swarm Source
ipfs://76fce077acb5d5beea15635a11fcae3bd33ace3564e30e036b7d7e9bb27855fb
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.