Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
420,690,000,000,000 DUANG
Holders
11
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,943,799,880,555.50570333827022092 DUANGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DUANG
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-01 */ /** https://t.me/duangcoineth */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external 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)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns(string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns(string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns(uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns(uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns(uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns(bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns(uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns(bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns(bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased 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 DUANG is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable router; address public immutable uniswapV2Pair; // addresses address private devWallet; address private marketingWallet; // limits uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWalletAmount; uint256 private thresholdSwapAmount; // status flags bool private isTrading = false; bool public swapEnabled = false; bool public isSwapping; struct Fees { uint256 buyTotalFees; uint256 buyMarketingFee; uint256 buyDevFee; uint256 buyLiquidityFee; uint256 sellTotalFees; uint256 sellMarketingFee; uint256 sellDevFee; uint256 sellLiquidityFee; } Fees public _fees = Fees({ buyTotalFees: 0, buyMarketingFee: 0, buyDevFee:0, buyLiquidityFee: 0, sellTotalFees: 0, sellMarketingFee: 0, sellDevFee:0, sellLiquidityFee: 0 }); uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; uint256 private taxTill; // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedMaxWalletAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public marketPair; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived ); constructor() ERC20("DUANG COIN", "DUANG") { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH()); _isExcludedMaxTransactionAmount[address(router)] = true; _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; _isExcludedMaxWalletAmount[owner()] = true; _isExcludedMaxWalletAmount[address(this)] = true; _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true; marketPair[address(uniswapV2Pair)] = true; approve(address(router), type(uint256).max); uint256 totalSupply = 42069e10 * 1e18; maxBuyAmount = totalSupply / 100; // 1% maxTransactionAmountTxn maxSellAmount = totalSupply / 100; // 1% maxTransactionAmountTxn maxWalletAmount = totalSupply * 2 / 100; // 2% maxWallet thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet _fees.buyMarketingFee = 20; _fees.buyLiquidityFee = 3; _fees.buyDevFee = 2; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee; _fees.sellMarketingFee = 28; _fees.sellLiquidityFee = 1; _fees.sellDevFee = 1; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee; marketingWallet = address(0x8035f49D67B26D900aDE3718BAE3D4BCdd9d1A0d); devWallet = address(0x8035f49D67B26D900aDE3718BAE3D4BCdd9d1A0d); // exclude from paying fees or having max transaction amount /* _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 { } // once enabled, can never be turned off function swapTrading() external onlyOwner { isTrading = true; swapEnabled = true; taxTill = block.number + 0; } // change the minimum amount of tokens to sell from fees function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){ thresholdSwapAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner { require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "Cannot set maxTransactionAmounts lower than 1%"); require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "Cannot set maxTransactionAmounts lower than 1%"); maxBuyAmount = (totalSupply() * newMaxBuy) / 1000; maxSellAmount = (totalSupply() * newMaxSell) / 1000; } function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner { require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%"); maxWalletAmount = (totalSupply() * newPercentage) / 1000; } // only use to disable contract sales if absolutely necessary (emergency use only) function toggleSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateFees(uint256 _marketingFeeBuy, uint256 _liquidityFeeBuy,uint256 _devFeeBuy,uint256 _marketingFeeSell, uint256 _liquidityFeeSell,uint256 _devFeeSell) external onlyOwner{ _fees.buyMarketingFee = _marketingFeeBuy; _fees.buyLiquidityFee = _liquidityFeeBuy; _fees.buyDevFee = _devFeeBuy; _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee; _fees.sellMarketingFee = _marketingFeeSell; _fees.sellLiquidityFee = _liquidityFeeSell; _fees.sellDevFee = _devFeeSell; _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee; require(_fees.buyTotalFees <= 99, "Must keep fees at 99% or less"); require(_fees.sellTotalFees <= 99, "Must keep fees at 99% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedMaxWalletAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function setMarketPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair"); marketPair[pair] = value; } function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{ marketingWallet = _marketingWallet; devWallet = _devWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address sender, address recipient, uint256 amount ) internal override { if (amount == 0) { super._transfer(sender, recipient, 0); return; } if ( sender != owner() && recipient != owner() && !isSwapping ) { if (!isTrading) { require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active."); } if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) { require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount."); } else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) { require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedMaxWalletAmount[recipient]) { require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= thresholdSwapAmount; if ( canSwap && swapEnabled && !isSwapping && marketPair[recipient] && !_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient] ) { isSwapping = true; swapBack(); isSwapping = false; } bool takeFee = !isSwapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) { takeFee = false; } // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { uint256 fees = 0; if(block.number < taxTill) { fees = amount.mul(99).div(100); tokensForMarketing += (fees * 94) / 99; tokensForDev += (fees * 5) / 99; } else if (marketPair[recipient] && _fees.sellTotalFees > 0) { fees = amount.mul(_fees.sellTotalFees).div(100); tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees; tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees; tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees; } // on buy else if (marketPair[sender] && _fees.buyTotalFees > 0) { fees = amount.mul(_fees.buyTotalFees).div(100); tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees; tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees; tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees; } if (fees > 0) { super._transfer(sender, address(this), fees); } amount -= fees; } super._transfer(sender, recipient, amount); } function swapTokensForEth(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 swapBack() private { uint256 contractTokenBalance = balanceOf(address(this)); uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if (contractTokenBalance == 0 || toSwap == 0) { return; } if (contractTokenBalance > thresholdSwapAmount * 20) { contractTokenBalance = thresholdSwapAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2; uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 newBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap); uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap); uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev); tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity); } (success,) = address(devWallet).call{ value: (address(this).balance - ethForMarketing) } (""); (success,) = address(marketingWallet).call{ value: address(this).balance } (""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"buyDevFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevFee","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":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","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":"tokensForDev","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":[],"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":"_devFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050348015620000dd57600080fd5b506040518060400160405280600a81526020017f4455414e4720434f494e000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4455414e4700000000000000000000000000000000000000000000000000000081525081600390805190602001906200016292919062000d57565b5080600490805190602001906200017b92919062000d57565b50505060006200019062000a0c60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c057600080fd5b505afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000e71565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062000e71565b6040518363ffffffff1660e01b8152600401620003ba92919062000eb4565b602060405180830381600087803b158015620003d557600080fd5b505af1158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062000e71565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001601a600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60006200050d62000a1460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000620005cc62000a1460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60006200068b62000a1460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200081c6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a3e60201b60201c565b5060006d14bddab3e51a57cff87a5000000090506064816200083f919062000f49565b60088190555060648162000854919062000f49565b60098190555060646002826200086b919062000f81565b62000877919062000f49565b600a819055506127106001826200088f919062000f81565b6200089b919062000f49565b600b819055506014600d600101819055506003600d600301819055506002600d60020181905550600d60020154600d60030154600d60010154620008e0919062000fe2565b620008ec919062000fe2565b600d60000181905550601c600d600501819055506001600d600701819055506001600d60060181905550600d60060154600d60070154600d6005015462000934919062000fe2565b62000940919062000fe2565b600d60040181905550738035f49d67b26d900ade3718bae3d4bcdd9d1a0d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738035f49d67b26d900ade3718bae3d4bcdd9d1a0d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a05338262000a6c60201b60201c565b50620011c7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000a6262000a5462000a0c60201b60201c565b848462000c0760201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000adf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad690620010a0565b60405180910390fd5b62000afb8160025462000cf460201b62001f8c1790919060201c565b60028190555062000b59816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cf460201b62001f8c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bfb9190620010d3565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ce79190620010d3565b60405180910390a3505050565b600080828462000d05919062000fe2565b90508381101562000d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d449062001140565b60405180910390fd5b8091505092915050565b82805462000d659062001191565b90600052602060002090601f01602090048101928262000d89576000855562000dd5565b82601f1062000da457805160ff191683800117855562000dd5565b8280016001018555821562000dd5579182015b8281111562000dd457825182559160200191906001019062000db7565b5b50905062000de4919062000de8565b5090565b5b8082111562000e0357600081600090555060010162000de9565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e398262000e0c565b9050919050565b62000e4b8162000e2c565b811462000e5757600080fd5b50565b60008151905062000e6b8162000e40565b92915050565b60006020828403121562000e8a5762000e8962000e07565b5b600062000e9a8482850162000e5a565b91505092915050565b62000eae8162000e2c565b82525050565b600060408201905062000ecb600083018562000ea3565b62000eda602083018462000ea3565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f568262000ee1565b915062000f638362000ee1565b92508262000f765762000f7562000eeb565b5b828204905092915050565b600062000f8e8262000ee1565b915062000f9b8362000ee1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fd75762000fd662000f1a565b5b828202905092915050565b600062000fef8262000ee1565b915062000ffc8362000ee1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001034576200103362000f1a565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001088601f836200103f565b9150620010958262001050565b602082019050919050565b60006020820190508181036000830152620010bb8162001079565b9050919050565b620010cd8162000ee1565b82525050565b6000602082019050620010ea6000830184620010c2565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001128601b836200103f565b91506200113582620010f0565b602082019050919050565b600060208201905081810360008301526200115b8162001119565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011aa57607f821691505b60208210811415620011c157620011c062001162565b5b50919050565b60805160a0516145b86200121760003960008181610ea80152611898015260008181611f6a0152818161315d0152818161324d0152818161327401528181613310015261333701526145b86000f3fe60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146108af578063e16830a8146108ec578063f2fde38b14610915578063f5b3c3bf1461093e578063f887ea401461097b57610246565b8063c0246668146107d9578063c16dd4a414610802578063c18bc1951461082b578063d212a69a14610854578063d3f6a1571461088657610246565b8063a457c2d7116100f2578063a457c2d7146106f2578063a9059cbb1461072f578063aa4bde281461076c578063b886311514610797578063b9e418e7146107c257610246565b80638da5cb5b1461060b57806395d89b411461063657806396880b1714610661578063992c58e41461069e5780639fccce32146106c757610246565b806339509351116101bc5780636ddd1713116101805780636ddd17131461053857806370a0823114610563578063715018a6146105a05780637571336a146105b757806388e765ff146105e057610246565b8063395093511461042b57806349bd5a5e146104685780634fbee19314610493578063555467a1146104d057806366d602ae1461050d57610246565b80631a8145bb116102035780631a8145bb146103445780631c6e8a751461036f5780631f3fed8f1461039857806323b872dd146103c3578063313ce5671461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b357806311a582c3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109a6565b60405161026d91906134ef565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906135aa565b610a38565b6040516102aa9190613605565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613620565b610a56565b6040516102e79190613605565b60405180910390f35b3480156102fc57600080fd5b506103176004803603810190610312919061364d565b610a76565b005b34801561032557600080fd5b5061032e610c47565b60405161033b919061369c565b60405180910390f35b34801561035057600080fd5b50610359610c51565b604051610366919061369c565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906136e3565b610c57565b005b3480156103a457600080fd5b506103ad610d0b565b6040516103ba919061369c565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190613710565b610d11565b6040516103f79190613605565b60405180910390f35b34801561040c57600080fd5b50610415610dea565b604051610422919061377f565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d91906135aa565b610df3565b60405161045f9190613605565b60405180910390f35b34801561047457600080fd5b5061047d610ea6565b60405161048a91906137a9565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190613620565b610eca565b6040516104c79190613605565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f291906137c4565b610f20565b6040516105049190613605565b60405180910390f35b34801561051957600080fd5b50610522610fc9565b60405161052f919061369c565b60405180910390f35b34801561054457600080fd5b5061054d610fcf565b60405161055a9190613605565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613620565b610fe2565b604051610597919061369c565b60405180910390f35b3480156105ac57600080fd5b506105b561102a565b005b3480156105c357600080fd5b506105de60048036038101906105d991906137f1565b611182565b005b3480156105ec57600080fd5b506105f5611274565b604051610602919061369c565b60405180910390f35b34801561061757600080fd5b5061062061127a565b60405161062d91906137a9565b60405180910390f35b34801561064257600080fd5b5061064b6112a4565b60405161065891906134ef565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190613620565b611336565b6040516106959190613605565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190613831565b611356565b005b3480156106d357600080fd5b506106dc611521565b6040516106e9919061369c565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906135aa565b611527565b6040516107269190613605565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906135aa565b6115f4565b6040516107639190613605565b60405180910390f35b34801561077857600080fd5b50610781611612565b60405161078e919061369c565b60405180910390f35b3480156107a357600080fd5b506107ac611618565b6040516107b99190613605565b60405180910390f35b3480156107ce57600080fd5b506107d761162b565b005b3480156107e557600080fd5b5061080060048036038101906107fb91906137f1565b61170d565b005b34801561080e57600080fd5b50610829600480360381019061082491906137f1565b6117ff565b005b34801561083757600080fd5b50610852600480360381019061084d91906137c4565b611980565b005b34801561086057600080fd5b50610869611ab5565b60405161087d9897969594939291906138be565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061393c565b611aeb565b005b3480156108bb57600080fd5b506108d660048036038101906108d1919061393c565b611c08565b6040516108e3919061369c565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906137f1565b611c8f565b005b34801561092157600080fd5b5061093c60048036038101906109379190613620565b611d81565b005b34801561094a57600080fd5b5061096560048036038101906109609190613620565b611f48565b6040516109729190613605565b60405180910390f35b34801561098757600080fd5b50610990611f68565b60405161099d91906139db565b60405180910390f35b6060600380546109b590613a25565b80601f01602080910402602001604051908101604052809291908181526020018280546109e190613a25565b8015610a2e5780601f10610a0357610100808354040283529160200191610a2e565b820191906000526020600020905b815481529060010190602001808311610a1157829003601f168201915b5050505050905090565b6000610a4c610a45611fea565b8484611ff2565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610a7e611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0490613aa3565b60405180910390fd5b6064610b17610c47565b610b219190613b21565b6103e883610b2d610c47565b610b379190613b52565b610b419190613b21565b1015610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990613c1e565b60405180910390fd5b6064610b8c610c47565b610b969190613b21565b6103e882610ba2610c47565b610bac9190613b52565b610bb69190613b21565b1015610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613c1e565b60405180910390fd5b6103e882610c03610c47565b610c0d9190613b52565b610c179190613b21565b6008819055506103e881610c29610c47565b610c339190613b52565b610c3d9190613b21565b6009819055505050565b6000600254905090565b60165481565b610c5f611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613aa3565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60155481565b6000610d1e8484846120dd565b610ddf84610d2a611fea565b610dda8560405180606001604052806028815260200161455b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d90611fea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab39092919063ffffffff16565b611ff2565b600190509392505050565b60006012905090565b6000610e9c610e00611fea565b84610e978560016000610e11611fea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8c90919063ffffffff16565b611ff2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610f2a611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613aa3565b60405180910390fd5b81600b8190555060019050919050565b60095481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611032611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890613aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61118a611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613aa3565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112b390613a25565b80601f01602080910402602001604051908101604052809291908181526020018280546112df90613a25565b801561132c5780601f106113015761010080835404028352916020019161132c565b820191906000526020600020905b81548152906001019060200180831161130f57829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b61135e611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490613aa3565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d600101546114279190613c3e565b6114319190613c3e565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546114749190613c3e565b61147e9190613c3e565b600d600401819055506063600d6000015411156114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613ce0565b60405180910390fd5b6063600d600401541115611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613ce0565b60405180910390fd5b505050505050565b60175481565b60006115ea611534611fea565b846115e585604051806060016040528060258152602001614510602591396001600061155e611fea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab39092919063ffffffff16565b611ff2565b6001905092915050565b6000611608611601611fea565b84846120dd565b6001905092915050565b600a5481565b600c60029054906101000a900460ff1681565b611633611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b990613aa3565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506000436117059190613c3e565b601881905550565b611715611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613aa3565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611807611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613aa3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613d72565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611988611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613aa3565b60405180910390fd5b6064611a21610c47565b611a2b9190613b21565b6103e882611a37610c47565b611a419190613b52565b611a4b9190613b21565b1015611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613e04565b60405180910390fd5b6103e881611a98610c47565b611aa29190613b52565b611aac9190613b21565b600a8190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611af3611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990613aa3565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c97611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613aa3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d89611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613e96565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611f9b9190613c3e565b905083811015611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613f02565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d0919061369c565b60405180910390a3505050565b60008114156120f7576120f283836000612b17565b612aae565b6120ff61127a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561216d575061213d61127a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121865750600c60029054906101000a900460ff16155b1561250c57600c60009054906101000a900460ff1661228057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122405750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690613f6e565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123235750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123725760085481111561236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614000565b60405180910390fd5b612461565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124155750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124605760095481111561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690614092565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661250b57600a546124be83610fe2565b826124c99190613c3e565b111561250a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612501906140fe565b60405180910390fd5b5b5b600061251730610fe2565b90506000600b54821015905080801561253c5750600c60019054906101000a900460ff165b80156125555750600c60029054906101000a900460ff16155b80156125aa5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156126005750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126565750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561269a576001600c60026101000a81548160ff02191690831515021790555061267e612cc1565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127505750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561275a57600090505b8015612a9f5760006018544310156127fc576127936064612785606388612faf90919063ffffffff16565b61302a90919063ffffffff16565b90506063605e826127a49190613b52565b6127ae9190613b21565b601560008282546127bf9190613c3e565b9250508190555060636005826127d59190613b52565b6127df9190613b21565b601760008282546127f09190613c3e565b92505081905550612a7a565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285a57506000600d60040154115b1561293c5761288a606461287c600d6004015488612faf90919063ffffffff16565b61302a90919063ffffffff16565b9050600d60040154600d60070154826128a39190613b52565b6128ad9190613b21565b601660008282546128be9190613c3e565b92505081905550600d60040154600d60050154826128dc9190613b52565b6128e69190613b21565b601560008282546128f79190613c3e565b92505081905550600d60040154600d60060154826129159190613b52565b61291f9190613b21565b601760008282546129309190613c3e565b92505081905550612a79565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a57506000600d60000154115b15612a78576129ca60646129bc600d6000015488612faf90919063ffffffff16565b61302a90919063ffffffff16565b9050600d60000154600d60030154826129e39190613b52565b6129ed9190613b21565b601660008282546129fe9190613c3e565b92505081905550600d60000154600d6001015482612a1c9190613b52565b612a269190613b21565b60156000828254612a379190613c3e565b92505081905550600d60000154600d6002015482612a559190613b52565b612a5f9190613b21565b60176000828254612a709190613c3e565b925050819055505b5b5b6000811115612a8f57612a8e873083612b17565b5b8085612a9b919061411e565b9450505b612aaa868686612b17565b5050505b505050565b6000838311158290612afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af291906134ef565b60405180910390fd5b5060008385612b0a919061411e565b9050809150509392505050565b612b8281604051806060016040528060268152602001614535602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab39092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c15816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cb4919061369c565b60405180910390a3505050565b6000612ccc30610fe2565b90506000601754601554601654612ce39190613c3e565b612ced9190613c3e565b9050600080831480612cff5750600082145b15612d0c57505050612fad565b6014600b54612d1b9190613b52565b831115612d34576014600b54612d319190613b52565b92505b600060028360165486612d479190613b52565b612d519190613b21565b612d5b9190613b21565b90506000612d72828661307490919063ffffffff16565b90506000479050612d82826130be565b6000612d97824761307490919063ffffffff16565b90506000612dc287612db460155485612faf90919063ffffffff16565b61302a90919063ffffffff16565b90506000612ded88612ddf60175486612faf90919063ffffffff16565b61302a90919063ffffffff16565b905060008183612dfd9190613c3e565b84612e08919061411e565b9050600060168190555060006015819055506000601781905550600087118015612e325750600081115b15612e7b57612e41878261330a565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612e72929190614152565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612ec0919061411e565b604051612ecc906141ac565b60006040518083038185875af1925050503d8060008114612f09576040519150601f19603f3d011682016040523d82523d6000602084013e612f0e565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f5a906141ac565b60006040518083038185875af1925050503d8060008114612f97576040519150601f19603f3d011682016040523d82523d6000602084013e612f9c565b606091505b505080985050505050505050505050505b565b600080831415612fc25760009050613024565b60008284612fd09190613b52565b9050828482612fdf9190613b21565b1461301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614233565b60405180910390fd5b809150505b92915050565b600061306c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133f3565b905092915050565b60006130b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ab3565b905092915050565b6000600267ffffffffffffffff8111156130db576130da614253565b5b6040519080825280602002602001820160405280156131095781602001602082028036833780820191505090505b509050308160008151811061312157613120614282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c157600080fd5b505afa1580156131d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f991906142c6565b8160018151811061320d5761320c614282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613272307f000000000000000000000000000000000000000000000000000000000000000084611ff2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132d49594939291906143ec565b600060405180830381600087803b1580156132ee57600080fd5b505af1158015613302573d6000803e3d6000fd5b505050505050565b613335307f000000000000000000000000000000000000000000000000000000000000000084611ff2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161339a96959493929190614446565b6060604051808303818588803b1580156133b357600080fd5b505af11580156133c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133ec91906144bc565b5050505050565b6000808311829061343a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343191906134ef565b60405180910390fd5b50600083856134499190613b21565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613490578082015181840152602081019050613475565b8381111561349f576000848401525b50505050565b6000601f19601f8301169050919050565b60006134c182613456565b6134cb8185613461565b93506134db818560208601613472565b6134e4816134a5565b840191505092915050565b6000602082019050818103600083015261350981846134b6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061354182613516565b9050919050565b61355181613536565b811461355c57600080fd5b50565b60008135905061356e81613548565b92915050565b6000819050919050565b61358781613574565b811461359257600080fd5b50565b6000813590506135a48161357e565b92915050565b600080604083850312156135c1576135c0613511565b5b60006135cf8582860161355f565b92505060206135e085828601613595565b9150509250929050565b60008115159050919050565b6135ff816135ea565b82525050565b600060208201905061361a60008301846135f6565b92915050565b60006020828403121561363657613635613511565b5b60006136448482850161355f565b91505092915050565b6000806040838503121561366457613663613511565b5b600061367285828601613595565b925050602061368385828601613595565b9150509250929050565b61369681613574565b82525050565b60006020820190506136b1600083018461368d565b92915050565b6136c0816135ea565b81146136cb57600080fd5b50565b6000813590506136dd816136b7565b92915050565b6000602082840312156136f9576136f8613511565b5b6000613707848285016136ce565b91505092915050565b60008060006060848603121561372957613728613511565b5b60006137378682870161355f565b93505060206137488682870161355f565b925050604061375986828701613595565b9150509250925092565b600060ff82169050919050565b61377981613763565b82525050565b60006020820190506137946000830184613770565b92915050565b6137a381613536565b82525050565b60006020820190506137be600083018461379a565b92915050565b6000602082840312156137da576137d9613511565b5b60006137e884828501613595565b91505092915050565b6000806040838503121561380857613807613511565b5b60006138168582860161355f565b9250506020613827858286016136ce565b9150509250929050565b60008060008060008060c0878903121561384e5761384d613511565b5b600061385c89828a01613595565b965050602061386d89828a01613595565b955050604061387e89828a01613595565b945050606061388f89828a01613595565b93505060806138a089828a01613595565b92505060a06138b189828a01613595565b9150509295509295509295565b6000610100820190506138d4600083018b61368d565b6138e1602083018a61368d565b6138ee604083018961368d565b6138fb606083018861368d565b613908608083018761368d565b61391560a083018661368d565b61392260c083018561368d565b61392f60e083018461368d565b9998505050505050505050565b6000806040838503121561395357613952613511565b5b60006139618582860161355f565b92505060206139728582860161355f565b9150509250929050565b6000819050919050565b60006139a161399c61399784613516565b61397c565b613516565b9050919050565b60006139b382613986565b9050919050565b60006139c5826139a8565b9050919050565b6139d5816139ba565b82525050565b60006020820190506139f060008301846139cc565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a3d57607f821691505b60208210811415613a5157613a506139f6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a8d602083613461565b9150613a9882613a57565b602082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b2c82613574565b9150613b3783613574565b925082613b4757613b46613ac3565b5b828204905092915050565b6000613b5d82613574565b9150613b6883613574565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ba157613ba0613af2565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e203125000000000000000000000000000000000000602082015250565b6000613c08602e83613461565b9150613c1382613bac565b604082019050919050565b60006020820190508181036000830152613c3781613bfb565b9050919050565b6000613c4982613574565b9150613c5483613574565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c8957613c88613af2565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613cca601d83613461565b9150613cd582613c94565b602082019050919050565b60006020820190508181036000830152613cf981613cbd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613d5c602a83613461565b9150613d6782613d00565b604082019050919050565b60006020820190508181036000830152613d8b81613d4f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dee602283613461565b9150613df982613d92565b604082019050919050565b60006020820190508181036000830152613e1d81613de1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e80602683613461565b9150613e8b82613e24565b604082019050919050565b60006020820190508181036000830152613eaf81613e73565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613eec601b83613461565b9150613ef782613eb6565b602082019050919050565b60006020820190508181036000830152613f1b81613edf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613f58601683613461565b9150613f6382613f22565b602082019050919050565b60006020820190508181036000830152613f8781613f4b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613fea603583613461565b9150613ff582613f8e565b604082019050919050565b6000602082019050818103600083015261401981613fdd565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061407c603683613461565b915061408782614020565b604082019050919050565b600060208201905081810360008301526140ab8161406f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140e8601383613461565b91506140f3826140b2565b602082019050919050565b60006020820190508181036000830152614117816140db565b9050919050565b600061412982613574565b915061413483613574565b92508282101561414757614146613af2565b5b828203905092915050565b6000604082019050614167600083018561368d565b614174602083018461368d565b9392505050565b600081905092915050565b50565b600061419660008361417b565b91506141a182614186565b600082019050919050565b60006141b782614189565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061421d602183613461565b9150614228826141c1565b604082019050919050565b6000602082019050818103600083015261424c81614210565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506142c081613548565b92915050565b6000602082840312156142dc576142db613511565b5b60006142ea848285016142b1565b91505092915050565b6000819050919050565b600061431861431361430e846142f3565b61397c565b613574565b9050919050565b614328816142fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436381613536565b82525050565b6000614375838361435a565b60208301905092915050565b6000602082019050919050565b60006143998261432e565b6143a38185614339565b93506143ae8361434a565b8060005b838110156143df5781516143c68882614369565b97506143d183614381565b9250506001810190506143b2565b5085935050505092915050565b600060a082019050614401600083018861368d565b61440e602083018761431f565b8181036040830152614420818661438e565b905061442f606083018561379a565b61443c608083018461368d565b9695505050505050565b600060c08201905061445b600083018961379a565b614468602083018861368d565b614475604083018761431f565b614482606083018661431f565b61448f608083018561379a565b61449c60a083018461368d565b979650505050505050565b6000815190506144b68161357e565b92915050565b6000806000606084860312156144d5576144d4613511565b5b60006144e3868287016144a7565b93505060206144f4868287016144a7565b9250506040614505868287016144a7565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f809c06a65838d41cfea6943d920ece9d1a80b938b37bb9e863d04edf81321ee64736f6c63430008090033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146108af578063e16830a8146108ec578063f2fde38b14610915578063f5b3c3bf1461093e578063f887ea401461097b57610246565b8063c0246668146107d9578063c16dd4a414610802578063c18bc1951461082b578063d212a69a14610854578063d3f6a1571461088657610246565b8063a457c2d7116100f2578063a457c2d7146106f2578063a9059cbb1461072f578063aa4bde281461076c578063b886311514610797578063b9e418e7146107c257610246565b80638da5cb5b1461060b57806395d89b411461063657806396880b1714610661578063992c58e41461069e5780639fccce32146106c757610246565b806339509351116101bc5780636ddd1713116101805780636ddd17131461053857806370a0823114610563578063715018a6146105a05780637571336a146105b757806388e765ff146105e057610246565b8063395093511461042b57806349bd5a5e146104685780634fbee19314610493578063555467a1146104d057806366d602ae1461050d57610246565b80631a8145bb116102035780631a8145bb146103445780631c6e8a751461036f5780631f3fed8f1461039857806323b872dd146103c3578063313ce5671461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b357806311a582c3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109a6565b60405161026d91906134ef565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906135aa565b610a38565b6040516102aa9190613605565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613620565b610a56565b6040516102e79190613605565b60405180910390f35b3480156102fc57600080fd5b506103176004803603810190610312919061364d565b610a76565b005b34801561032557600080fd5b5061032e610c47565b60405161033b919061369c565b60405180910390f35b34801561035057600080fd5b50610359610c51565b604051610366919061369c565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906136e3565b610c57565b005b3480156103a457600080fd5b506103ad610d0b565b6040516103ba919061369c565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190613710565b610d11565b6040516103f79190613605565b60405180910390f35b34801561040c57600080fd5b50610415610dea565b604051610422919061377f565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d91906135aa565b610df3565b60405161045f9190613605565b60405180910390f35b34801561047457600080fd5b5061047d610ea6565b60405161048a91906137a9565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b59190613620565b610eca565b6040516104c79190613605565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f291906137c4565b610f20565b6040516105049190613605565b60405180910390f35b34801561051957600080fd5b50610522610fc9565b60405161052f919061369c565b60405180910390f35b34801561054457600080fd5b5061054d610fcf565b60405161055a9190613605565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613620565b610fe2565b604051610597919061369c565b60405180910390f35b3480156105ac57600080fd5b506105b561102a565b005b3480156105c357600080fd5b506105de60048036038101906105d991906137f1565b611182565b005b3480156105ec57600080fd5b506105f5611274565b604051610602919061369c565b60405180910390f35b34801561061757600080fd5b5061062061127a565b60405161062d91906137a9565b60405180910390f35b34801561064257600080fd5b5061064b6112a4565b60405161065891906134ef565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190613620565b611336565b6040516106959190613605565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190613831565b611356565b005b3480156106d357600080fd5b506106dc611521565b6040516106e9919061369c565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906135aa565b611527565b6040516107269190613605565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906135aa565b6115f4565b6040516107639190613605565b60405180910390f35b34801561077857600080fd5b50610781611612565b60405161078e919061369c565b60405180910390f35b3480156107a357600080fd5b506107ac611618565b6040516107b99190613605565b60405180910390f35b3480156107ce57600080fd5b506107d761162b565b005b3480156107e557600080fd5b5061080060048036038101906107fb91906137f1565b61170d565b005b34801561080e57600080fd5b50610829600480360381019061082491906137f1565b6117ff565b005b34801561083757600080fd5b50610852600480360381019061084d91906137c4565b611980565b005b34801561086057600080fd5b50610869611ab5565b60405161087d9897969594939291906138be565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061393c565b611aeb565b005b3480156108bb57600080fd5b506108d660048036038101906108d1919061393c565b611c08565b6040516108e3919061369c565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906137f1565b611c8f565b005b34801561092157600080fd5b5061093c60048036038101906109379190613620565b611d81565b005b34801561094a57600080fd5b5061096560048036038101906109609190613620565b611f48565b6040516109729190613605565b60405180910390f35b34801561098757600080fd5b50610990611f68565b60405161099d91906139db565b60405180910390f35b6060600380546109b590613a25565b80601f01602080910402602001604051908101604052809291908181526020018280546109e190613a25565b8015610a2e5780601f10610a0357610100808354040283529160200191610a2e565b820191906000526020600020905b815481529060010190602001808311610a1157829003601f168201915b5050505050905090565b6000610a4c610a45611fea565b8484611ff2565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610a7e611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0490613aa3565b60405180910390fd5b6064610b17610c47565b610b219190613b21565b6103e883610b2d610c47565b610b379190613b52565b610b419190613b21565b1015610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990613c1e565b60405180910390fd5b6064610b8c610c47565b610b969190613b21565b6103e882610ba2610c47565b610bac9190613b52565b610bb69190613b21565b1015610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613c1e565b60405180910390fd5b6103e882610c03610c47565b610c0d9190613b52565b610c179190613b21565b6008819055506103e881610c29610c47565b610c339190613b52565b610c3d9190613b21565b6009819055505050565b6000600254905090565b60165481565b610c5f611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613aa3565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60155481565b6000610d1e8484846120dd565b610ddf84610d2a611fea565b610dda8560405180606001604052806028815260200161455b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d90611fea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab39092919063ffffffff16565b611ff2565b600190509392505050565b60006012905090565b6000610e9c610e00611fea565b84610e978560016000610e11611fea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8c90919063ffffffff16565b611ff2565b6001905092915050565b7f000000000000000000000000ce7652b9cf350d3bff75e15e9c0817589774e0ae81565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610f2a611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613aa3565b60405180910390fd5b81600b8190555060019050919050565b60095481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611032611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890613aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61118a611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121090613aa3565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112b390613a25565b80601f01602080910402602001604051908101604052809291908181526020018280546112df90613a25565b801561132c5780601f106113015761010080835404028352916020019161132c565b820191906000526020600020905b81548152906001019060200180831161130f57829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b61135e611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490613aa3565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d600101546114279190613c3e565b6114319190613c3e565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546114749190613c3e565b61147e9190613c3e565b600d600401819055506063600d6000015411156114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613ce0565b60405180910390fd5b6063600d600401541115611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613ce0565b60405180910390fd5b505050505050565b60175481565b60006115ea611534611fea565b846115e585604051806060016040528060258152602001614510602591396001600061155e611fea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab39092919063ffffffff16565b611ff2565b6001905092915050565b6000611608611601611fea565b84846120dd565b6001905092915050565b600a5481565b600c60029054906101000a900460ff1681565b611633611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b990613aa3565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506000436117059190613c3e565b601881905550565b611715611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613aa3565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611807611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613aa3565b60405180910390fd5b7f000000000000000000000000ce7652b9cf350d3bff75e15e9c0817589774e0ae73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613d72565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611988611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613aa3565b60405180910390fd5b6064611a21610c47565b611a2b9190613b21565b6103e882611a37610c47565b611a419190613b52565b611a4b9190613b21565b1015611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613e04565b60405180910390fd5b6103e881611a98610c47565b611aa29190613b52565b611aac9190613b21565b600a8190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611af3611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990613aa3565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c97611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613aa3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d89611fea565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613e96565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611f9b9190613c3e565b905083811015611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790613f02565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d0919061369c565b60405180910390a3505050565b60008114156120f7576120f283836000612b17565b612aae565b6120ff61127a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561216d575061213d61127a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121865750600c60029054906101000a900460ff16155b1561250c57600c60009054906101000a900460ff1661228057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122405750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690613f6e565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123235750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123725760085481111561236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614000565b60405180910390fd5b612461565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124155750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124605760095481111561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690614092565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661250b57600a546124be83610fe2565b826124c99190613c3e565b111561250a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612501906140fe565b60405180910390fd5b5b5b600061251730610fe2565b90506000600b54821015905080801561253c5750600c60019054906101000a900460ff165b80156125555750600c60029054906101000a900460ff16155b80156125aa5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156126005750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126565750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561269a576001600c60026101000a81548160ff02191690831515021790555061267e612cc1565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127505750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561275a57600090505b8015612a9f5760006018544310156127fc576127936064612785606388612faf90919063ffffffff16565b61302a90919063ffffffff16565b90506063605e826127a49190613b52565b6127ae9190613b21565b601560008282546127bf9190613c3e565b9250508190555060636005826127d59190613b52565b6127df9190613b21565b601760008282546127f09190613c3e565b92505081905550612a7a565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285a57506000600d60040154115b1561293c5761288a606461287c600d6004015488612faf90919063ffffffff16565b61302a90919063ffffffff16565b9050600d60040154600d60070154826128a39190613b52565b6128ad9190613b21565b601660008282546128be9190613c3e565b92505081905550600d60040154600d60050154826128dc9190613b52565b6128e69190613b21565b601560008282546128f79190613c3e565b92505081905550600d60040154600d60060154826129159190613b52565b61291f9190613b21565b601760008282546129309190613c3e565b92505081905550612a79565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a57506000600d60000154115b15612a78576129ca60646129bc600d6000015488612faf90919063ffffffff16565b61302a90919063ffffffff16565b9050600d60000154600d60030154826129e39190613b52565b6129ed9190613b21565b601660008282546129fe9190613c3e565b92505081905550600d60000154600d6001015482612a1c9190613b52565b612a269190613b21565b60156000828254612a379190613c3e565b92505081905550600d60000154600d6002015482612a559190613b52565b612a5f9190613b21565b60176000828254612a709190613c3e565b925050819055505b5b5b6000811115612a8f57612a8e873083612b17565b5b8085612a9b919061411e565b9450505b612aaa868686612b17565b5050505b505050565b6000838311158290612afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af291906134ef565b60405180910390fd5b5060008385612b0a919061411e565b9050809150509392505050565b612b8281604051806060016040528060268152602001614535602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab39092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c15816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cb4919061369c565b60405180910390a3505050565b6000612ccc30610fe2565b90506000601754601554601654612ce39190613c3e565b612ced9190613c3e565b9050600080831480612cff5750600082145b15612d0c57505050612fad565b6014600b54612d1b9190613b52565b831115612d34576014600b54612d319190613b52565b92505b600060028360165486612d479190613b52565b612d519190613b21565b612d5b9190613b21565b90506000612d72828661307490919063ffffffff16565b90506000479050612d82826130be565b6000612d97824761307490919063ffffffff16565b90506000612dc287612db460155485612faf90919063ffffffff16565b61302a90919063ffffffff16565b90506000612ded88612ddf60175486612faf90919063ffffffff16565b61302a90919063ffffffff16565b905060008183612dfd9190613c3e565b84612e08919061411e565b9050600060168190555060006015819055506000601781905550600087118015612e325750600081115b15612e7b57612e41878261330a565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612e72929190614152565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612ec0919061411e565b604051612ecc906141ac565b60006040518083038185875af1925050503d8060008114612f09576040519150601f19603f3d011682016040523d82523d6000602084013e612f0e565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f5a906141ac565b60006040518083038185875af1925050503d8060008114612f97576040519150601f19603f3d011682016040523d82523d6000602084013e612f9c565b606091505b505080985050505050505050505050505b565b600080831415612fc25760009050613024565b60008284612fd09190613b52565b9050828482612fdf9190613b21565b1461301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614233565b60405180910390fd5b809150505b92915050565b600061306c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133f3565b905092915050565b60006130b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ab3565b905092915050565b6000600267ffffffffffffffff8111156130db576130da614253565b5b6040519080825280602002602001820160405280156131095781602001602082028036833780820191505090505b509050308160008151811061312157613120614282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c157600080fd5b505afa1580156131d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f991906142c6565b8160018151811061320d5761320c614282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613272307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ff2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132d49594939291906143ec565b600060405180830381600087803b1580156132ee57600080fd5b505af1158015613302573d6000803e3d6000fd5b505050505050565b613335307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ff2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161339a96959493929190614446565b6060604051808303818588803b1580156133b357600080fd5b505af11580156133c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133ec91906144bc565b5050505050565b6000808311829061343a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343191906134ef565b60405180910390fd5b50600083856134499190613b21565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613490578082015181840152602081019050613475565b8381111561349f576000848401525b50505050565b6000601f19601f8301169050919050565b60006134c182613456565b6134cb8185613461565b93506134db818560208601613472565b6134e4816134a5565b840191505092915050565b6000602082019050818103600083015261350981846134b6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061354182613516565b9050919050565b61355181613536565b811461355c57600080fd5b50565b60008135905061356e81613548565b92915050565b6000819050919050565b61358781613574565b811461359257600080fd5b50565b6000813590506135a48161357e565b92915050565b600080604083850312156135c1576135c0613511565b5b60006135cf8582860161355f565b92505060206135e085828601613595565b9150509250929050565b60008115159050919050565b6135ff816135ea565b82525050565b600060208201905061361a60008301846135f6565b92915050565b60006020828403121561363657613635613511565b5b60006136448482850161355f565b91505092915050565b6000806040838503121561366457613663613511565b5b600061367285828601613595565b925050602061368385828601613595565b9150509250929050565b61369681613574565b82525050565b60006020820190506136b1600083018461368d565b92915050565b6136c0816135ea565b81146136cb57600080fd5b50565b6000813590506136dd816136b7565b92915050565b6000602082840312156136f9576136f8613511565b5b6000613707848285016136ce565b91505092915050565b60008060006060848603121561372957613728613511565b5b60006137378682870161355f565b93505060206137488682870161355f565b925050604061375986828701613595565b9150509250925092565b600060ff82169050919050565b61377981613763565b82525050565b60006020820190506137946000830184613770565b92915050565b6137a381613536565b82525050565b60006020820190506137be600083018461379a565b92915050565b6000602082840312156137da576137d9613511565b5b60006137e884828501613595565b91505092915050565b6000806040838503121561380857613807613511565b5b60006138168582860161355f565b9250506020613827858286016136ce565b9150509250929050565b60008060008060008060c0878903121561384e5761384d613511565b5b600061385c89828a01613595565b965050602061386d89828a01613595565b955050604061387e89828a01613595565b945050606061388f89828a01613595565b93505060806138a089828a01613595565b92505060a06138b189828a01613595565b9150509295509295509295565b6000610100820190506138d4600083018b61368d565b6138e1602083018a61368d565b6138ee604083018961368d565b6138fb606083018861368d565b613908608083018761368d565b61391560a083018661368d565b61392260c083018561368d565b61392f60e083018461368d565b9998505050505050505050565b6000806040838503121561395357613952613511565b5b60006139618582860161355f565b92505060206139728582860161355f565b9150509250929050565b6000819050919050565b60006139a161399c61399784613516565b61397c565b613516565b9050919050565b60006139b382613986565b9050919050565b60006139c5826139a8565b9050919050565b6139d5816139ba565b82525050565b60006020820190506139f060008301846139cc565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a3d57607f821691505b60208210811415613a5157613a506139f6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a8d602083613461565b9150613a9882613a57565b602082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b2c82613574565b9150613b3783613574565b925082613b4757613b46613ac3565b5b828204905092915050565b6000613b5d82613574565b9150613b6883613574565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ba157613ba0613af2565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e203125000000000000000000000000000000000000602082015250565b6000613c08602e83613461565b9150613c1382613bac565b604082019050919050565b60006020820190508181036000830152613c3781613bfb565b9050919050565b6000613c4982613574565b9150613c5483613574565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c8957613c88613af2565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613cca601d83613461565b9150613cd582613c94565b602082019050919050565b60006020820190508181036000830152613cf981613cbd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613d5c602a83613461565b9150613d6782613d00565b604082019050919050565b60006020820190508181036000830152613d8b81613d4f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dee602283613461565b9150613df982613d92565b604082019050919050565b60006020820190508181036000830152613e1d81613de1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e80602683613461565b9150613e8b82613e24565b604082019050919050565b60006020820190508181036000830152613eaf81613e73565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613eec601b83613461565b9150613ef782613eb6565b602082019050919050565b60006020820190508181036000830152613f1b81613edf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613f58601683613461565b9150613f6382613f22565b602082019050919050565b60006020820190508181036000830152613f8781613f4b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613fea603583613461565b9150613ff582613f8e565b604082019050919050565b6000602082019050818103600083015261401981613fdd565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061407c603683613461565b915061408782614020565b604082019050919050565b600060208201905081810360008301526140ab8161406f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140e8601383613461565b91506140f3826140b2565b602082019050919050565b60006020820190508181036000830152614117816140db565b9050919050565b600061412982613574565b915061413483613574565b92508282101561414757614146613af2565b5b828203905092915050565b6000604082019050614167600083018561368d565b614174602083018461368d565b9392505050565b600081905092915050565b50565b600061419660008361417b565b91506141a182614186565b600082019050919050565b60006141b782614189565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061421d602183613461565b9150614228826141c1565b604082019050919050565b6000602082019050818103600083015261424c81614210565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506142c081613548565b92915050565b6000602082840312156142dc576142db613511565b5b60006142ea848285016142b1565b91505092915050565b6000819050919050565b600061431861431361430e846142f3565b61397c565b613574565b9050919050565b614328816142fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436381613536565b82525050565b6000614375838361435a565b60208301905092915050565b6000602082019050919050565b60006143998261432e565b6143a38185614339565b93506143ae8361434a565b8060005b838110156143df5781516143c68882614369565b97506143d183614381565b9250506001810190506143b2565b5085935050505092915050565b600060a082019050614401600083018861368d565b61440e602083018761431f565b8181036040830152614420818661438e565b905061442f606083018561379a565b61443c608083018461368d565b9695505050505050565b600060c08201905061445b600083018961379a565b614468602083018861368d565b614475604083018761431f565b614482606083018661431f565b61448f608083018561379a565b61449c60a083018461368d565b979650505050505050565b6000815190506144b68161357e565b92915050565b6000806000606084860312156144d5576144d4613511565b5b60006144e3868287016144a7565b93505060206144f4868287016144a7565b9250506040614505868287016144a7565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f809c06a65838d41cfea6943d920ece9d1a80b938b37bb9e863d04edf81321ee64736f6c63430008090033
Deployed Bytecode Sourcemap
20712:12951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4287:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6447:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22094:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25099:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5404:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21878:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25955:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21838:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7097:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5247:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20836:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27742:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24931:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21025:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21205:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5574:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13384:148;;;;;;;;;;;;;:::i;:::-;;27205:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20991:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12743:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4505:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22164:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26064:839;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21918:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8580:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5913:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21063:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21243:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24714:143;;;;;;;;;;;;;:::i;:::-;;26915:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27359:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25588:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21566:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;27565:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6150:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27053:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13687:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22380:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20787;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4287:99;4340:13;4373:5;4366:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4287:99;:::o;6447:168::-;6529:4;6546:39;6555:12;:10;:12::i;:::-;6569:7;6578:6;6546:8;:39::i;:::-;6603:4;6596:11;;6447:168;;;;:::o;22094:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25099:479::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25261:3:::1;25245:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25235:4;25222:9;25206:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25205:34;;;;:::i;:::-;25204:61;;25196:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;25393:3;25377:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25367:4;25353:10;25337:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25336:35;;;;:::i;:::-;25335:62;;25327:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;25504:4;25491:9;25475:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25474:34;;;;:::i;:::-;25459:12;:49;;;;25566:4;25552:10;25536:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25535:35;;;;:::i;:::-;25519:13;:51;;;;25099:479:::0;;:::o;5404:107::-;5464:7;5491:12;;5484:19;;5404:107;:::o;21878:33::-;;;;:::o;25955:101::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26041:7:::1;26027:11;;:21;;;;;;;;;;;;;;;;;;25955:101:::0;:::o;21838:33::-;;;;:::o;7097:354::-;7236:4;7253:36;7263:6;7271:9;7282:6;7253:9;:36::i;:::-;7300:121;7309:6;7317:12;:10;:12::i;:::-;7331:89;7369:6;7331:89;;;;;;;;;;;;;;;;;:11;:19;7343:6;7331:19;;;;;;;;;;;;;;;:33;7351:12;:10;:12::i;:::-;7331:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7300:8;:121::i;:::-;7439:4;7432:11;;7097:354;;;;;:::o;5247:92::-;5304:5;5329:2;5322:9;;5247:92;:::o;7860:217::-;7947:4;7964:83;7973:12;:10;:12::i;:::-;7987:7;7996:50;8035:10;7996:11;:25;8008:12;:10;:12::i;:::-;7996:25;;;;;;;;;;;;;;;:34;8022:7;7996:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7964:8;:83::i;:::-;8065:4;8058:11;;7860:217;;;;:::o;20836:38::-;;;:::o;27742:125::-;27807:4;27831:19;:28;27851:7;27831:28;;;;;;;;;;;;;;;;;;;;;;;;;27824:35;;27742:125;;;:::o;24931:158::-;25012:4;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25050:9:::1;25028:19;:31;;;;25077:4;25070:11;;24931:158:::0;;;:::o;21025:28::-;;;;:::o;21205:31::-;;;;;;;;;;;;;:::o;5574:126::-;5647:7;5674:9;:18;5684:7;5674:18;;;;;;;;;;;;;;;;5667:25;;5574:126;;;:::o;13384:148::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13491:1:::1;13454:40;;13475:6;;;;;;;;;;;13454:40;;;;;;;;;;;;13522:1;13505:6;;:19;;;;;;;;;;;;;;;;;;13384:148::o:0;27205:144::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27337:4:::1;27295:31;:39;27327:6;27295:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27205:144:::0;;:::o;20991:27::-;;;;:::o;12743:78::-;12780:7;12807:6;;;;;;;;;;;12800:13;;12743:78;:::o;4505:103::-;4560:13;4593:7;4586:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4505:103;:::o;22164:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;26064:839::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26281:16:::1;26257:5;:21;;:40;;;;26332:16;26308:5;:21;;:40;;;;26377:10;26359:5;:15;;:28;;;;26467:5;:15;;;26443:5;:21;;;26419:5;:21;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;26398:5;:18;;:84;;;;26520:17;26495:5;:22;;:42;;;;26573:17;26548:5;:22;;:42;;;;26620:11;26601:5;:16;;:30;;;;26714:5;:16;;;26689:5;:22;;;26664:5;:22;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;26642:5;:19;;:88;;;;26771:2;26749:5;:18;;;:24;;26741:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26852:2;26829:5;:19;;;:25;;26821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26064:839:::0;;;;;;:::o;21918:27::-;;;;:::o;8580:268::-;8672:4;8689:129;8698:12;:10;:12::i;:::-;8712:7;8721:96;8760:15;8721:96;;;;;;;;;;;;;;;;;:11;:25;8733:12;:10;:12::i;:::-;8721:25;;;;;;;;;;;;;;;:34;8747:7;8721:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8689:8;:129::i;:::-;8836:4;8829:11;;8580:268;;;;:::o;5913:174::-;5998:4;6015:42;6025:12;:10;:12::i;:::-;6039:9;6050:6;6015:9;:42::i;:::-;6075:4;6068:11;;5913:174;;;;:::o;21063:30::-;;;;:::o;21243:22::-;;;;;;;;;;;;;:::o;24714:143::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24779:4:::1;24767:9;;:16;;;;;;;;;;;;;;;;;;24808:4;24794:11;;:18;;;;;;;;;;;;;;;;;;24848:1;24833:12;:16;;;;:::i;:::-;24823:7;:26;;;;24714:143::o:0;26915:132::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27031:8:::1;27000:19;:28;27020:7;27000:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26915:132:::0;;:::o;27359:196::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27452:13:::1;27444:21;;:4;:21;;;;27436:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27542:5;27523:10;:16;27534:4;27523:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27359:196:::0;;:::o;25588:271::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25741:3:::1;25725:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25715:4;25698:13;25682;:11;:13::i;:::-;:29;;;;:::i;:::-;25681:38;;;;:::i;:::-;25680:65;;25672:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;25847:4;25830:13;25814;:11;:13::i;:::-;:29;;;;:::i;:::-;25813:38;;;;:::i;:::-;25795:15;:56;;;;25588:271:::0;:::o;21566:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27565:169::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27677:16:::1;27659:15;;:34;;;;;;;;;;;;;;;;;;27716:10;27704:9;;:22;;;;;;;;;;;;;;;;;;27565:169:::0;;:::o;6150:150::-;6238:7;6265:11;:18;6277:5;6265:18;;;;;;;;;;;;;;;:27;6284:7;6265:27;;;;;;;;;;;;;;;;6258:34;;6150:150;;;;:::o;27053:146::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27183:8:::1;27145:26;:35;27172:7;27145:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27053:146:::0;;:::o;13687:244::-;12964:12;:10;:12::i;:::-;12954:22;;:6;;;;;;;;;;;:22;;;12946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13796:1:::1;13776:22;;:8;:22;;;;13768:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13886:8;13857:38;;13878:6;;;;;;;;;;;13857:38;;;;;;;;;;;;13915:8;13906:6;;:17;;;;;;;;;;;;;;;;;;13687:244:::0;:::o;22380:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20787:::-;;;:::o;11008:180::-;11065:7;11085:9;11101:1;11097;:5;;;;:::i;:::-;11085:17;;11126:1;11121;:6;;11113:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11179:1;11172:8;;;11008:180;;;;:::o;3357:97::-;3409:7;3436:10;3429:17;;3357:97;:::o;10743:220::-;10901:6;10871:11;:18;10883:5;10871:18;;;;;;;;;;;;;;;:27;10890:7;10871:27;;;;;;;;;;;;;;;:36;;;;10939:7;10923:32;;10932:5;10923:32;;;10948:6;10923:32;;;;;;:::i;:::-;;;;;;;;10743:220;;;:::o;27875:3290::-;28032:1;28022:6;:11;28018:102;;;28050:37;28066:6;28074:9;28085:1;28050:15;:37::i;:::-;28102:7;;28018:102;28160:7;:5;:7::i;:::-;28150:17;;:6;:17;;;;:54;;;;;28197:7;:5;:7::i;:::-;28184:20;;:9;:20;;;;28150:54;:82;;;;;28222:10;;;;;;;;;;;28221:11;28150:82;28132:888;;;28266:9;;;;;;;;;;;28261:147;;28304:19;:27;28324:6;28304:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28335:19;:30;28355:9;28335:30;;;;;;;;;;;;;;;;;;;;;;;;;28304:61;28296:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28261:147;28426:10;:18;28437:6;28426:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28449:31;:42;28481:9;28449:42;;;;;;;;;;;;;;;;;;;;;;;;;28448:43;28426:65;28422:410;;;28530:12;;28520:6;:22;;28512:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28422:410;;;28640:10;:21;28651:9;28640:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28666:31;:39;28698:6;28666:39;;;;;;;;;;;;;;;;;;;;;;;;;28665:40;28640:65;28636:196;;;28744:13;;28734:6;:23;;28726:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;28636:196;28422:410;28853:26;:37;28880:9;28853:37;;;;;;;;;;;;;;;;;;;;;;;;;28848:159;;28952:15;;28928:20;28938:9;28928;:20::i;:::-;28919:6;:29;;;;:::i;:::-;:48;;28911:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28848:159;28132:888;29046:28;29077:24;29095:4;29077:9;:24::i;:::-;29046:55;;29115:12;29154:19;;29130:20;:43;;29115:58;;29204:7;:35;;;;;29228:11;;;;;;;;;;;29204:35;:63;;;;;29257:10;;;;;;;;;;;29256:11;29204:63;:101;;;;;29284:10;:21;29295:9;29284:21;;;;;;;;;;;;;;;;;;;;;;;;;29204:101;:146;;;;;29323:19;:27;29343:6;29323:27;;;;;;;;;;;;;;;;;;;;;;;;;29322:28;29204:146;:194;;;;;29368:19;:30;29388:9;29368:30;;;;;;;;;;;;;;;;;;;;;;;;;29367:31;29204:194;29186:326;;;29438:4;29425:10;;:17;;;;;;;;;;;;;;;;;;29457:10;:8;:10::i;:::-;29495:5;29482:10;;:18;;;;;;;;;;;;;;;;;;29186:326;29525:12;29541:10;;;;;;;;;;;29540:11;29525:26;;29653:19;:27;29673:6;29653:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;29684:19;:30;29704:9;29684:30;;;;;;;;;;;;;;;;;;;;;;;;;29653:61;29649:109;;;29741:5;29731:15;;29649:109;29859:7;29855:1248;;;29883:12;29932:7;;29917:12;:22;29914:1036;;;29967:23;29986:3;29967:14;29978:2;29967:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;29960:30;;30045:2;30039;30032:4;:9;;;;:::i;:::-;30031:16;;;;:::i;:::-;30009:18;;:38;;;;;;;:::i;:::-;;;;;;;;30095:2;30090:1;30083:4;:8;;;;:::i;:::-;30082:15;;;;:::i;:::-;30066:12;;:31;;;;;;;:::i;:::-;;;;;;;;29914:1036;;;30123:10;:21;30134:9;30123:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30170:1;30148:5;:19;;;:23;30123:48;30119:831;;;30199:40;30235:3;30199:31;30210:5;:19;;;30199:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30192:47;;30312:5;:19;;;30287:5;:22;;;30280:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30258:18;;:73;;;;;;;:::i;:::-;;;;;;;;30404:5;:19;;;30379:5;:22;;;30372:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30350:18;;:73;;;;;;;:::i;:::-;;;;;;;;30484:5;:19;;;30465:5;:16;;;30458:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;30442:12;;:61;;;;;;;:::i;:::-;;;;;;;;30119:831;;;30565:10;:18;30576:6;30565:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30608:1;30587:5;:18;;;:22;30565:44;30561:389;;;30637:39;30672:3;30637:30;30648:5;:18;;;30637:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30630:46;;30748:5;:18;;;30724:5;:21;;;30717:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30695:18;;:71;;;;;;;:::i;:::-;;;;;;;;30838:5;:18;;;30814:5;:21;;;30807:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30785:18;;:71;;;;;;;:::i;:::-;;;;;;;;30916:5;:18;;;30898:5;:15;;;30891:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;30875:12;;:59;;;;;;;:::i;:::-;;;;;;;;30561:389;30119:831;29914:1036;30977:1;30970:4;:8;30966:93;;;30999:44;31015:6;31031:4;31038;30999:15;:44::i;:::-;30966:93;31085:4;31075:14;;;;;:::i;:::-;;;29868:1235;29855:1248;31115:42;31131:6;31139:9;31150:6;31115:15;:42::i;:::-;27997:3168;;;27875:3290;;;;:::o;11349:191::-;11434:7;11467:1;11462;:6;;11470:12;11454:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11494:9;11510:1;11506;:5;;;;:::i;:::-;11494:17;;11531:1;11524:8;;;11349:191;;;;;:::o;9338:358::-;9500:71;9522:6;9500:71;;;;;;;;;;;;;;;;;:9;:17;9510:6;9500:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9480:9;:17;9490:6;9480:17;;;;;;;;;;;;;;;:91;;;;9605:32;9630:6;9605:9;:20;9615:9;9605:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9582:9;:20;9592:9;9582:20;;;;;;;;;;;;;;;:55;;;;9670:9;9653:35;;9662:6;9653:35;;;9681:6;9653:35;;;;;;:::i;:::-;;;;;;;;9338:358;;;:::o;32093:1565::-;32132:28;32163:24;32181:4;32163:9;:24::i;:::-;32132:55;;32198:14;32257:12;;32236:18;;32215;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;32198:71;;32280:12;32333:1;32309:20;:25;:40;;;;32348:1;32338:6;:11;32309:40;32305:57;;;32353:7;;;;;32305:57;32423:2;32401:19;;:24;;;;:::i;:::-;32378:20;:47;32374:127;;;32487:2;32465:19;;:24;;;;:::i;:::-;32442:47;;32374:127;32562:23;32641:1;32632:6;32611:18;;32588:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32562:80;;32653:26;32682:41;32707:15;32682:20;:24;;:41;;;;:::i;:::-;32653:70;;32737:25;32765:21;32737:49;;32799:36;32816:18;32799:16;:36::i;:::-;32850:18;32871:44;32897:17;32871:21;:25;;:44;;;;:::i;:::-;32850:65;;32929:23;32955:46;32994:6;32955:34;32970:18;;32955:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;32929:72;;33012:17;33032:40;33065:6;33032:28;33047:12;;33032:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;33012:60;;33083:23;33141:9;33123:15;:27;;;;:::i;:::-;33109:10;:42;;;;:::i;:::-;33083:68;;33187:1;33166:18;:22;;;;33220:1;33199:18;:22;;;;33247:1;33232:12;:16;;;;33285:1;33267:15;:19;:42;;;;;33308:1;33290:15;:19;33267:42;33263:192;;;33326:46;33339:15;33356;33326:12;:46::i;:::-;33392:51;33407:18;33427:15;33392:51;;;;;;;:::i;:::-;;;;;;;;33263:192;33488:9;;;;;;;;;;;33480:23;;33537:15;33513:21;:39;;;;:::i;:::-;33480:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33467:93;;;;;33592:15;;;;;;;;;;;33584:29;;33622:21;33584:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33571:79;;;;;32121:1537;;;;;;;;;;32093:1565;:::o;11548:256::-;11605:7;11640:1;11635;:6;11631:47;;;11665:1;11658:8;;;;11631:47;11691:9;11707:1;11703;:5;;;;:::i;:::-;11691:17;;11736:1;11731;11727;:5;;;;:::i;:::-;:10;11719:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11795:1;11788:8;;;11548:256;;;;;:::o;11815:131::-;11872:7;11899:39;11903:1;11906;11899:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11892:46;;11815:131;;;;:::o;11201:135::-;11258:7;11285:43;11289:1;11292;11285:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11278:50;;11201:135;;;;:::o;31173:554::-;31297:21;31335:1;31321:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31297:40;;31366:4;31348;31353:1;31348:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31392:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31382:4;31387:1;31382:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31418:49;31435:4;31450:6;31459:7;31418:8;:49::i;:::-;31506:6;:57;;;31578:7;31600:1;31644:4;31671;31691:15;31506:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31224:503;31173:554;:::o;31735:350::-;31879:49;31896:4;31911:6;31920:7;31879:8;:49::i;:::-;31971:6;:22;;;32002:9;32023:4;32030:7;32039:1;32042;32054:4;32061:15;31971:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31735:350;;:::o;11958:277::-;12043:7;12075:1;12071;:5;12078:12;12063:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12102:9;12118:1;12114;:5;;;;:::i;:::-;12102:17;;12226:1;12219:8;;;11958: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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:116::-;4731:21;4746:5;4731:21;:::i;:::-;4724:5;4721:32;4711:60;;4767:1;4764;4757:12;4711:60;4661:116;:::o;4783:133::-;4826:5;4864:6;4851:20;4842:29;;4880:30;4904:5;4880:30;:::i;:::-;4783:133;;;;:::o;4922:323::-;4978:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:119;;;5033:79;;:::i;:::-;4995:119;5153:1;5178:50;5220:7;5211:6;5200:9;5196:22;5178:50;:::i;:::-;5168:60;;5124:114;4922:323;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:118::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:468::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:119;;;7121:79;;:::i;:::-;7083:119;7241:1;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7212:117;7368:2;7394:50;7436:7;7427:6;7416:9;7412:22;7394:50;:::i;:::-;7384:60;;7339:115;6993:468;;;;;:::o;7467:1057::-;7571:6;7579;7587;7595;7603;7611;7660:3;7648:9;7639:7;7635:23;7631:33;7628:120;;;7667:79;;:::i;:::-;7628:120;7787:1;7812:53;7857:7;7848:6;7837:9;7833:22;7812:53;:::i;:::-;7802:63;;7758:117;7914:2;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7885:118;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;8170:2;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8141:118;8298:3;8325:53;8370:7;8361:6;8350:9;8346:22;8325:53;:::i;:::-;8315:63;;8269:119;8427:3;8454:53;8499:7;8490:6;8479:9;8475:22;8454:53;:::i;:::-;8444:63;;8398:119;7467:1057;;;;;;;;:::o;8530:997::-;8819:4;8857:3;8846:9;8842:19;8834:27;;8871:71;8939:1;8928:9;8924:17;8915:6;8871:71;:::i;:::-;8952:72;9020:2;9009:9;9005:18;8996:6;8952:72;:::i;:::-;9034;9102:2;9091:9;9087:18;9078:6;9034:72;:::i;:::-;9116;9184:2;9173:9;9169:18;9160:6;9116:72;:::i;:::-;9198:73;9266:3;9255:9;9251:19;9242:6;9198:73;:::i;:::-;9281;9349:3;9338:9;9334:19;9325:6;9281:73;:::i;:::-;9364;9432:3;9421:9;9417:19;9408:6;9364:73;:::i;:::-;9447;9515:3;9504:9;9500:19;9491:6;9447:73;:::i;:::-;8530:997;;;;;;;;;;;:::o;9533:474::-;9601:6;9609;9658:2;9646:9;9637:7;9633:23;9629:32;9626:119;;;9664:79;;:::i;:::-;9626:119;9784:1;9809:53;9854:7;9845:6;9834:9;9830:22;9809:53;:::i;:::-;9799:63;;9755:117;9911:2;9937:53;9982:7;9973:6;9962:9;9958:22;9937:53;:::i;:::-;9927:63;;9882:118;9533:474;;;;;:::o;10013:60::-;10041:3;10062:5;10055:12;;10013:60;;;:::o;10079:142::-;10129:9;10162:53;10180:34;10189:24;10207:5;10189:24;:::i;:::-;10180:34;:::i;:::-;10162:53;:::i;:::-;10149:66;;10079:142;;;:::o;10227:126::-;10277:9;10310:37;10341:5;10310:37;:::i;:::-;10297:50;;10227:126;;;:::o;10359:153::-;10436:9;10469:37;10500:5;10469:37;:::i;:::-;10456:50;;10359:153;;;:::o;10518:185::-;10632:64;10690:5;10632:64;:::i;:::-;10627:3;10620:77;10518:185;;:::o;10709:276::-;10829:4;10867:2;10856:9;10852:18;10844:26;;10880:98;10975:1;10964:9;10960:17;10951:6;10880:98;:::i;:::-;10709:276;;;;:::o;10991:180::-;11039:77;11036:1;11029:88;11136:4;11133:1;11126:15;11160:4;11157:1;11150:15;11177:320;11221:6;11258:1;11252:4;11248:12;11238:22;;11305:1;11299:4;11295:12;11326:18;11316:81;;11382:4;11374:6;11370:17;11360:27;;11316:81;11444:2;11436:6;11433:14;11413:18;11410:38;11407:84;;;11463:18;;:::i;:::-;11407:84;11228:269;11177:320;;;:::o;11503:182::-;11643:34;11639:1;11631:6;11627:14;11620:58;11503:182;:::o;11691:366::-;11833:3;11854:67;11918:2;11913:3;11854:67;:::i;:::-;11847:74;;11930:93;12019:3;11930:93;:::i;:::-;12048:2;12043:3;12039:12;12032:19;;11691:366;;;:::o;12063:419::-;12229:4;12267:2;12256:9;12252:18;12244:26;;12316:9;12310:4;12306:20;12302:1;12291:9;12287:17;12280:47;12344:131;12470:4;12344:131;:::i;:::-;12336:139;;12063:419;;;:::o;12488:180::-;12536:77;12533:1;12526:88;12633:4;12630:1;12623:15;12657:4;12654:1;12647:15;12674:180;12722:77;12719:1;12712:88;12819:4;12816:1;12809:15;12843:4;12840:1;12833:15;12860:185;12900:1;12917:20;12935:1;12917:20;:::i;:::-;12912:25;;12951:20;12969:1;12951:20;:::i;:::-;12946:25;;12990:1;12980:35;;12995:18;;:::i;:::-;12980:35;13037:1;13034;13030:9;13025:14;;12860:185;;;;:::o;13051:348::-;13091:7;13114:20;13132:1;13114:20;:::i;:::-;13109:25;;13148:20;13166:1;13148:20;:::i;:::-;13143:25;;13336:1;13268:66;13264:74;13261:1;13258:81;13253:1;13246:9;13239:17;13235:105;13232:131;;;13343:18;;:::i;:::-;13232:131;13391:1;13388;13384:9;13373:20;;13051:348;;;;:::o;13405:233::-;13545:34;13541:1;13533:6;13529:14;13522:58;13614:16;13609:2;13601:6;13597:15;13590:41;13405:233;:::o;13644:366::-;13786:3;13807:67;13871:2;13866:3;13807:67;:::i;:::-;13800:74;;13883:93;13972:3;13883:93;:::i;:::-;14001:2;13996:3;13992:12;13985:19;;13644:366;;;:::o;14016:419::-;14182:4;14220:2;14209:9;14205:18;14197:26;;14269:9;14263:4;14259:20;14255:1;14244:9;14240:17;14233:47;14297:131;14423:4;14297:131;:::i;:::-;14289:139;;14016:419;;;:::o;14441:305::-;14481:3;14500:20;14518:1;14500:20;:::i;:::-;14495:25;;14534:20;14552:1;14534:20;:::i;:::-;14529:25;;14688:1;14620:66;14616:74;14613:1;14610:81;14607:107;;;14694:18;;:::i;:::-;14607:107;14738:1;14735;14731:9;14724:16;;14441:305;;;;:::o;14752:179::-;14892:31;14888:1;14880:6;14876:14;14869:55;14752:179;:::o;14937:366::-;15079:3;15100:67;15164:2;15159:3;15100:67;:::i;:::-;15093:74;;15176:93;15265:3;15176:93;:::i;:::-;15294:2;15289:3;15285:12;15278:19;;14937:366;;;:::o;15309:419::-;15475:4;15513:2;15502:9;15498:18;15490:26;;15562:9;15556:4;15552:20;15548:1;15537:9;15533:17;15526:47;15590:131;15716:4;15590:131;:::i;:::-;15582:139;;15309:419;;;:::o;15734:229::-;15874:34;15870:1;15862:6;15858:14;15851:58;15943:12;15938:2;15930:6;15926:15;15919:37;15734:229;:::o;15969:366::-;16111:3;16132:67;16196:2;16191:3;16132:67;:::i;:::-;16125:74;;16208:93;16297:3;16208:93;:::i;:::-;16326:2;16321:3;16317:12;16310:19;;15969:366;;;:::o;16341:419::-;16507:4;16545:2;16534:9;16530:18;16522:26;;16594:9;16588:4;16584:20;16580:1;16569:9;16565:17;16558:47;16622:131;16748:4;16622:131;:::i;:::-;16614:139;;16341:419;;;:::o;16766:221::-;16906:34;16902:1;16894:6;16890:14;16883:58;16975:4;16970:2;16962:6;16958:15;16951:29;16766:221;:::o;16993:366::-;17135:3;17156:67;17220:2;17215:3;17156:67;:::i;:::-;17149:74;;17232:93;17321:3;17232:93;:::i;:::-;17350:2;17345:3;17341:12;17334:19;;16993:366;;;:::o;17365:419::-;17531:4;17569:2;17558:9;17554:18;17546:26;;17618:9;17612:4;17608:20;17604:1;17593:9;17589:17;17582:47;17646:131;17772:4;17646:131;:::i;:::-;17638:139;;17365:419;;;:::o;17790:225::-;17930:34;17926:1;17918:6;17914:14;17907:58;17999:8;17994:2;17986:6;17982:15;17975:33;17790:225;:::o;18021:366::-;18163:3;18184:67;18248:2;18243:3;18184:67;:::i;:::-;18177:74;;18260:93;18349:3;18260:93;:::i;:::-;18378:2;18373:3;18369:12;18362:19;;18021:366;;;:::o;18393:419::-;18559:4;18597:2;18586:9;18582:18;18574:26;;18646:9;18640:4;18636:20;18632:1;18621:9;18617:17;18610:47;18674:131;18800:4;18674:131;:::i;:::-;18666:139;;18393:419;;;:::o;18818:177::-;18958:29;18954:1;18946:6;18942:14;18935:53;18818:177;:::o;19001:366::-;19143:3;19164:67;19228:2;19223:3;19164:67;:::i;:::-;19157:74;;19240:93;19329:3;19240:93;:::i;:::-;19358:2;19353:3;19349:12;19342:19;;19001:366;;;:::o;19373:419::-;19539:4;19577:2;19566:9;19562:18;19554:26;;19626:9;19620:4;19616:20;19612:1;19601:9;19597:17;19590:47;19654:131;19780:4;19654:131;:::i;:::-;19646:139;;19373:419;;;:::o;19798:172::-;19938:24;19934:1;19926:6;19922:14;19915:48;19798:172;:::o;19976:366::-;20118:3;20139:67;20203:2;20198:3;20139:67;:::i;:::-;20132:74;;20215:93;20304:3;20215:93;:::i;:::-;20333:2;20328:3;20324:12;20317:19;;19976:366;;;:::o;20348:419::-;20514:4;20552:2;20541:9;20537:18;20529:26;;20601:9;20595:4;20591:20;20587:1;20576:9;20572:17;20565:47;20629:131;20755:4;20629:131;:::i;:::-;20621:139;;20348:419;;;:::o;20773:240::-;20913:34;20909:1;20901:6;20897:14;20890:58;20982:23;20977:2;20969:6;20965:15;20958:48;20773:240;:::o;21019:366::-;21161:3;21182:67;21246:2;21241:3;21182:67;:::i;:::-;21175:74;;21258:93;21347:3;21258:93;:::i;:::-;21376:2;21371:3;21367:12;21360:19;;21019:366;;;:::o;21391:419::-;21557:4;21595:2;21584:9;21580:18;21572:26;;21644:9;21638:4;21634:20;21630:1;21619:9;21615:17;21608:47;21672:131;21798:4;21672:131;:::i;:::-;21664:139;;21391:419;;;:::o;21816:241::-;21956:34;21952:1;21944:6;21940:14;21933:58;22025:24;22020:2;22012:6;22008:15;22001:49;21816:241;:::o;22063:366::-;22205:3;22226:67;22290:2;22285:3;22226:67;:::i;:::-;22219:74;;22302:93;22391:3;22302:93;:::i;:::-;22420:2;22415:3;22411:12;22404:19;;22063:366;;;:::o;22435:419::-;22601:4;22639:2;22628:9;22624:18;22616:26;;22688:9;22682:4;22678:20;22674:1;22663:9;22659:17;22652:47;22716:131;22842:4;22716:131;:::i;:::-;22708:139;;22435:419;;;:::o;22860:169::-;23000:21;22996:1;22988:6;22984:14;22977:45;22860:169;:::o;23035:366::-;23177:3;23198:67;23262:2;23257:3;23198:67;:::i;:::-;23191:74;;23274:93;23363:3;23274:93;:::i;:::-;23392:2;23387:3;23383:12;23376:19;;23035:366;;;:::o;23407:419::-;23573:4;23611:2;23600:9;23596:18;23588:26;;23660:9;23654:4;23650:20;23646:1;23635:9;23631:17;23624:47;23688:131;23814:4;23688:131;:::i;:::-;23680:139;;23407:419;;;:::o;23832:191::-;23872:4;23892:20;23910:1;23892:20;:::i;:::-;23887:25;;23926:20;23944:1;23926:20;:::i;:::-;23921:25;;23965:1;23962;23959:8;23956:34;;;23970:18;;:::i;:::-;23956:34;24015:1;24012;24008:9;24000:17;;23832:191;;;;:::o;24029:332::-;24150:4;24188:2;24177:9;24173:18;24165:26;;24201:71;24269:1;24258:9;24254:17;24245:6;24201:71;:::i;:::-;24282:72;24350:2;24339:9;24335:18;24326:6;24282:72;:::i;:::-;24029:332;;;;;:::o;24367:147::-;24468:11;24505:3;24490:18;;24367:147;;;;:::o;24520:114::-;;:::o;24640:398::-;24799:3;24820:83;24901:1;24896:3;24820:83;:::i;:::-;24813:90;;24912:93;25001:3;24912:93;:::i;:::-;25030:1;25025:3;25021:11;25014:18;;24640:398;;;:::o;25044:379::-;25228:3;25250:147;25393:3;25250:147;:::i;:::-;25243:154;;25414:3;25407:10;;25044:379;;;:::o;25429:220::-;25569:34;25565:1;25557:6;25553:14;25546:58;25638:3;25633:2;25625:6;25621:15;25614:28;25429:220;:::o;25655:366::-;25797:3;25818:67;25882:2;25877:3;25818:67;:::i;:::-;25811:74;;25894:93;25983:3;25894:93;:::i;:::-;26012:2;26007:3;26003:12;25996:19;;25655:366;;;:::o;26027:419::-;26193:4;26231:2;26220:9;26216:18;26208:26;;26280:9;26274:4;26270:20;26266:1;26255:9;26251:17;26244:47;26308:131;26434:4;26308:131;:::i;:::-;26300:139;;26027:419;;;:::o;26452:180::-;26500:77;26497:1;26490:88;26597:4;26594:1;26587:15;26621:4;26618:1;26611:15;26638:180;26686:77;26683:1;26676:88;26783:4;26780:1;26773:15;26807:4;26804:1;26797:15;26824:143;26881:5;26912:6;26906:13;26897:22;;26928:33;26955:5;26928:33;:::i;:::-;26824:143;;;;:::o;26973:351::-;27043:6;27092:2;27080:9;27071:7;27067:23;27063:32;27060:119;;;27098:79;;:::i;:::-;27060:119;27218:1;27243:64;27299:7;27290:6;27279:9;27275:22;27243:64;:::i;:::-;27233:74;;27189:128;26973:351;;;;:::o;27330:85::-;27375:7;27404:5;27393:16;;27330:85;;;:::o;27421:158::-;27479:9;27512:61;27530:42;27539:32;27565:5;27539:32;:::i;:::-;27530:42;:::i;:::-;27512:61;:::i;:::-;27499:74;;27421:158;;;:::o;27585:147::-;27680:45;27719:5;27680:45;:::i;:::-;27675:3;27668:58;27585:147;;:::o;27738:114::-;27805:6;27839:5;27833:12;27823:22;;27738:114;;;:::o;27858:184::-;27957:11;27991:6;27986:3;27979:19;28031:4;28026:3;28022:14;28007:29;;27858:184;;;;:::o;28048:132::-;28115:4;28138:3;28130:11;;28168:4;28163:3;28159:14;28151:22;;28048:132;;;:::o;28186:108::-;28263:24;28281:5;28263:24;:::i;:::-;28258:3;28251:37;28186:108;;:::o;28300:179::-;28369:10;28390:46;28432:3;28424:6;28390:46;:::i;:::-;28468:4;28463:3;28459:14;28445:28;;28300:179;;;;:::o;28485:113::-;28555:4;28587;28582:3;28578:14;28570:22;;28485:113;;;:::o;28634:732::-;28753:3;28782:54;28830:5;28782:54;:::i;:::-;28852:86;28931:6;28926:3;28852:86;:::i;:::-;28845:93;;28962:56;29012:5;28962:56;:::i;:::-;29041:7;29072:1;29057:284;29082:6;29079:1;29076:13;29057:284;;;29158:6;29152:13;29185:63;29244:3;29229:13;29185:63;:::i;:::-;29178:70;;29271:60;29324:6;29271:60;:::i;:::-;29261:70;;29117:224;29104:1;29101;29097:9;29092:14;;29057:284;;;29061:14;29357:3;29350:10;;28758:608;;;28634:732;;;;:::o;29372:831::-;29635:4;29673:3;29662:9;29658:19;29650:27;;29687:71;29755:1;29744:9;29740:17;29731:6;29687:71;:::i;:::-;29768:80;29844:2;29833:9;29829:18;29820:6;29768:80;:::i;:::-;29895:9;29889:4;29885:20;29880:2;29869:9;29865:18;29858:48;29923:108;30026:4;30017:6;29923:108;:::i;:::-;29915:116;;30041:72;30109:2;30098:9;30094:18;30085:6;30041:72;:::i;:::-;30123:73;30191:3;30180:9;30176:19;30167:6;30123:73;:::i;:::-;29372:831;;;;;;;;:::o;30209:807::-;30458:4;30496:3;30485:9;30481:19;30473:27;;30510:71;30578:1;30567:9;30563:17;30554:6;30510:71;:::i;:::-;30591:72;30659:2;30648:9;30644:18;30635:6;30591:72;:::i;:::-;30673:80;30749:2;30738:9;30734:18;30725:6;30673:80;:::i;:::-;30763;30839:2;30828:9;30824:18;30815:6;30763:80;:::i;:::-;30853:73;30921:3;30910:9;30906:19;30897:6;30853:73;:::i;:::-;30936;31004:3;30993:9;30989:19;30980:6;30936:73;:::i;:::-;30209:807;;;;;;;;;:::o;31022:143::-;31079:5;31110:6;31104:13;31095:22;;31126:33;31153:5;31126:33;:::i;:::-;31022:143;;;;:::o;31171:663::-;31259:6;31267;31275;31324:2;31312:9;31303:7;31299:23;31295:32;31292:119;;;31330:79;;:::i;:::-;31292:119;31450:1;31475:64;31531:7;31522:6;31511:9;31507:22;31475:64;:::i;:::-;31465:74;;31421:128;31588:2;31614:64;31670:7;31661:6;31650:9;31646:22;31614:64;:::i;:::-;31604:74;;31559:129;31727:2;31753:64;31809:7;31800:6;31789:9;31785:22;31753:64;:::i;:::-;31743:74;;31698:129;31171:663;;;;;:::o
Swarm Source
ipfs://f809c06a65838d41cfea6943d920ece9d1a80b938b37bb9e863d04edf81321ee
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.