ERC-20
Overview
Max Total Supply
1,000,000,000 RLETT
Holders
86
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
8,957,602.117527449591646494 RLETTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
RouletteProtocol
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-29 */ /** dapp: https://dashboard.rouletteprotocol.org/ tg: https://t.me/RouletteProtocolETH twitter: https://twitter.com/roulette_prtc whitepaper: https://rouletteprotocol.com/whitepaper */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns(address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns(uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns(uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns(bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns(uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns(bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns(bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns(string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns(string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns(uint8); } abstract contract Context { function _msgSender() internal view virtual returns(address) { return msg.sender; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) internal _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 cannot be 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 { _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"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, 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 { _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { return div(a, b, "SafeMath: division by 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; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns(address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns(uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns(uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns(uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns(uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns(uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns(uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns(uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns(uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns(uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns(uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract RouletteProtocol is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable router; address public immutable uniswapV2Pair; address private routerAddress; uint256 public mBuyAmount; uint256 public mSellAmount; uint256 public maxAmount; address private teamFeeWallet; address private multiSigWallet; uint256 private limitFeeAmountForSwap; bool private isTrading = false; bool public swapEnabled = false; bool public isSwapping; struct Fees { uint256 buyTotalFees; uint256 buyMarketingFee; uint256 buyDevelopmentFee; uint256 buyLiquidityFee; uint256 sellTotalFees; uint256 sellMarketingFee; uint256 sellDevelopmentFee; uint256 sellLiquidityFee; } Fees public _fees = Fees({ buyTotalFees: 0, buyMarketingFee: 0, buyDevelopmentFee:0, buyLiquidityFee: 0, sellTotalFees: 0, sellMarketingFee: 0, sellDevelopmentFee:0, sellLiquidityFee: 0 }); uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDevelopment; uint256 private whenTradeEnable; mapping(address => bool) private _isExcludedFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedmaxAmount; mapping(address => bool) public uniPair; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived ); constructor() ERC20("Roulette Protocol ETH", "RLETT") { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH()); uniPair[address(uniswapV2Pair)] = true; approve(address(router), type(uint256).max); uint256 totalSupply = 1e9 * 1e18; mBuyAmount = totalSupply * 2 / 100; // 2% buy max amount mSellAmount = totalSupply * 2 / 100; // 2% sell max amount maxAmount = totalSupply * 2 / 100; // 2% max wallet amount limitFeeAmountForSwap = totalSupply * 5 / 10000; _fees.buyMarketingFee = 2; _fees.buyLiquidityFee = 0; _fees.buyDevelopmentFee = 1; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee; _fees.sellMarketingFee = 2; _fees.sellLiquidityFee = 0; _fees.sellDevelopmentFee = 1; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee; multiSigWallet = address(0xFC1Ff0C7d0648Bdae11B0Cc301F7c7cBd025d2D2); teamFeeWallet = address(0xb7d96c82542049e1817420dc8BcC1d31eA807806); _isExcludedMaxTransactionAmount[address(router)] = true; _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedMaxTransactionAmount[address(0xdead)] = true; _isExcludedMaxTransactionAmount[multiSigWallet] = true; _isExcludedMaxTransactionAmount[teamFeeWallet] = true; _isExcludedFees[owner()] = true; _isExcludedFees[address(this)] = true; _isExcludedFees[multiSigWallet] = true; _isExcludedFees[teamFeeWallet] = true; _isExcludedmaxAmount[owner()] = true; _isExcludedmaxAmount[address(router)] = true; _isExcludedmaxAmount[address(0xdead)] = true; _isExcludedmaxAmount[address(this)] = true; _isExcludedmaxAmount[address(uniswapV2Pair)] = true; _isExcludedmaxAmount[multiSigWallet] = true; _isExcludedmaxAmount[teamFeeWallet] = true; routerAddress = multiSigWallet; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { require(msg.sender != address(this)); } // once active, can never be diable off function openTrade() external onlyOwner { isTrading = true; swapEnabled = true; whenTradeEnable = block.number; } // change the minimum amount of tokens to sell from fees function updateMaxTradeAmount(uint256 newMaxBuy, uint256 newMaxSell) public onlyOwner { mBuyAmount = (totalSupply() * newMaxBuy) / 1000; mSellAmount = (totalSupply() * newMaxSell) / 1000; } function updateLimitFeeAmountForSwap(uint256 newAmount) external onlyOwner returns(bool){ limitFeeAmountForSwap = newAmount; return true; } // emergency use only function toggleSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateMaxAmount(uint256 newPercentage) public onlyOwner { maxAmount = (totalSupply() * newPercentage) / 1000; } function updateAllFees(uint256 _marketingFeeBuy, uint256 _liquidityFeeBuy,uint256 _developmentFeeBuy,uint256 _marketingFeeSell, uint256 _liquidityFeeSell,uint256 _developmentFeeSell) external onlyOwner{ _fees.buyMarketingFee = _marketingFeeBuy; _fees.buyLiquidityFee = _liquidityFeeBuy; _fees.buyDevelopmentFee = _developmentFeeBuy; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee; _fees.sellMarketingFee = _marketingFeeSell; _fees.sellLiquidityFee = _liquidityFeeSell; _fees.sellDevelopmentFee = _developmentFeeSell; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee; require(_fees.buyTotalFees <= 40, "Must keep fees at 40% or less"); require(_fees.sellTotalFees <= 40, "Must keep fees at 40% or less"); } function updateTeamFeeWallet(address _teamFeeWallet) external { require(msg.sender == teamFeeWallet && _teamFeeWallet != teamFeeWallet, "Team Fee Wallet wallet is already that address"); teamFeeWallet = _teamFeeWallet; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedmaxAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function removeTradeMaxAmountLimit() external onlyOwner { updateMaxTradeAmount(1000,1000); updateMaxAmount(1000); } function setUniPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from uniPair"); uniPair[pair] = value; } function _transfer( address from, address to, uint256 amount ) internal override { if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && !isSwapping ) { if (!isTrading) { require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active."); } if (uniPair[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= mBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount."); } else if (uniPair[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= mSellAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedmaxAmount[to]) { require(amount + balanceOf(to) <= maxAmount, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= limitFeeAmountForSwap; if ( canSwap && swapEnabled && !isSwapping && uniPair[to] && !_isExcludedFees[from] && !_isExcludedFees[to] ) { isSwapping = true; getEthFee(to); isSwapping = false; } bool takeFee = !isSwapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFees[from] || _isExcludedFees[to]) { takeFee = false; } // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { uint256 fees = 0; if(block.number < whenTradeEnable) { fees = amount.mul(99).div(100); tokensForMarketing += (fees * 94) / 99; tokensForDevelopment += (fees * 5) / 99; } else if (uniPair[to] && _fees.sellTotalFees > 0) { fees = amount.mul(_fees.sellTotalFees).div(100); tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees; tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees; tokensForDevelopment += fees * _fees.sellDevelopmentFee / _fees.sellTotalFees; } // on buy else if (uniPair[from] && _fees.buyTotalFees > 0) { fees = amount.mul(_fees.buyTotalFees).div(100); tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees; tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees; tokensForDevelopment += fees * _fees.buyDevelopmentFee / _fees.buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function _swapTokensForSupportingEthFee(uint256 tAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tAmount); // add the liquidity router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp); } function getEthFee(address to) private { uint256 contractTokenBalance = balanceOf(address(this)); uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment; if (contractTokenBalance == 0) { return; } if (contractTokenBalance > limitFeeAmountForSwap * 35) { contractTokenBalance = limitFeeAmountForSwap * 35; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2; uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _approve(to, routerAddress, amountToSwapForETH * 1e18); _swapTokensForSupportingEthFee(amountToSwapForETH); uint256 newBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap); uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap); uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment); tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDevelopment = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity); } payable(address(teamFeeWallet)).transfer(address(this).balance - ethForMarketing); payable(address(multiSigWallet)).transfer(address(this).balance); } function withdraw() external returns (bool success) { uint256 balance = address(this).balance; (success,) = address(multiSigWallet).call{value: balance}(""); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFees[account]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","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"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxAmount","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTradeMaxAmountLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeSell","type":"uint256"}],"name":"updateAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateLimitFeeAmountForSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTradeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamFeeWallet","type":"address"}],"name":"updateTeamFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff021916908315150217905550604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600e600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050348015620000dd57600080fd5b506040518060400160405280601581526020017f526f756c657474652050726f746f636f6c2045544800000000000000000000008152506040518060400160405280600581526020017f524c45545400000000000000000000000000000000000000000000000000000081525081600390816200015b9190620013ef565b5080600490816200016d9190620013ef565b50505060006200018262000e3560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062001540565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036d919062001540565b6040518363ffffffff1660e01b81526004016200038c92919062001583565b6020604051808303816000875af1158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d2919062001540565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001601d600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004936080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000e3d60201b60201c565b5060006b033b2e3c9fd0803ce800000090506064600282620004b69190620015df565b620004c2919062001659565b6007819055506064600282620004d99190620015df565b620004e5919062001659565b6008819055506064600282620004fc9190620015df565b62000508919062001659565b600981905550612710600582620005209190620015df565b6200052c919062001659565b600c819055506002600e600101819055506000600e600301819055506001600e60020181905550600e60020154600e60030154600e6001015462000571919062001691565b6200057d919062001691565b600e600001819055506002600e600501819055506000600e600701819055506001600e60060181905550600e60060154600e60070154600e60050154620005c5919062001691565b620005d1919062001691565b600e6004018190555073fc1ff0c7d0648bdae11b0cc301f7c7cbd025d2d2600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b7d96c82542049e1817420dc8bcc1d31ea807806600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60006200074e62000e6b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60006200095b62000e6b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600062000b0e62000e6b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000e2e338262000e9560201b60201c565b50620017ef565b600033905090565b600062000e6162000e5362000e3560201b60201c565b84846200102560201b60201c565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000efe906200172d565b60405180910390fd5b62000f1e816002546200111260201b90919060201c565b60028190555062000f77816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200111260201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001019919062001760565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162001105919062001760565b60405180910390a3505050565b600080828462001123919062001691565b9050838110156200116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200116290620017cd565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011f757607f821691505b6020821081036200120d576200120c620011af565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620012777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001238565b62001283868362001238565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620012d0620012ca620012c4846200129b565b620012a5565b6200129b565b9050919050565b6000819050919050565b620012ec83620012af565b62001304620012fb82620012d7565b84845462001245565b825550505050565b600090565b6200131b6200130c565b62001328818484620012e1565b505050565b5b8181101562001350576200134460008262001311565b6001810190506200132e565b5050565b601f8211156200139f57620013698162001213565b620013748462001228565b8101602085101562001384578190505b6200139c620013938562001228565b8301826200132d565b50505b505050565b600082821c905092915050565b6000620013c460001984600802620013a4565b1980831691505092915050565b6000620013df8383620013b1565b9150826002028217905092915050565b620013fa8262001175565b67ffffffffffffffff81111562001416576200141562001180565b5b620014228254620011de565b6200142f82828562001354565b600060209050601f83116001811462001467576000841562001452578287015190505b6200145e8582620013d1565b865550620014ce565b601f198416620014778662001213565b60005b82811015620014a1578489015182556001820191506020850194506020810190506200147a565b86831015620014c15784890151620014bd601f891682620013b1565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200150882620014db565b9050919050565b6200151a81620014fb565b81146200152657600080fd5b50565b6000815190506200153a816200150f565b92915050565b600060208284031215620015595762001558620014d6565b5b6000620015698482850162001529565b91505092915050565b6200157d81620014fb565b82525050565b60006040820190506200159a600083018562001572565b620015a9602083018462001572565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620015ec826200129b565b9150620015f9836200129b565b925082820262001609816200129b565b91508282048414831517620016235762001622620015b0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062001666826200129b565b915062001673836200129b565b9250826200168657620016856200162a565b5b828204905092915050565b60006200169e826200129b565b9150620016ab836200129b565b9250828201905080821115620016c657620016c5620015b0565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001715601f83620016cc565b91506200172282620016dd565b602082019050919050565b60006020820190508181036000830152620017488162001706565b9050919050565b6200175a816200129b565b82525050565b60006020820190506200177760008301846200174f565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620017b5601b83620016cc565b9150620017c2826200177d565b602082019050919050565b60006020820190508181036000830152620017e881620017a6565b9050919050565b60805160a0516145276200183f60003960008181610cad0152611223015260008181611f10015281816131c0015281816132a1015281816132c801528181613364015261338b01526145276000f3fe6080604052600436106102555760003560e01c80636f895e5411610139578063a9059cbb116100b6578063e16830a81161007a578063e16830a81461093a578063eb32522114610963578063ef8700e5146109a0578063f2fde38b146109cb578063f887ea40146109f4578063fb201b1d14610a1f57610294565b8063a9059cbb1461083a578063b886311514610877578063c0246668146108a2578063d212a69a146108cb578063dd62ed3e146108fd57610294565b80638da5cb5b116100fd5780638da5cb5b1461073f57806395d89b411461076a578063963932b4146107955780639dfd7c13146107d2578063a457c2d7146107fd57610294565b80636f895e541461065c57806370a0823114610699578063715018a6146106d65780637571336a146106ed578063840a16c51461071657610294565b80631f3fed8f116101d25780633ccfd60b116101965780633ccfd60b1461054a57806349bd5a5e146105755780634fbee193146105a05780635b216fa8146105dd5780635f48f393146106065780636ddd17131461063157610294565b80631f3fed8f1461044f578063234900a61461047a57806323b872dd146104a5578063313ce567146104e2578063395093511461050d57610294565b806310d5de531161021957806310d5de531461037c578063124f236e146103b957806318160ddd146103d05780631a8145bb146103fb5780631c6e8a751461042657610294565b806306fdde0314610299578063095ea7b3146102c45780630a696ceb146103015780630b1c71821461032a578063106b5da11461035357610294565b36610294573073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361029257600080fd5b005b600080fd5b3480156102a557600080fd5b506102ae610a36565b6040516102bb919061352b565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906135e6565b610ac8565b6040516102f89190613641565b60405180910390f35b34801561030d57600080fd5b506103286004803603810190610323919061365c565b610ae6565b005b34801561033657600080fd5b50610351600480360381019061034c91906136b5565b610c14565b005b34801561035f57600080fd5b5061037a600480360381019061037591906136f5565b610d94565b005b34801561038857600080fd5b506103a3600480360381019061039e919061365c565b610e54565b6040516103b09190613641565b60405180910390f35b3480156103c557600080fd5b506103ce610e74565b005b3480156103dc57600080fd5b506103e5610f24565b6040516103f29190613731565b60405180910390f35b34801561040757600080fd5b50610410610f2e565b60405161041d9190613731565b60405180910390f35b34801561043257600080fd5b5061044d6004803603810190610448919061374c565b610f34565b005b34801561045b57600080fd5b50610464610fe8565b6040516104719190613731565b60405180910390f35b34801561048657600080fd5b5061048f610fee565b60405161049c9190613731565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613779565b610ff4565b6040516104d99190613641565b60405180910390f35b3480156104ee57600080fd5b506104f76110cd565b60405161050491906137e8565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906135e6565b6110d6565b6040516105419190613641565b60405180910390f35b34801561055657600080fd5b5061055f611189565b60405161056c9190613641565b60405180910390f35b34801561058157600080fd5b5061058a611221565b6040516105979190613812565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061365c565b611245565b6040516105d49190613641565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff919061382d565b61129b565b005b34801561061257600080fd5b5061061b611466565b6040516106289190613731565b60405180910390f35b34801561063d57600080fd5b5061064661146c565b6040516106539190613641565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061365c565b61147f565b6040516106909190613641565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb919061365c565b61149f565b6040516106cd9190613731565b60405180910390f35b3480156106e257600080fd5b506106eb6114e7565b005b3480156106f957600080fd5b50610714600480360381019061070f91906136b5565b61163f565b005b34801561072257600080fd5b5061073d600480360381019061073891906138ba565b611731565b005b34801561074b57600080fd5b50610754611818565b6040516107619190613812565b60405180910390f35b34801561077657600080fd5b5061077f611842565b60405161078c919061352b565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906136f5565b6118d4565b6040516107c99190613641565b60405180910390f35b3480156107de57600080fd5b506107e761197d565b6040516107f49190613731565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906135e6565b611983565b6040516108319190613641565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906135e6565b611a50565b60405161086e9190613641565b60405180910390f35b34801561088357600080fd5b5061088c611a6e565b6040516108999190613641565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c491906136b5565b611a81565b005b3480156108d757600080fd5b506108e0611b73565b6040516108f49897969594939291906138fa565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190613978565b611ba9565b6040516109319190613731565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c91906136b5565b611c30565b005b34801561096f57600080fd5b5061098a6004803603810190610985919061365c565b611d22565b6040516109979190613641565b60405180910390f35b3480156109ac57600080fd5b506109b5611d42565b6040516109c29190613731565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed919061365c565b611d48565b005b348015610a0057600080fd5b50610a09611f0e565b604051610a169190613a17565b60405180910390f35b348015610a2b57600080fd5b50610a34611f32565b005b606060038054610a4590613a61565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190613a61565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610adc610ad5612008565b8484612010565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015610b915750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613b04565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c1c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613b70565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613c02565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d9c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613b70565b60405180910390fd5b6103e881610e37610f24565b610e419190613c51565b610e4b9190613cc2565b60098190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b610e7c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0290613b70565b60405180910390fd5b610f176103e880611731565b610f226103e8610d94565b565b6000600254905090565b60175481565b610f3c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290613b70565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b60165481565b60075481565b60006110018484846120fb565b6110c28461100d612008565b6110bd856040518060600160405280602881526020016144ca60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611073612008565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b612010565b600190509392505050565b60006012905090565b600061117f6110e3612008565b8461117a85600160006110f4612008565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3590919063ffffffff16565b612010565b6001905092915050565b600080479050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516111d590613d24565b60006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b5050809250505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112a3612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990613b70565b60405180910390fd5b85600e6001018190555084600e6003018190555083600e60020181905550600e60020154600e60030154600e6001015461136c9190613d39565b6113769190613d39565b600e6000018190555082600e6005018190555081600e6007018190555080600e60060181905550600e60060154600e60070154600e600501546113b99190613d39565b6113c39190613d39565b600e600401819055506028600e600001541115611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613db9565b60405180910390fd5b6028600e60040154111561145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590613db9565b60405180910390fd5b505050505050565b60095481565b600d60019054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114ef612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590613b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611647612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613b70565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611739612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90613b70565b60405180910390fd5b6103e8826117d4610f24565b6117de9190613c51565b6117e89190613cc2565b6007819055506103e8816117fa610f24565b6118049190613c51565b61180e9190613cc2565b6008819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461185190613a61565b80601f016020809104026020016040519081016040528092919081815260200182805461187d90613a61565b80156118ca5780601f1061189f576101008083540402835291602001916118ca565b820191906000526020600020905b8154815290600101906020018083116118ad57829003601f168201915b5050505050905090565b60006118de612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613b70565b60405180910390fd5b81600c8190555060019050919050565b60085481565b6000611a46611990612008565b84611a418560405180606001604052806025815260200161447f60259139600160006119ba612008565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b612010565b6001905092915050565b6000611a64611a5d612008565b84846120fb565b6001905092915050565b600d60029054906101000a900460ff1681565b611a89612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90613b70565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c38612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613b70565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60185481565b611d50612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690613b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613e4b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611f3a612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc090613b70565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043601981905550565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ee9190613731565b60405180910390a3505050565b600081036121145761210f83836000612b93565b612acc565b61211c611818565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561218a575061215a611818565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121a35750600d60029054906101000a900460ff16155b1561252957600d60009054906101000a900460ff1661229d57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061225d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390613eb7565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123405750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238f5760075481111561238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190613f49565b60405180910390fd5b61247e565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124325750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561247d5760085481111561247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613fdb565b60405180910390fd5b5b5b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612528576009546124db8361149f565b826124e69190613d39565b1115612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90614047565b60405180910390fd5b5b5b60006125343061149f565b90506000600c5482101590508080156125595750600d60019054906101000a900460ff165b80156125725750600d60029054906101000a900460ff16155b80156125c75750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561261d5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126735750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126b8576001600d60026101000a81548160ff02191690831515021790555061269c84612d3d565b6000600d60026101000a81548160ff0219169083151502179055505b6000600d60029054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561277857600090505b8015612abd57600060195443101561281a576127b160646127a360638861301390919063ffffffff16565b61308d90919063ffffffff16565b90506063605e826127c29190613c51565b6127cc9190613cc2565b601660008282546127dd9190613d39565b9250508190555060636005826127f39190613c51565b6127fd9190613cc2565b6018600082825461280e9190613d39565b92505081905550612a98565b601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561287857506000600e60040154115b1561295a576128a8606461289a600e600401548861301390919063ffffffff16565b61308d90919063ffffffff16565b9050600e60040154600e60070154826128c19190613c51565b6128cb9190613cc2565b601760008282546128dc9190613d39565b92505081905550600e60040154600e60050154826128fa9190613c51565b6129049190613cc2565b601660008282546129159190613d39565b92505081905550600e60040154600e60060154826129339190613c51565b61293d9190613cc2565b6018600082825461294e9190613d39565b92505081905550612a97565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129b857506000600e60000154115b15612a96576129e860646129da600e600001548861301390919063ffffffff16565b61308d90919063ffffffff16565b9050600e60000154600e6003015482612a019190613c51565b612a0b9190613cc2565b60176000828254612a1c9190613d39565b92505081905550600e60000154600e6001015482612a3a9190613c51565b612a449190613cc2565b60166000828254612a559190613d39565b92505081905550600e60000154600e6002015482612a739190613c51565b612a7d9190613cc2565b60186000828254612a8e9190613d39565b925050819055505b5b5b6000811115612aad57612aac873083612b93565b5b8085612ab99190614067565b9450505b612ac8868686612b93565b5050505b505050565b6000838311158290612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b10919061352b565b60405180910390fd5b5060008385612b289190614067565b9050809150509392505050565b6000808284612b449190613d39565b905083811015612b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b80906140e7565b60405180910390fd5b8091505092915050565b612bfe816040518060600160405280602681526020016144a4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c91816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d309190613731565b60405180910390a3505050565b6000612d483061149f565b90506000601854601654601754612d5f9190613d39565b612d699190613d39565b905060008203612d7a575050613010565b6023600c54612d899190613c51565b821115612da2576023600c54612d9f9190613c51565b91505b600060028260175485612db59190613c51565b612dbf9190613cc2565b612dc99190613cc2565b90506000612de082856130d790919063ffffffff16565b90506000479050612e2786600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a764000085612e229190613c51565b612010565b612e3082613121565b6000612e4582476130d790919063ffffffff16565b90506000612e7086612e626016548561301390919063ffffffff16565b61308d90919063ffffffff16565b90506000612e9b87612e8d6018548661301390919063ffffffff16565b61308d90919063ffffffff16565b905060008183612eab9190613d39565b84612eb69190614067565b9050600060178190555060006016819055506000601881905550600087118015612ee05750600081115b15612f2957612eef878261335e565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612f20929190614107565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8447612f719190614067565b9081150290604051600060405180830381858888f19350505050158015612f9c573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613005573d6000803e3d6000fd5b505050505050505050505b50565b60008083036130255760009050613087565b600082846130339190613c51565b90508284826130429190613cc2565b14613082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613079906141a2565b60405180910390fd5b809150505b92915050565b60006130cf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613438565b905092915050565b600061311983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ad1565b905092915050565b6000600267ffffffffffffffff81111561313e5761313d6141c2565b5b60405190808252806020026020018201604052801561316c5781602001602082028036833780820191505090505b5090503081600081518110613184576131836141f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324d9190614235565b81600181518110613261576132606141f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132c6307f000000000000000000000000000000000000000000000000000000000000000084612010565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161332895949392919061435b565b600060405180830381600087803b15801561334257600080fd5b505af1158015613356573d6000803e3d6000fd5b505050505050565b613389307f000000000000000000000000000000000000000000000000000000000000000084612010565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016133ee969594939291906143b5565b60606040518083038185885af115801561340c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613431919061442b565b5050505050565b6000808311829061347f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613476919061352b565b60405180910390fd5b506000838561348e9190613cc2565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134d55780820151818401526020810190506134ba565b60008484015250505050565b6000601f19601f8301169050919050565b60006134fd8261349b565b61350781856134a6565b93506135178185602086016134b7565b613520816134e1565b840191505092915050565b6000602082019050818103600083015261354581846134f2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061357d82613552565b9050919050565b61358d81613572565b811461359857600080fd5b50565b6000813590506135aa81613584565b92915050565b6000819050919050565b6135c3816135b0565b81146135ce57600080fd5b50565b6000813590506135e0816135ba565b92915050565b600080604083850312156135fd576135fc61354d565b5b600061360b8582860161359b565b925050602061361c858286016135d1565b9150509250929050565b60008115159050919050565b61363b81613626565b82525050565b60006020820190506136566000830184613632565b92915050565b6000602082840312156136725761367161354d565b5b60006136808482850161359b565b91505092915050565b61369281613626565b811461369d57600080fd5b50565b6000813590506136af81613689565b92915050565b600080604083850312156136cc576136cb61354d565b5b60006136da8582860161359b565b92505060206136eb858286016136a0565b9150509250929050565b60006020828403121561370b5761370a61354d565b5b6000613719848285016135d1565b91505092915050565b61372b816135b0565b82525050565b60006020820190506137466000830184613722565b92915050565b6000602082840312156137625761376161354d565b5b6000613770848285016136a0565b91505092915050565b6000806000606084860312156137925761379161354d565b5b60006137a08682870161359b565b93505060206137b18682870161359b565b92505060406137c2868287016135d1565b9150509250925092565b600060ff82169050919050565b6137e2816137cc565b82525050565b60006020820190506137fd60008301846137d9565b92915050565b61380c81613572565b82525050565b60006020820190506138276000830184613803565b92915050565b60008060008060008060c0878903121561384a5761384961354d565b5b600061385889828a016135d1565b965050602061386989828a016135d1565b955050604061387a89828a016135d1565b945050606061388b89828a016135d1565b935050608061389c89828a016135d1565b92505060a06138ad89828a016135d1565b9150509295509295509295565b600080604083850312156138d1576138d061354d565b5b60006138df858286016135d1565b92505060206138f0858286016135d1565b9150509250929050565b600061010082019050613910600083018b613722565b61391d602083018a613722565b61392a6040830189613722565b6139376060830188613722565b6139446080830187613722565b61395160a0830186613722565b61395e60c0830185613722565b61396b60e0830184613722565b9998505050505050505050565b6000806040838503121561398f5761398e61354d565b5b600061399d8582860161359b565b92505060206139ae8582860161359b565b9150509250929050565b6000819050919050565b60006139dd6139d86139d384613552565b6139b8565b613552565b9050919050565b60006139ef826139c2565b9050919050565b6000613a01826139e4565b9050919050565b613a11816139f6565b82525050565b6000602082019050613a2c6000830184613a08565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a7957607f821691505b602082108103613a8c57613a8b613a32565b5b50919050565b7f5465616d204665652057616c6c65742077616c6c657420697320616c7265616460008201527f7920746861742061646472657373000000000000000000000000000000000000602082015250565b6000613aee602e836134a6565b9150613af982613a92565b604082019050919050565b60006020820190508181036000830152613b1d81613ae1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5a6020836134a6565b9150613b6582613b24565b602082019050919050565b60006020820190508181036000830152613b8981613b4d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f756e695061697200000000000000000000000000000000000000000000000000602082015250565b6000613bec6027836134a6565b9150613bf782613b90565b604082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c5c826135b0565b9150613c67836135b0565b9250828202613c75816135b0565b91508282048414831517613c8c57613c8b613c22565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ccd826135b0565b9150613cd8836135b0565b925082613ce857613ce7613c93565b5b828204905092915050565b600081905092915050565b50565b6000613d0e600083613cf3565b9150613d1982613cfe565b600082019050919050565b6000613d2f82613d01565b9150819050919050565b6000613d44826135b0565b9150613d4f836135b0565b9250828201905080821115613d6757613d66613c22565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000613da3601d836134a6565b9150613dae82613d6d565b602082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e356026836134a6565b9150613e4082613dd9565b604082019050919050565b60006020820190508181036000830152613e6481613e28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613ea16016836134a6565b9150613eac82613e6b565b602082019050919050565b60006020820190508181036000830152613ed081613e94565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613f336035836134a6565b9150613f3e82613ed7565b604082019050919050565b60006020820190508181036000830152613f6281613f26565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613fc56036836134a6565b9150613fd082613f69565b604082019050919050565b60006020820190508181036000830152613ff481613fb8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140316013836134a6565b915061403c82613ffb565b602082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b6000614072826135b0565b915061407d836135b0565b925082820390508181111561409557614094613c22565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006140d1601b836134a6565b91506140dc8261409b565b602082019050919050565b60006020820190508181036000830152614100816140c4565b9050919050565b600060408201905061411c6000830185613722565b6141296020830184613722565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061418c6021836134a6565b915061419782614130565b604082019050919050565b600060208201905081810360008301526141bb8161417f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061422f81613584565b92915050565b60006020828403121561424b5761424a61354d565b5b600061425984828501614220565b91505092915050565b6000819050919050565b600061428761428261427d84614262565b6139b8565b6135b0565b9050919050565b6142978161426c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142d281613572565b82525050565b60006142e483836142c9565b60208301905092915050565b6000602082019050919050565b60006143088261429d565b61431281856142a8565b935061431d836142b9565b8060005b8381101561434e57815161433588826142d8565b9750614340836142f0565b925050600181019050614321565b5085935050505092915050565b600060a0820190506143706000830188613722565b61437d602083018761428e565b818103604083015261438f81866142fd565b905061439e6060830185613803565b6143ab6080830184613722565b9695505050505050565b600060c0820190506143ca6000830189613803565b6143d76020830188613722565b6143e4604083018761428e565b6143f1606083018661428e565b6143fe6080830185613803565b61440b60a0830184613722565b979650505050505050565b600081519050614425816135ba565b92915050565b6000806000606084860312156144445761444361354d565b5b600061445286828701614416565b935050602061446386828701614416565b925050604061447486828701614416565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122098be803366c6e2e2055780e8c66066f51004636d83f4f139e81ebc849b7f916564736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102555760003560e01c80636f895e5411610139578063a9059cbb116100b6578063e16830a81161007a578063e16830a81461093a578063eb32522114610963578063ef8700e5146109a0578063f2fde38b146109cb578063f887ea40146109f4578063fb201b1d14610a1f57610294565b8063a9059cbb1461083a578063b886311514610877578063c0246668146108a2578063d212a69a146108cb578063dd62ed3e146108fd57610294565b80638da5cb5b116100fd5780638da5cb5b1461073f57806395d89b411461076a578063963932b4146107955780639dfd7c13146107d2578063a457c2d7146107fd57610294565b80636f895e541461065c57806370a0823114610699578063715018a6146106d65780637571336a146106ed578063840a16c51461071657610294565b80631f3fed8f116101d25780633ccfd60b116101965780633ccfd60b1461054a57806349bd5a5e146105755780634fbee193146105a05780635b216fa8146105dd5780635f48f393146106065780636ddd17131461063157610294565b80631f3fed8f1461044f578063234900a61461047a57806323b872dd146104a5578063313ce567146104e2578063395093511461050d57610294565b806310d5de531161021957806310d5de531461037c578063124f236e146103b957806318160ddd146103d05780631a8145bb146103fb5780631c6e8a751461042657610294565b806306fdde0314610299578063095ea7b3146102c45780630a696ceb146103015780630b1c71821461032a578063106b5da11461035357610294565b36610294573073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361029257600080fd5b005b600080fd5b3480156102a557600080fd5b506102ae610a36565b6040516102bb919061352b565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906135e6565b610ac8565b6040516102f89190613641565b60405180910390f35b34801561030d57600080fd5b506103286004803603810190610323919061365c565b610ae6565b005b34801561033657600080fd5b50610351600480360381019061034c91906136b5565b610c14565b005b34801561035f57600080fd5b5061037a600480360381019061037591906136f5565b610d94565b005b34801561038857600080fd5b506103a3600480360381019061039e919061365c565b610e54565b6040516103b09190613641565b60405180910390f35b3480156103c557600080fd5b506103ce610e74565b005b3480156103dc57600080fd5b506103e5610f24565b6040516103f29190613731565b60405180910390f35b34801561040757600080fd5b50610410610f2e565b60405161041d9190613731565b60405180910390f35b34801561043257600080fd5b5061044d6004803603810190610448919061374c565b610f34565b005b34801561045b57600080fd5b50610464610fe8565b6040516104719190613731565b60405180910390f35b34801561048657600080fd5b5061048f610fee565b60405161049c9190613731565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613779565b610ff4565b6040516104d99190613641565b60405180910390f35b3480156104ee57600080fd5b506104f76110cd565b60405161050491906137e8565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906135e6565b6110d6565b6040516105419190613641565b60405180910390f35b34801561055657600080fd5b5061055f611189565b60405161056c9190613641565b60405180910390f35b34801561058157600080fd5b5061058a611221565b6040516105979190613812565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061365c565b611245565b6040516105d49190613641565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff919061382d565b61129b565b005b34801561061257600080fd5b5061061b611466565b6040516106289190613731565b60405180910390f35b34801561063d57600080fd5b5061064661146c565b6040516106539190613641565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061365c565b61147f565b6040516106909190613641565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb919061365c565b61149f565b6040516106cd9190613731565b60405180910390f35b3480156106e257600080fd5b506106eb6114e7565b005b3480156106f957600080fd5b50610714600480360381019061070f91906136b5565b61163f565b005b34801561072257600080fd5b5061073d600480360381019061073891906138ba565b611731565b005b34801561074b57600080fd5b50610754611818565b6040516107619190613812565b60405180910390f35b34801561077657600080fd5b5061077f611842565b60405161078c919061352b565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906136f5565b6118d4565b6040516107c99190613641565b60405180910390f35b3480156107de57600080fd5b506107e761197d565b6040516107f49190613731565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906135e6565b611983565b6040516108319190613641565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906135e6565b611a50565b60405161086e9190613641565b60405180910390f35b34801561088357600080fd5b5061088c611a6e565b6040516108999190613641565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c491906136b5565b611a81565b005b3480156108d757600080fd5b506108e0611b73565b6040516108f49897969594939291906138fa565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190613978565b611ba9565b6040516109319190613731565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c91906136b5565b611c30565b005b34801561096f57600080fd5b5061098a6004803603810190610985919061365c565b611d22565b6040516109979190613641565b60405180910390f35b3480156109ac57600080fd5b506109b5611d42565b6040516109c29190613731565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed919061365c565b611d48565b005b348015610a0057600080fd5b50610a09611f0e565b604051610a169190613a17565b60405180910390f35b348015610a2b57600080fd5b50610a34611f32565b005b606060038054610a4590613a61565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190613a61565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610adc610ad5612008565b8484612010565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015610b915750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613b04565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c1c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613b70565b60405180910390fd5b7f000000000000000000000000e2e5ec86a174c1ddaee545f36914baf28e27003873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613c02565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d9c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613b70565b60405180910390fd5b6103e881610e37610f24565b610e419190613c51565b610e4b9190613cc2565b60098190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b610e7c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0290613b70565b60405180910390fd5b610f176103e880611731565b610f226103e8610d94565b565b6000600254905090565b60175481565b610f3c612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290613b70565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b60165481565b60075481565b60006110018484846120fb565b6110c28461100d612008565b6110bd856040518060600160405280602881526020016144ca60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611073612008565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b612010565b600190509392505050565b60006012905090565b600061117f6110e3612008565b8461117a85600160006110f4612008565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3590919063ffffffff16565b612010565b6001905092915050565b600080479050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516111d590613d24565b60006040518083038185875af1925050503d8060008114611212576040519150601f19603f3d011682016040523d82523d6000602084013e611217565b606091505b5050809250505090565b7f000000000000000000000000e2e5ec86a174c1ddaee545f36914baf28e27003881565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112a3612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990613b70565b60405180910390fd5b85600e6001018190555084600e6003018190555083600e60020181905550600e60020154600e60030154600e6001015461136c9190613d39565b6113769190613d39565b600e6000018190555082600e6005018190555081600e6007018190555080600e60060181905550600e60060154600e60070154600e600501546113b99190613d39565b6113c39190613d39565b600e600401819055506028600e600001541115611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613db9565b60405180910390fd5b6028600e60040154111561145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590613db9565b60405180910390fd5b505050505050565b60095481565b600d60019054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114ef612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590613b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611647612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613b70565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611739612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90613b70565b60405180910390fd5b6103e8826117d4610f24565b6117de9190613c51565b6117e89190613cc2565b6007819055506103e8816117fa610f24565b6118049190613c51565b61180e9190613cc2565b6008819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461185190613a61565b80601f016020809104026020016040519081016040528092919081815260200182805461187d90613a61565b80156118ca5780601f1061189f576101008083540402835291602001916118ca565b820191906000526020600020905b8154815290600101906020018083116118ad57829003601f168201915b5050505050905090565b60006118de612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613b70565b60405180910390fd5b81600c8190555060019050919050565b60085481565b6000611a46611990612008565b84611a418560405180606001604052806025815260200161447f60259139600160006119ba612008565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b612010565b6001905092915050565b6000611a64611a5d612008565b84846120fb565b6001905092915050565b600d60029054906101000a900460ff1681565b611a89612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90613b70565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c38612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613b70565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60185481565b611d50612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690613b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613e4b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b611f3a612008565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc090613b70565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043601981905550565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ee9190613731565b60405180910390a3505050565b600081036121145761210f83836000612b93565b612acc565b61211c611818565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561218a575061215a611818565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121a35750600d60029054906101000a900460ff16155b1561252957600d60009054906101000a900460ff1661229d57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061225d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390613eb7565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123405750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238f5760075481111561238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190613f49565b60405180910390fd5b61247e565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124325750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561247d5760085481111561247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613fdb565b60405180910390fd5b5b5b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612528576009546124db8361149f565b826124e69190613d39565b1115612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90614047565b60405180910390fd5b5b5b60006125343061149f565b90506000600c5482101590508080156125595750600d60019054906101000a900460ff165b80156125725750600d60029054906101000a900460ff16155b80156125c75750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561261d5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126735750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126b8576001600d60026101000a81548160ff02191690831515021790555061269c84612d3d565b6000600d60026101000a81548160ff0219169083151502179055505b6000600d60029054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561277857600090505b8015612abd57600060195443101561281a576127b160646127a360638861301390919063ffffffff16565b61308d90919063ffffffff16565b90506063605e826127c29190613c51565b6127cc9190613cc2565b601660008282546127dd9190613d39565b9250508190555060636005826127f39190613c51565b6127fd9190613cc2565b6018600082825461280e9190613d39565b92505081905550612a98565b601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561287857506000600e60040154115b1561295a576128a8606461289a600e600401548861301390919063ffffffff16565b61308d90919063ffffffff16565b9050600e60040154600e60070154826128c19190613c51565b6128cb9190613cc2565b601760008282546128dc9190613d39565b92505081905550600e60040154600e60050154826128fa9190613c51565b6129049190613cc2565b601660008282546129159190613d39565b92505081905550600e60040154600e60060154826129339190613c51565b61293d9190613cc2565b6018600082825461294e9190613d39565b92505081905550612a97565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129b857506000600e60000154115b15612a96576129e860646129da600e600001548861301390919063ffffffff16565b61308d90919063ffffffff16565b9050600e60000154600e6003015482612a019190613c51565b612a0b9190613cc2565b60176000828254612a1c9190613d39565b92505081905550600e60000154600e6001015482612a3a9190613c51565b612a449190613cc2565b60166000828254612a559190613d39565b92505081905550600e60000154600e6002015482612a739190613c51565b612a7d9190613cc2565b60186000828254612a8e9190613d39565b925050819055505b5b5b6000811115612aad57612aac873083612b93565b5b8085612ab99190614067565b9450505b612ac8868686612b93565b5050505b505050565b6000838311158290612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b10919061352b565b60405180910390fd5b5060008385612b289190614067565b9050809150509392505050565b6000808284612b449190613d39565b905083811015612b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b80906140e7565b60405180910390fd5b8091505092915050565b612bfe816040518060600160405280602681526020016144a4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c91816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d309190613731565b60405180910390a3505050565b6000612d483061149f565b90506000601854601654601754612d5f9190613d39565b612d699190613d39565b905060008203612d7a575050613010565b6023600c54612d899190613c51565b821115612da2576023600c54612d9f9190613c51565b91505b600060028260175485612db59190613c51565b612dbf9190613cc2565b612dc99190613cc2565b90506000612de082856130d790919063ffffffff16565b90506000479050612e2786600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a764000085612e229190613c51565b612010565b612e3082613121565b6000612e4582476130d790919063ffffffff16565b90506000612e7086612e626016548561301390919063ffffffff16565b61308d90919063ffffffff16565b90506000612e9b87612e8d6018548661301390919063ffffffff16565b61308d90919063ffffffff16565b905060008183612eab9190613d39565b84612eb69190614067565b9050600060178190555060006016819055506000601881905550600087118015612ee05750600081115b15612f2957612eef878261335e565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612f20929190614107565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8447612f719190614067565b9081150290604051600060405180830381858888f19350505050158015612f9c573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613005573d6000803e3d6000fd5b505050505050505050505b50565b60008083036130255760009050613087565b600082846130339190613c51565b90508284826130429190613cc2565b14613082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613079906141a2565b60405180910390fd5b809150505b92915050565b60006130cf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613438565b905092915050565b600061311983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ad1565b905092915050565b6000600267ffffffffffffffff81111561313e5761313d6141c2565b5b60405190808252806020026020018201604052801561316c5781602001602082028036833780820191505090505b5090503081600081518110613184576131836141f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324d9190614235565b81600181518110613261576132606141f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132c6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612010565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161332895949392919061435b565b600060405180830381600087803b15801561334257600080fd5b505af1158015613356573d6000803e3d6000fd5b505050505050565b613389307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612010565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016133ee969594939291906143b5565b60606040518083038185885af115801561340c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613431919061442b565b5050505050565b6000808311829061347f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613476919061352b565b60405180910390fd5b506000838561348e9190613cc2565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134d55780820151818401526020810190506134ba565b60008484015250505050565b6000601f19601f8301169050919050565b60006134fd8261349b565b61350781856134a6565b93506135178185602086016134b7565b613520816134e1565b840191505092915050565b6000602082019050818103600083015261354581846134f2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061357d82613552565b9050919050565b61358d81613572565b811461359857600080fd5b50565b6000813590506135aa81613584565b92915050565b6000819050919050565b6135c3816135b0565b81146135ce57600080fd5b50565b6000813590506135e0816135ba565b92915050565b600080604083850312156135fd576135fc61354d565b5b600061360b8582860161359b565b925050602061361c858286016135d1565b9150509250929050565b60008115159050919050565b61363b81613626565b82525050565b60006020820190506136566000830184613632565b92915050565b6000602082840312156136725761367161354d565b5b60006136808482850161359b565b91505092915050565b61369281613626565b811461369d57600080fd5b50565b6000813590506136af81613689565b92915050565b600080604083850312156136cc576136cb61354d565b5b60006136da8582860161359b565b92505060206136eb858286016136a0565b9150509250929050565b60006020828403121561370b5761370a61354d565b5b6000613719848285016135d1565b91505092915050565b61372b816135b0565b82525050565b60006020820190506137466000830184613722565b92915050565b6000602082840312156137625761376161354d565b5b6000613770848285016136a0565b91505092915050565b6000806000606084860312156137925761379161354d565b5b60006137a08682870161359b565b93505060206137b18682870161359b565b92505060406137c2868287016135d1565b9150509250925092565b600060ff82169050919050565b6137e2816137cc565b82525050565b60006020820190506137fd60008301846137d9565b92915050565b61380c81613572565b82525050565b60006020820190506138276000830184613803565b92915050565b60008060008060008060c0878903121561384a5761384961354d565b5b600061385889828a016135d1565b965050602061386989828a016135d1565b955050604061387a89828a016135d1565b945050606061388b89828a016135d1565b935050608061389c89828a016135d1565b92505060a06138ad89828a016135d1565b9150509295509295509295565b600080604083850312156138d1576138d061354d565b5b60006138df858286016135d1565b92505060206138f0858286016135d1565b9150509250929050565b600061010082019050613910600083018b613722565b61391d602083018a613722565b61392a6040830189613722565b6139376060830188613722565b6139446080830187613722565b61395160a0830186613722565b61395e60c0830185613722565b61396b60e0830184613722565b9998505050505050505050565b6000806040838503121561398f5761398e61354d565b5b600061399d8582860161359b565b92505060206139ae8582860161359b565b9150509250929050565b6000819050919050565b60006139dd6139d86139d384613552565b6139b8565b613552565b9050919050565b60006139ef826139c2565b9050919050565b6000613a01826139e4565b9050919050565b613a11816139f6565b82525050565b6000602082019050613a2c6000830184613a08565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a7957607f821691505b602082108103613a8c57613a8b613a32565b5b50919050565b7f5465616d204665652057616c6c65742077616c6c657420697320616c7265616460008201527f7920746861742061646472657373000000000000000000000000000000000000602082015250565b6000613aee602e836134a6565b9150613af982613a92565b604082019050919050565b60006020820190508181036000830152613b1d81613ae1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5a6020836134a6565b9150613b6582613b24565b602082019050919050565b60006020820190508181036000830152613b8981613b4d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f756e695061697200000000000000000000000000000000000000000000000000602082015250565b6000613bec6027836134a6565b9150613bf782613b90565b604082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c5c826135b0565b9150613c67836135b0565b9250828202613c75816135b0565b91508282048414831517613c8c57613c8b613c22565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ccd826135b0565b9150613cd8836135b0565b925082613ce857613ce7613c93565b5b828204905092915050565b600081905092915050565b50565b6000613d0e600083613cf3565b9150613d1982613cfe565b600082019050919050565b6000613d2f82613d01565b9150819050919050565b6000613d44826135b0565b9150613d4f836135b0565b9250828201905080821115613d6757613d66613c22565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000613da3601d836134a6565b9150613dae82613d6d565b602082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e356026836134a6565b9150613e4082613dd9565b604082019050919050565b60006020820190508181036000830152613e6481613e28565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613ea16016836134a6565b9150613eac82613e6b565b602082019050919050565b60006020820190508181036000830152613ed081613e94565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613f336035836134a6565b9150613f3e82613ed7565b604082019050919050565b60006020820190508181036000830152613f6281613f26565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613fc56036836134a6565b9150613fd082613f69565b604082019050919050565b60006020820190508181036000830152613ff481613fb8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140316013836134a6565b915061403c82613ffb565b602082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b6000614072826135b0565b915061407d836135b0565b925082820390508181111561409557614094613c22565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006140d1601b836134a6565b91506140dc8261409b565b602082019050919050565b60006020820190508181036000830152614100816140c4565b9050919050565b600060408201905061411c6000830185613722565b6141296020830184613722565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061418c6021836134a6565b915061419782614130565b604082019050919050565b600060208201905081810360008301526141bb8161417f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061422f81613584565b92915050565b60006020828403121561424b5761424a61354d565b5b600061425984828501614220565b91505092915050565b6000819050919050565b600061428761428261427d84614262565b6139b8565b6135b0565b9050919050565b6142978161426c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142d281613572565b82525050565b60006142e483836142c9565b60208301905092915050565b6000602082019050919050565b60006143088261429d565b61431281856142a8565b935061431d836142b9565b8060005b8381101561434e57815161433588826142d8565b9750614340836142f0565b925050600181019050614321565b5085935050505092915050565b600060a0820190506143706000830188613722565b61437d602083018761428e565b818103604083015261438f81866142fd565b905061439e6060830185613803565b6143ab6080830184613722565b9695505050505050565b600060c0820190506143ca6000830189613803565b6143d76020830188613722565b6143e4604083018761428e565b6143f1606083018661428e565b6143fe6080830185613803565b61440b60a0830184613722565b979650505050505050565b600081519050614425816135ba565b92915050565b6000806000606084860312156144445761444361354d565b5b600061445286828701614416565b935050602061446386828701614416565b925050604061447486828701614416565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122098be803366c6e2e2055780e8c66066f51004636d83f4f139e81ebc849b7f916564736f6c63430008130033
Deployed Bytecode Sourcemap
20941:13171:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25168:4;25146:27;;:10;:27;;;25138:36;;;;;;20941:13171;;;;;4525:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6685:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27027:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27860:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25978:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22287:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27714:138;;;;;;;;;;;;;:::i;:::-;;5642:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22110:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25869:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22070:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21159:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7335:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5485:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8098:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33798:182;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21076:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33988:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26120:899;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21227:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21419:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22418:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5812:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13621:148;;;;;;;;;;;;;:::i;:::-;;27562:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25452:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12980:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4743:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25672:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21191:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8818:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6151:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21457:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27278:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21794:267;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6388:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27414:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22357:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22150:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13924:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21027:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25235:145;;;;;;;;;;;;;:::i;:::-;;4525:99;4578:13;4611:5;4604:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4525:99;:::o;6685:168::-;6767:4;6784:39;6793:12;:10;:12::i;:::-;6807:7;6816:6;6784:8;:39::i;:::-;6841:4;6834:11;;6685:168;;;;:::o;27027:243::-;27122:13;;;;;;;;;;;27108:27;;:10;:27;;;:62;;;;;27157:13;;;;;;;;;;;27139:31;;:14;:31;;;;27108:62;27100:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;27248:14;27232:13;;:30;;;;;;;;;;;;;;;;;;27027:243;:::o;27860:187::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27950:13:::1;27942:21;;:4;:21;;::::0;27934:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28034:5;28018:7;:13;28026:4;28018:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27860:187:::0;;:::o;25978:134::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26100:4:::1;26083:13;26067;:11;:13::i;:::-;:29;;;;:::i;:::-;26066:38;;;;:::i;:::-;26054:9;:50;;;;25978:134:::0;:::o;22287:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;27714:138::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27781:31:::1;27802:4;27807::::0;27781:20:::1;:31::i;:::-;27823:21;27839:4;27823:15;:21::i;:::-;27714:138::o:0;5642:107::-;5702:7;5729:12;;5722:19;;5642:107;:::o;22110:33::-;;;;:::o;25869:101::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25955:7:::1;25941:11;;:21;;;;;;;;;;;;;;;;;;25869:101:::0;:::o;22070:33::-;;;;:::o;21159:25::-;;;;:::o;7335:354::-;7474:4;7491:36;7501:6;7509:9;7520:6;7491:9;:36::i;:::-;7538:121;7547:6;7555:12;:10;:12::i;:::-;7569:89;7607:6;7569:89;;;;;;;;;;;;;;;;;:11;:19;7581:6;7569:19;;;;;;;;;;;;;;;:33;7589:12;:10;:12::i;:::-;7569:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7538:8;:121::i;:::-;7677:4;7670:11;;7335:354;;;;;:::o;5485:92::-;5542:5;5567:2;5560:9;;5485:92;:::o;8098:217::-;8185:4;8202:83;8211:12;:10;:12::i;:::-;8225:7;8234:50;8273:10;8234:11;:25;8246:12;:10;:12::i;:::-;8234:25;;;;;;;;;;;;;;;:34;8260:7;8234:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8202:8;:83::i;:::-;8303:4;8296:11;;8098:217;;;;:::o;33798:182::-;33836:12;33861:15;33879:21;33861:39;;33932:14;;;;;;;;;;;33924:28;;33960:7;33924:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33911:61;;;;;33850:130;33798:182;:::o;21076:38::-;;;:::o;33988:121::-;34053:4;34077:15;:24;34093:7;34077:24;;;;;;;;;;;;;;;;;;;;;;;;;34070:31;;33988:121;;;:::o;26120:899::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26356:16:::1;26332:5;:21;;:40;;;;26407:16;26383:5;:21;;:40;;;;26460:18;26434:5;:23;;:44;;;;26558:5;:23;;;26534:5;:21;;;26510:5;:21;;;:45;;;;:::i;:::-;:71;;;;:::i;:::-;26489:5;:18;;:92;;;;26619:17;26594:5;:22;;:42;;;;26672:17;26647:5;:22;;:42;;;;26727:19;26700:5;:24;;:46;;;;26829:5;:24;;;26804:5;:22;;;26779:5;:22;;;:47;;;;:::i;:::-;:74;;;;:::i;:::-;26757:5;:19;;:96;;;;26894:2;26872:5;:18;;;:24;;26864:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26975:2;26952:5;:19;;;:25;;26944:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26120:899:::0;;;;;;:::o;21227:24::-;;;;:::o;21419:31::-;;;;;;;;;;;;;:::o;22418:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;5812:126::-;5885:7;5912:9;:18;5922:7;5912:18;;;;;;;;;;;;;;;;5905:25;;5812:126;;;:::o;13621:148::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13728:1:::1;13691:40;;13712:6;;;;;;;;;;;13691:40;;;;;;;;;;;;13759:1;13742:6;;:19;;;;;;;;;;;;;;;;;;13621:148::o:0;27562:144::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27694:4:::1;27652:31;:39;27684:6;27652:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27562:144:::0;;:::o;25452:212::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25592:4:::1;25579:9;25563:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25562:34;;;;:::i;:::-;25549:10;:47;;;;25652:4;25638:10;25622:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25621:35;;;;:::i;:::-;25607:11;:49;;;;25452:212:::0;;:::o;12980:78::-;13017:7;13044:6;;;;;;;;;;;13037:13;;12980:78;:::o;4743:103::-;4798:13;4831:7;4824:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4743:103;:::o;25672:162::-;25755:4;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25795:9:::1;25771:21;:33;;;;25822:4;25815:11;;25672:162:::0;;;:::o;21191:26::-;;;;:::o;8818:268::-;8910:4;8927:129;8936:12;:10;:12::i;:::-;8950:7;8959:96;8998:15;8959:96;;;;;;;;;;;;;;;;;:11;:25;8971:12;:10;:12::i;:::-;8959:25;;;;;;;;;;;;;;;:34;8985:7;8959:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8927:8;:129::i;:::-;9074:4;9067:11;;8818:268;;;;:::o;6151:174::-;6236:4;6253:42;6263:12;:10;:12::i;:::-;6277:9;6288:6;6253:9;:42::i;:::-;6313:4;6306:11;;6151:174;;;;:::o;21457:22::-;;;;;;;;;;;;;:::o;27278:128::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27390:8:::1;27363:15;:24;27379:7;27363:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;27278:128:::0;;:::o;21794:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6388:150::-;6476:7;6503:11;:18;6515:5;6503:18;;;;;;;;;;;;;;;:27;6522:7;6503:27;;;;;;;;;;;;;;;;6496:34;;6388:150;;;;:::o;27414:140::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27538:8:::1;27506:20;:29;27527:7;27506:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;27414:140:::0;;:::o;22357:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;22150:35::-;;;;:::o;13924:244::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14033:1:::1;14013:22;;:8;:22;;::::0;14005:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14123:8;14094:38;;14115:6;;;;;;;;;;;14094:38;;;;;;;;;;;;14152:8;14143:6;;:17;;;;;;;;;;;;;;;;;;13924:244:::0;:::o;21027:42::-;;;:::o;25235:145::-;13201:12;:10;:12::i;:::-;13191:22;;:6;;;;;;;;;;;:22;;;13183:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25298:4:::1;25286:9;;:16;;;;;;;;;;;;;;;;;;25327:4;25313:11;;:18;;;;;;;;;;;;;;;;;;25360:12;25342:15;:30;;;;25235:145::o:0;3601:97::-;3653:7;3680:10;3673:17;;3601:97;:::o;10981:220::-;11139:6;11109:11;:18;11121:5;11109:18;;;;;;;;;;;;;;;:27;11128:7;11109:27;;;;;;;;;;;;;;;:36;;;;11177:7;11161:32;;11170:5;11161:32;;;11186:6;11161:32;;;;;;:::i;:::-;;;;;;;;10981:220;;;:::o;28055:3162::-;28203:1;28193:6;:11;28189:93;;28221:28;28237:4;28243:2;28247:1;28221:15;:28::i;:::-;28264:7;;28189:93;28320:7;:5;:7::i;:::-;28312:15;;:4;:15;;;;:45;;;;;28350:7;:5;:7::i;:::-;28344:13;;:2;:13;;;;28312:45;:73;;;;;28375:10;;;;;;;;;;;28374:11;28312:73;28294:808;;;28419:9;;;;;;;;;;;28414:130;;28457:15;:21;28473:4;28457:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;28482:15;:19;28498:2;28482:19;;;;;;;;;;;;;;;;;;;;;;;;;28457:44;28449:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;28414:130;28562:7;:13;28570:4;28562:13;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;28580:31;:35;28612:2;28580:35;;;;;;;;;;;;;;;;;;;;;;;;;28579:36;28562:53;28558:382;;;28654:10;;28644:6;:20;;28636:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;28558:382;;;28762:7;:11;28770:2;28762:11;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;28778:31;:37;28810:4;28778:37;;;;;;;;;;;;;;;;;;;;;;;;;28777:38;28762:53;28758:182;;;28854:11;;28844:6;:21;;28836:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28758:182;28558:382;28961:20;:24;28982:2;28961:24;;;;;;;;;;;;;;;;;;;;;;;;;28956:133;;29040:9;;29023:13;29033:2;29023:9;:13::i;:::-;29014:6;:22;;;;:::i;:::-;:35;;29006:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28956:133;28294:808;29115:28;29146:24;29164:4;29146:9;:24::i;:::-;29115:55;;29184:12;29223:21;;29199:20;:45;;29184:60;;29275:7;:35;;;;;29299:11;;;;;;;;;;;29275:35;:63;;;;;29328:10;;;;;;;;;;;29327:11;29275:63;:91;;;;;29355:7;:11;29363:2;29355:11;;;;;;;;;;;;;;;;;;;;;;;;;29275:91;:130;;;;;29384:15;:21;29400:4;29384:21;;;;;;;;;;;;;;;;;;;;;;;;;29383:22;29275:130;:167;;;;;29423:15;:19;29439:2;29423:19;;;;;;;;;;;;;;;;;;;;;;;;;29422:20;29275:167;29257:302;;;29482:4;29469:10;;:17;;;;;;;;;;;;;;;;;;29501:13;29511:2;29501:9;:13::i;:::-;29542:5;29529:10;;:18;;;;;;;;;;;;;;;;;;29257:302;29572:12;29588:10;;;;;;;;;;;29587:11;29572:26;;29700:15;:21;29716:4;29700:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;29725:15;:19;29741:2;29725:19;;;;;;;;;;;;;;;;;;;;;;;;;29700:44;29696:92;;;29771:5;29761:15;;29696:92;29889:7;29885:1279;;;29913:12;29962:15;;29947:12;:30;29944:1069;;;30005:23;30024:3;30005:14;30016:2;30005:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;29998:30;;30083:2;30077;30070:4;:9;;;;:::i;:::-;30069:16;;;;:::i;:::-;30047:18;;:38;;;;;;;:::i;:::-;;;;;;;;30141:2;30136:1;30129:4;:8;;;;:::i;:::-;30128:15;;;;:::i;:::-;30104:20;;:39;;;;;;;:::i;:::-;;;;;;;;29944:1069;;;30169:7;:11;30177:2;30169:11;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;30206:1;30184:5;:19;;;:23;30169:38;30165:848;;;30235:40;30271:3;30235:31;30246:5;:19;;;30235:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30228:47;;30348:5;:19;;;30323:5;:22;;;30316:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30294:18;;:73;;;;;;;:::i;:::-;;;;;;;;30440:5;:19;;;30415:5;:22;;;30408:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30386:18;;:73;;;;;;;:::i;:::-;;;;;;;;30536:5;:19;;;30509:5;:24;;;30502:4;:31;;;;:::i;:::-;:53;;;;:::i;:::-;30478:20;;:77;;;;;;;:::i;:::-;;;;;;;;30165:848;;;30617:7;:13;30625:4;30617:13;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;;30655:1;30634:5;:18;;;:22;30617:39;30613:400;;;30684:39;30719:3;30684:30;30695:5;:18;;;30684:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30677:46;;30795:5;:18;;;30771:5;:21;;;30764:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30742:18;;:71;;;;;;;:::i;:::-;;;;;;;;30885:5;:18;;;30861:5;:21;;;30854:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30832:18;;:71;;;;;;;:::i;:::-;;;;;;;;30979:5;:18;;;30953:5;:23;;;30946:4;:30;;;;:::i;:::-;:51;;;;:::i;:::-;30922:20;;:75;;;;;;;:::i;:::-;;;;;;;;30613:400;30165:848;29944:1069;31040:1;31033:4;:8;31029:91;;;31062:42;31078:4;31092;31099;31062:15;:42::i;:::-;31029:91;31146:4;31136:14;;;;;:::i;:::-;;;29898:1266;29885:1279;31176:33;31192:4;31198:2;31202:6;31176:15;:33::i;:::-;28168:3049;;;28055:3162;;;;:::o;11587:191::-;11672:7;11705:1;11700;:6;;11708:12;11692:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11732:9;11748:1;11744;:5;;;;:::i;:::-;11732:17;;11769:1;11762:8;;;11587:191;;;;;:::o;11246:180::-;11303:7;11323:9;11339:1;11335;:5;;;;:::i;:::-;11323:17;;11364:1;11359;:6;;11351:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11417:1;11410:8;;;11246:180;;;;:::o;9576:358::-;9738:71;9760:6;9738:71;;;;;;;;;;;;;;;;;:9;:17;9748:6;9738:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9718:9;:17;9728:6;9718:17;;;;;;;;;;;;;;;:91;;;;9843:32;9868:6;9843:9;:20;9853:9;9843:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9820:9;:20;9830:9;9820:20;;;;;;;;;;;;;;;:55;;;;9908:9;9891:35;;9900:6;9891:35;;;9919:6;9891:35;;;;;;:::i;:::-;;;;;;;;9576:358;;;:::o;32157:1633::-;32207:28;32238:24;32256:4;32238:9;:24::i;:::-;32207:55;;32273:14;32332:20;;32311:18;;32290;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;32273:79;;32393:1;32369:20;:25;32365:42;;32398:7;;;;32365:42;32470:2;32446:21;;:26;;;;:::i;:::-;32423:20;:49;32419:131;;;32536:2;32512:21;;:26;;;;:::i;:::-;32489:49;;32419:131;32611:23;32690:1;32681:6;32660:18;;32637:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32611:80;;32702:26;32731:41;32756:15;32731:20;:24;;:41;;;;:::i;:::-;32702:70;;32786:25;32814:21;32786:49;;32848:54;32857:2;32861:13;;;;;;;;;;;32897:4;32876:18;:25;;;;:::i;:::-;32848:8;:54::i;:::-;32913:50;32944:18;32913:30;:50::i;:::-;32977:18;32998:44;33024:17;32998:21;:25;;:44;;;;:::i;:::-;32977:65;;33056:23;33082:46;33121:6;33082:34;33097:18;;33082:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;33056:72;;33139:25;33167:48;33208:6;33167:36;33182:20;;33167:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;33139:76;;33226:23;33284:17;33266:15;:35;;;;:::i;:::-;33252:10;:50;;;;:::i;:::-;33226:76;;33338:1;33317:18;:22;;;;33371:1;33350:18;:22;;;;33406:1;33383:20;:24;;;;33444:1;33426:15;:19;:42;;;;;33467:1;33449:15;:19;33426:42;33422:192;;;33485:46;33498:15;33515;33485:12;:46::i;:::-;33551:51;33566:18;33586:15;33551:51;;;;;;;:::i;:::-;;;;;;;;33422:192;33642:13;;;;;;;;;;;33626:40;;:81;33691:15;33667:21;:39;;;;:::i;:::-;33626:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33734:14;;;;;;;;;;;33718:41;;:64;33760:21;33718:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32196:1594;;;;;;;;;32157:1633;;:::o;11786:256::-;11843:7;11878:1;11873;:6;11869:47;;11903:1;11896:8;;;;11869:47;11929:9;11945:1;11941;:5;;;;:::i;:::-;11929:17;;11974:1;11969;11965;:5;;;;:::i;:::-;:10;11957:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12033:1;12026:8;;;11786:256;;;;;:::o;12053:131::-;12110:7;12137:39;12141:1;12144;12137:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12130:46;;12053:131;;;;:::o;11439:135::-;11496:7;11523:43;11527:1;11530;11523:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11516:50;;11439:135;;;;:::o;31225:566::-;31363:21;31401:1;31387:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31363:40;;31432:4;31414;31419:1;31414:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31458:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31448:4;31453:1;31448:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31484:49;31501:4;31516:6;31525:7;31484:8;:49::i;:::-;31570:6;:57;;;31642:7;31664:1;31708:4;31735;31755:15;31570:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31290:501;31225:566;:::o;31799:350::-;31943:49;31960:4;31975:6;31984:7;31943:8;:49::i;:::-;32035:6;:22;;;32066:9;32087:4;32094:7;32103:1;32106;32118:4;32125:15;32035:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31799:350;;:::o;12196:277::-;12281:7;12313:1;12309;:5;12316:12;12301:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12340:9;12356:1;12352;:5;;;;:::i;:::-;12340:17;;12464:1;12457:8;;;12196:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:116::-;3851:21;3866:5;3851:21;:::i;:::-;3844:5;3841:32;3831:60;;3887:1;3884;3877:12;3831:60;3781:116;:::o;3903:133::-;3946:5;3984:6;3971:20;3962:29;;4000:30;4024:5;4000:30;:::i;:::-;3903:133;;;;:::o;4042:468::-;4107:6;4115;4164:2;4152:9;4143:7;4139:23;4135:32;4132:119;;;4170:79;;:::i;:::-;4132:119;4290:1;4315:53;4360:7;4351:6;4340:9;4336:22;4315:53;:::i;:::-;4305:63;;4261:117;4417:2;4443:50;4485:7;4476:6;4465:9;4461:22;4443:50;:::i;:::-;4433:60;;4388:115;4042:468;;;;;:::o;4516:329::-;4575:6;4624:2;4612:9;4603:7;4599:23;4595:32;4592:119;;;4630:79;;:::i;:::-;4592:119;4750:1;4775:53;4820:7;4811:6;4800:9;4796:22;4775:53;:::i;:::-;4765:63;;4721:117;4516:329;;;;:::o;4851:118::-;4938:24;4956:5;4938:24;:::i;:::-;4933:3;4926:37;4851:118;;:::o;4975:222::-;5068:4;5106:2;5095:9;5091:18;5083:26;;5119:71;5187:1;5176:9;5172:17;5163:6;5119:71;:::i;:::-;4975:222;;;;:::o;5203:323::-;5259:6;5308:2;5296:9;5287:7;5283:23;5279:32;5276:119;;;5314:79;;:::i;:::-;5276:119;5434:1;5459:50;5501:7;5492:6;5481:9;5477:22;5459:50;:::i;:::-;5449:60;;5405:114;5203:323;;;;:::o;5532:619::-;5609:6;5617;5625;5674:2;5662:9;5653:7;5649:23;5645:32;5642:119;;;5680:79;;:::i;:::-;5642:119;5800:1;5825:53;5870:7;5861:6;5850:9;5846:22;5825:53;:::i;:::-;5815:63;;5771:117;5927:2;5953:53;5998:7;5989:6;5978:9;5974:22;5953:53;:::i;:::-;5943:63;;5898:118;6055:2;6081:53;6126:7;6117:6;6106:9;6102:22;6081:53;:::i;:::-;6071:63;;6026:118;5532:619;;;;;:::o;6157:86::-;6192:7;6232:4;6225:5;6221:16;6210:27;;6157:86;;;:::o;6249:112::-;6332:22;6348:5;6332:22;:::i;:::-;6327:3;6320:35;6249:112;;:::o;6367:214::-;6456:4;6494:2;6483:9;6479:18;6471:26;;6507:67;6571:1;6560:9;6556:17;6547:6;6507:67;:::i;:::-;6367:214;;;;:::o;6587:118::-;6674:24;6692:5;6674:24;:::i;:::-;6669:3;6662:37;6587:118;;:::o;6711:222::-;6804:4;6842:2;6831:9;6827:18;6819:26;;6855:71;6923:1;6912:9;6908:17;6899:6;6855:71;:::i;:::-;6711:222;;;;:::o;6939:1057::-;7043:6;7051;7059;7067;7075;7083;7132:3;7120:9;7111:7;7107:23;7103:33;7100:120;;;7139:79;;:::i;:::-;7100:120;7259:1;7284:53;7329:7;7320:6;7309:9;7305:22;7284:53;:::i;:::-;7274:63;;7230:117;7386:2;7412:53;7457:7;7448:6;7437:9;7433:22;7412:53;:::i;:::-;7402:63;;7357:118;7514:2;7540:53;7585:7;7576:6;7565:9;7561:22;7540:53;:::i;:::-;7530:63;;7485:118;7642:2;7668:53;7713:7;7704:6;7693:9;7689:22;7668:53;:::i;:::-;7658:63;;7613:118;7770:3;7797:53;7842:7;7833:6;7822:9;7818:22;7797:53;:::i;:::-;7787:63;;7741:119;7899:3;7926:53;7971:7;7962:6;7951:9;7947:22;7926:53;:::i;:::-;7916:63;;7870:119;6939:1057;;;;;;;;:::o;8002:474::-;8070:6;8078;8127:2;8115:9;8106:7;8102:23;8098:32;8095:119;;;8133:79;;:::i;:::-;8095:119;8253:1;8278:53;8323:7;8314:6;8303:9;8299:22;8278:53;:::i;:::-;8268:63;;8224:117;8380:2;8406:53;8451:7;8442:6;8431:9;8427:22;8406:53;:::i;:::-;8396:63;;8351:118;8002:474;;;;;:::o;8482:997::-;8771:4;8809:3;8798:9;8794:19;8786:27;;8823:71;8891:1;8880:9;8876:17;8867:6;8823:71;:::i;:::-;8904:72;8972:2;8961:9;8957:18;8948:6;8904:72;:::i;:::-;8986;9054:2;9043:9;9039:18;9030:6;8986:72;:::i;:::-;9068;9136:2;9125:9;9121:18;9112:6;9068:72;:::i;:::-;9150:73;9218:3;9207:9;9203:19;9194:6;9150:73;:::i;:::-;9233;9301:3;9290:9;9286:19;9277:6;9233:73;:::i;:::-;9316;9384:3;9373:9;9369:19;9360:6;9316:73;:::i;:::-;9399;9467:3;9456:9;9452:19;9443:6;9399:73;:::i;:::-;8482:997;;;;;;;;;;;:::o;9485:474::-;9553:6;9561;9610:2;9598:9;9589:7;9585:23;9581:32;9578:119;;;9616:79;;:::i;:::-;9578:119;9736:1;9761:53;9806:7;9797:6;9786:9;9782:22;9761:53;:::i;:::-;9751:63;;9707:117;9863:2;9889:53;9934:7;9925:6;9914:9;9910:22;9889:53;:::i;:::-;9879:63;;9834:118;9485:474;;;;;:::o;9965:60::-;9993:3;10014:5;10007:12;;9965:60;;;:::o;10031:142::-;10081:9;10114:53;10132:34;10141:24;10159:5;10141:24;:::i;:::-;10132:34;:::i;:::-;10114:53;:::i;:::-;10101:66;;10031:142;;;:::o;10179:126::-;10229:9;10262:37;10293:5;10262:37;:::i;:::-;10249:50;;10179:126;;;:::o;10311:153::-;10388:9;10421:37;10452:5;10421:37;:::i;:::-;10408:50;;10311:153;;;:::o;10470:185::-;10584:64;10642:5;10584:64;:::i;:::-;10579:3;10572:77;10470:185;;:::o;10661:276::-;10781:4;10819:2;10808:9;10804:18;10796:26;;10832:98;10927:1;10916:9;10912:17;10903:6;10832:98;:::i;:::-;10661:276;;;;:::o;10943:180::-;10991:77;10988:1;10981:88;11088:4;11085:1;11078:15;11112:4;11109:1;11102:15;11129:320;11173:6;11210:1;11204:4;11200:12;11190:22;;11257:1;11251:4;11247:12;11278:18;11268:81;;11334:4;11326:6;11322:17;11312:27;;11268:81;11396:2;11388:6;11385:14;11365:18;11362:38;11359:84;;11415:18;;:::i;:::-;11359:84;11180:269;11129:320;;;:::o;11455:233::-;11595:34;11591:1;11583:6;11579:14;11572:58;11664:16;11659:2;11651:6;11647:15;11640:41;11455:233;:::o;11694:366::-;11836:3;11857:67;11921:2;11916:3;11857:67;:::i;:::-;11850:74;;11933:93;12022:3;11933:93;:::i;:::-;12051:2;12046:3;12042:12;12035:19;;11694:366;;;:::o;12066:419::-;12232:4;12270:2;12259:9;12255:18;12247:26;;12319:9;12313:4;12309:20;12305:1;12294:9;12290:17;12283:47;12347:131;12473:4;12347:131;:::i;:::-;12339:139;;12066:419;;;:::o;12491:182::-;12631:34;12627:1;12619:6;12615:14;12608:58;12491:182;:::o;12679:366::-;12821:3;12842:67;12906:2;12901:3;12842:67;:::i;:::-;12835:74;;12918:93;13007:3;12918:93;:::i;:::-;13036:2;13031:3;13027:12;13020:19;;12679:366;;;:::o;13051:419::-;13217:4;13255:2;13244:9;13240:18;13232:26;;13304:9;13298:4;13294:20;13290:1;13279:9;13275:17;13268:47;13332:131;13458:4;13332:131;:::i;:::-;13324:139;;13051:419;;;:::o;13476:226::-;13616:34;13612:1;13604:6;13600:14;13593:58;13685:9;13680:2;13672:6;13668:15;13661:34;13476:226;:::o;13708:366::-;13850:3;13871:67;13935:2;13930:3;13871:67;:::i;:::-;13864:74;;13947:93;14036:3;13947:93;:::i;:::-;14065:2;14060:3;14056:12;14049:19;;13708:366;;;:::o;14080:419::-;14246:4;14284:2;14273:9;14269:18;14261:26;;14333:9;14327:4;14323:20;14319:1;14308:9;14304:17;14297:47;14361:131;14487:4;14361:131;:::i;:::-;14353:139;;14080:419;;;:::o;14505:180::-;14553:77;14550:1;14543:88;14650:4;14647:1;14640:15;14674:4;14671:1;14664:15;14691:410;14731:7;14754:20;14772:1;14754:20;:::i;:::-;14749:25;;14788:20;14806:1;14788:20;:::i;:::-;14783:25;;14843:1;14840;14836:9;14865:30;14883:11;14865:30;:::i;:::-;14854:41;;15044:1;15035:7;15031:15;15028:1;15025:22;15005:1;14998:9;14978:83;14955:139;;15074:18;;:::i;:::-;14955:139;14739:362;14691:410;;;;:::o;15107:180::-;15155:77;15152:1;15145:88;15252:4;15249:1;15242:15;15276:4;15273:1;15266:15;15293:185;15333:1;15350:20;15368:1;15350:20;:::i;:::-;15345:25;;15384:20;15402:1;15384:20;:::i;:::-;15379:25;;15423:1;15413:35;;15428:18;;:::i;:::-;15413:35;15470:1;15467;15463:9;15458:14;;15293:185;;;;:::o;15484:147::-;15585:11;15622:3;15607:18;;15484:147;;;;:::o;15637:114::-;;:::o;15757:398::-;15916:3;15937:83;16018:1;16013:3;15937:83;:::i;:::-;15930:90;;16029:93;16118:3;16029:93;:::i;:::-;16147:1;16142:3;16138:11;16131:18;;15757:398;;;:::o;16161:379::-;16345:3;16367:147;16510:3;16367:147;:::i;:::-;16360:154;;16531:3;16524:10;;16161:379;;;:::o;16546:191::-;16586:3;16605:20;16623:1;16605:20;:::i;:::-;16600:25;;16639:20;16657:1;16639:20;:::i;:::-;16634:25;;16682:1;16679;16675:9;16668:16;;16703:3;16700:1;16697:10;16694:36;;;16710:18;;:::i;:::-;16694:36;16546:191;;;;:::o;16743:179::-;16883:31;16879:1;16871:6;16867:14;16860:55;16743:179;:::o;16928:366::-;17070:3;17091:67;17155:2;17150:3;17091:67;:::i;:::-;17084:74;;17167:93;17256:3;17167:93;:::i;:::-;17285:2;17280:3;17276:12;17269:19;;16928:366;;;:::o;17300:419::-;17466:4;17504:2;17493:9;17489:18;17481:26;;17553:9;17547:4;17543:20;17539:1;17528:9;17524:17;17517:47;17581:131;17707:4;17581:131;:::i;:::-;17573:139;;17300:419;;;:::o;17725:225::-;17865:34;17861:1;17853:6;17849:14;17842:58;17934:8;17929:2;17921:6;17917:15;17910:33;17725:225;:::o;17956:366::-;18098:3;18119:67;18183:2;18178:3;18119:67;:::i;:::-;18112:74;;18195:93;18284:3;18195:93;:::i;:::-;18313:2;18308:3;18304:12;18297:19;;17956:366;;;:::o;18328:419::-;18494:4;18532:2;18521:9;18517:18;18509:26;;18581:9;18575:4;18571:20;18567:1;18556:9;18552:17;18545:47;18609:131;18735:4;18609:131;:::i;:::-;18601:139;;18328:419;;;:::o;18753:172::-;18893:24;18889:1;18881:6;18877:14;18870:48;18753:172;:::o;18931:366::-;19073:3;19094:67;19158:2;19153:3;19094:67;:::i;:::-;19087:74;;19170:93;19259:3;19170:93;:::i;:::-;19288:2;19283:3;19279:12;19272:19;;18931:366;;;:::o;19303:419::-;19469:4;19507:2;19496:9;19492:18;19484:26;;19556:9;19550:4;19546:20;19542:1;19531:9;19527:17;19520:47;19584:131;19710:4;19584:131;:::i;:::-;19576:139;;19303:419;;;:::o;19728:240::-;19868:34;19864:1;19856:6;19852:14;19845:58;19937:23;19932:2;19924:6;19920:15;19913:48;19728:240;:::o;19974:366::-;20116:3;20137:67;20201:2;20196:3;20137:67;:::i;:::-;20130:74;;20213:93;20302:3;20213:93;:::i;:::-;20331:2;20326:3;20322:12;20315:19;;19974:366;;;:::o;20346:419::-;20512:4;20550:2;20539:9;20535:18;20527:26;;20599:9;20593:4;20589:20;20585:1;20574:9;20570:17;20563:47;20627:131;20753:4;20627:131;:::i;:::-;20619:139;;20346:419;;;:::o;20771:241::-;20911:34;20907:1;20899:6;20895:14;20888:58;20980:24;20975:2;20967:6;20963:15;20956:49;20771:241;:::o;21018:366::-;21160:3;21181:67;21245:2;21240:3;21181:67;:::i;:::-;21174:74;;21257:93;21346:3;21257:93;:::i;:::-;21375:2;21370:3;21366:12;21359:19;;21018:366;;;:::o;21390:419::-;21556:4;21594:2;21583:9;21579:18;21571:26;;21643:9;21637:4;21633:20;21629:1;21618:9;21614:17;21607:47;21671:131;21797:4;21671:131;:::i;:::-;21663:139;;21390:419;;;:::o;21815:169::-;21955:21;21951:1;21943:6;21939:14;21932:45;21815:169;:::o;21990:366::-;22132:3;22153:67;22217:2;22212:3;22153:67;:::i;:::-;22146:74;;22229:93;22318:3;22229:93;:::i;:::-;22347:2;22342:3;22338:12;22331:19;;21990:366;;;:::o;22362:419::-;22528:4;22566:2;22555:9;22551:18;22543:26;;22615:9;22609:4;22605:20;22601:1;22590:9;22586:17;22579:47;22643:131;22769:4;22643:131;:::i;:::-;22635:139;;22362:419;;;:::o;22787:194::-;22827:4;22847:20;22865:1;22847:20;:::i;:::-;22842:25;;22881:20;22899:1;22881:20;:::i;:::-;22876:25;;22925:1;22922;22918:9;22910:17;;22949:1;22943:4;22940:11;22937:37;;;22954:18;;:::i;:::-;22937:37;22787:194;;;;:::o;22987:177::-;23127:29;23123:1;23115:6;23111:14;23104:53;22987:177;:::o;23170:366::-;23312:3;23333:67;23397:2;23392:3;23333:67;:::i;:::-;23326:74;;23409:93;23498:3;23409:93;:::i;:::-;23527:2;23522:3;23518:12;23511:19;;23170:366;;;:::o;23542:419::-;23708:4;23746:2;23735:9;23731:18;23723:26;;23795:9;23789:4;23785:20;23781:1;23770:9;23766:17;23759:47;23823:131;23949:4;23823:131;:::i;:::-;23815:139;;23542:419;;;:::o;23967:332::-;24088:4;24126:2;24115:9;24111:18;24103:26;;24139:71;24207:1;24196:9;24192:17;24183:6;24139:71;:::i;:::-;24220:72;24288:2;24277:9;24273:18;24264:6;24220:72;:::i;:::-;23967:332;;;;;:::o;24305:220::-;24445:34;24441:1;24433:6;24429:14;24422:58;24514:3;24509:2;24501:6;24497:15;24490:28;24305:220;:::o;24531:366::-;24673:3;24694:67;24758:2;24753:3;24694:67;:::i;:::-;24687:74;;24770:93;24859:3;24770:93;:::i;:::-;24888:2;24883:3;24879:12;24872:19;;24531:366;;;:::o;24903:419::-;25069:4;25107:2;25096:9;25092:18;25084:26;;25156:9;25150:4;25146:20;25142:1;25131:9;25127:17;25120:47;25184:131;25310:4;25184:131;:::i;:::-;25176:139;;24903:419;;;:::o;25328:180::-;25376:77;25373:1;25366:88;25473:4;25470:1;25463:15;25497:4;25494:1;25487:15;25514:180;25562:77;25559:1;25552:88;25659:4;25656:1;25649:15;25683:4;25680:1;25673:15;25700:143;25757:5;25788:6;25782:13;25773:22;;25804:33;25831:5;25804:33;:::i;:::-;25700:143;;;;:::o;25849:351::-;25919:6;25968:2;25956:9;25947:7;25943:23;25939:32;25936:119;;;25974:79;;:::i;:::-;25936:119;26094:1;26119:64;26175:7;26166:6;26155:9;26151:22;26119:64;:::i;:::-;26109:74;;26065:128;25849:351;;;;:::o;26206:85::-;26251:7;26280:5;26269:16;;26206:85;;;:::o;26297:158::-;26355:9;26388:61;26406:42;26415:32;26441:5;26415:32;:::i;:::-;26406:42;:::i;:::-;26388:61;:::i;:::-;26375:74;;26297:158;;;:::o;26461:147::-;26556:45;26595:5;26556:45;:::i;:::-;26551:3;26544:58;26461:147;;:::o;26614:114::-;26681:6;26715:5;26709:12;26699:22;;26614:114;;;:::o;26734:184::-;26833:11;26867:6;26862:3;26855:19;26907:4;26902:3;26898:14;26883:29;;26734:184;;;;:::o;26924:132::-;26991:4;27014:3;27006:11;;27044:4;27039:3;27035:14;27027:22;;26924:132;;;:::o;27062:108::-;27139:24;27157:5;27139:24;:::i;:::-;27134:3;27127:37;27062:108;;:::o;27176:179::-;27245:10;27266:46;27308:3;27300:6;27266:46;:::i;:::-;27344:4;27339:3;27335:14;27321:28;;27176:179;;;;:::o;27361:113::-;27431:4;27463;27458:3;27454:14;27446:22;;27361:113;;;:::o;27510:732::-;27629:3;27658:54;27706:5;27658:54;:::i;:::-;27728:86;27807:6;27802:3;27728:86;:::i;:::-;27721:93;;27838:56;27888:5;27838:56;:::i;:::-;27917:7;27948:1;27933:284;27958:6;27955:1;27952:13;27933:284;;;28034:6;28028:13;28061:63;28120:3;28105:13;28061:63;:::i;:::-;28054:70;;28147:60;28200:6;28147:60;:::i;:::-;28137:70;;27993:224;27980:1;27977;27973:9;27968:14;;27933:284;;;27937:14;28233:3;28226:10;;27634:608;;;27510:732;;;;:::o;28248:831::-;28511:4;28549:3;28538:9;28534:19;28526:27;;28563:71;28631:1;28620:9;28616:17;28607:6;28563:71;:::i;:::-;28644:80;28720:2;28709:9;28705:18;28696:6;28644:80;:::i;:::-;28771:9;28765:4;28761:20;28756:2;28745:9;28741:18;28734:48;28799:108;28902:4;28893:6;28799:108;:::i;:::-;28791:116;;28917:72;28985:2;28974:9;28970:18;28961:6;28917:72;:::i;:::-;28999:73;29067:3;29056:9;29052:19;29043:6;28999:73;:::i;:::-;28248:831;;;;;;;;:::o;29085:807::-;29334:4;29372:3;29361:9;29357:19;29349:27;;29386:71;29454:1;29443:9;29439:17;29430:6;29386:71;:::i;:::-;29467:72;29535:2;29524:9;29520:18;29511:6;29467:72;:::i;:::-;29549:80;29625:2;29614:9;29610:18;29601:6;29549:80;:::i;:::-;29639;29715:2;29704:9;29700:18;29691:6;29639:80;:::i;:::-;29729:73;29797:3;29786:9;29782:19;29773:6;29729:73;:::i;:::-;29812;29880:3;29869:9;29865:19;29856:6;29812:73;:::i;:::-;29085:807;;;;;;;;;:::o;29898:143::-;29955:5;29986:6;29980:13;29971:22;;30002:33;30029:5;30002:33;:::i;:::-;29898:143;;;;:::o;30047:663::-;30135:6;30143;30151;30200:2;30188:9;30179:7;30175:23;30171:32;30168:119;;;30206:79;;:::i;:::-;30168:119;30326:1;30351:64;30407:7;30398:6;30387:9;30383:22;30351:64;:::i;:::-;30341:74;;30297:128;30464:2;30490:64;30546:7;30537:6;30526:9;30522:22;30490:64;:::i;:::-;30480:74;;30435:129;30603:2;30629:64;30685:7;30676:6;30665:9;30661:22;30629:64;:::i;:::-;30619:74;;30574:129;30047:663;;;;;:::o
Swarm Source
ipfs://98be803366c6e2e2055780e8c66066f51004636d83f4f139e81ebc849b7f9165
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.