Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
22,000,000 $BB
Holders
126
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
6,923,791.00804333817298008 $BBValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BB
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-27 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * */ 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. */ 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}. * */ 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}. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. */ function _createTotalSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } /** * @dev Wrappers over Solidity's arithmetic operations. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract BB is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; uint256 public liquidityTokens; uint256 public buyBackTokens; uint256 public liquidityBuyFee = 2; uint256 public devBuyFee = 14; uint256 public devSellFee = 15; uint256 public liquiditySellFee = 15; uint256 public devTransferFee = 8; uint256 public liquidityTransferFee = 8; uint256 public maxBuyTransactionAmount = 220000 * (10**18); uint256 public maxSellTransactionAmount = 220000 * (10**18); uint256 public swapTokensAtAmount = 4000 * (10**18); uint256 public maxWalletToken = 220000 * (10**18); address payable public buybackWallet = payable(0xfebB0033c348ce91C19d7B075134ec7A7e044e1b); address public deadWallet = 0x000000000000000000000000000000000000dEaD; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public launched = false; // exlcude from fees mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isBlacklisted; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapEthForTokens(uint256 amountIn, address[] path); event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived); event ExcludeFromFees(address indexed account, bool isExcluded); event MaxWalletAmountUpdated(uint256 prevValue, uint256 newValue); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("BUY BACK", "$BB") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Ethereum mainnet // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(buybackWallet), true); /* internal function that is only called here, and CANNOT be called ever again */ _createTotalSupply(owner(), 22000000 * (10**18)); } function setLaunchStatus(bool launched_) public onlyOwner { launched = launched_; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_isBlacklisted[from] && !_isBlacklisted[to], "To/from address is blacklisted!"); if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(launched, "Not Launched."); } if(amount == 0) { super._transfer(from, to, 0); return; } if (from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && from==uniswapV2Pair){ require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount."); } if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && to==uniswapV2Pair){ require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount."); } if(!inSwapAndLiquify && to==uniswapV2Pair && swapAndLiquifyEnabled && (buyBackTokens >= swapTokensAtAmount || liquidityTokens >= swapTokensAtAmount)) { swapAndLiquify(); } if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 buyBackShare; uint256 liquidityShare; if(from == uniswapV2Pair) { //BUY if(devBuyFee > 0) { buyBackShare = amount.mul(devBuyFee).div(100); buyBackTokens += buyBackShare; super._transfer(from, address(this), buyBackShare); } if(liquidityBuyFee > 0) { liquidityShare = amount.mul(liquidityBuyFee).div(100); liquidityTokens += liquidityShare; super._transfer(from, address(this), liquidityShare); } } else if(to == uniswapV2Pair) {//SELL if(devSellFee > 0) { buyBackShare = amount.mul(devSellFee).div(100); buyBackTokens += buyBackShare; super._transfer(from, address(this), buyBackShare); } if(liquiditySellFee > 0) { liquidityShare = amount.mul(liquiditySellFee).div(100); liquidityTokens += liquidityShare; super._transfer(from, address(this), liquidityShare); } } else { //Transfer if(devTransferFee > 0) { buyBackShare = amount.mul(devTransferFee).div(100); buyBackTokens += buyBackShare; super._transfer(from, address(this), buyBackShare); } if(liquidityTransferFee > 0) { liquidityShare = amount.mul(liquidityTransferFee).div(100); liquidityTokens += liquidityShare; super._transfer(from, address(this), liquidityShare); } } amount = amount.sub(buyBackShare.add(liquidityShare)); } super._transfer(from, to, amount); } function swapAndLiquify() private lockTheSwap { uint256 contractTokenBalance = balanceOf(address(this)); if(liquidityTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) { // split the contract balance into halves uint256 half = swapTokensAtAmount.div(2); uint256 otherHalf = swapTokensAtAmount.sub(half); // capture the contract's current ETH balance. uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half, address(this)); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); liquidityTokens -= swapTokensAtAmount; } if(buyBackTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) { swapTokensForEth(swapTokensAtAmount, buybackWallet); buyBackTokens -= swapTokensAtAmount; } } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function swapTokensForEth(uint256 tokenAmount, address _to) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, _to, block.timestamp ); } function changeBuyFees(uint256 _liqFee, uint256 _devFee) public onlyOwner() { require(_liqFee.add(_devFee) <= 49, "tax too high"); liquidityBuyFee = _liqFee; devBuyFee = _devFee; } function changeSellFees(uint256 _devFee, uint256 _liqFee) public onlyOwner() { require(_devFee.add(_liqFee) <= 49, "tax too high"); devSellFee = _devFee; liquiditySellFee = _liqFee; } function changeTransferFees(uint256 _devFee, uint256 _liqFee) public onlyOwner() { require(_devFee.add(_liqFee) <= 49, "tax too high"); devTransferFee = _devFee; liquidityTransferFee = _liqFee; } function updateBuyBackWallet(address payable _buybackWallet) public onlyOwner { buybackWallet = _buybackWallet; } function setMaxBuyTransactionAmount(uint256 _maxTxAmount) public onlyOwner { maxBuyTransactionAmount = _maxTxAmount; require(maxBuyTransactionAmount >= totalSupply().div(100), "value too low"); } function setMaxSellTransactionAmount(uint256 _maxTxAmount) public onlyOwner { maxSellTransactionAmount = _maxTxAmount; require(maxSellTransactionAmount >= totalSupply().div(100), "value too low"); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function changeBlacklist(address account, bool isBlacklisted_) public onlyOwner { _isBlacklisted[account] = isBlacklisted_; } function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner { swapTokensAtAmount = newLimit; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setMaxWalletToken(uint256 _newValue) external onlyOwner { uint256 prevValue = maxWalletToken; maxWalletToken = _newValue; require(maxWalletToken >= totalSupply().div(100), "value too low"); emit MaxWalletAmountUpdated(prevValue, _newValue); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","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":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","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":"buyBackTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted_","type":"bool"}],"name":"changeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liqFee","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liqFee","type":"uint256"}],"name":"changeTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"launched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":[{"internalType":"bool","name":"launched_","type":"bool"}],"name":"setLaunchStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxBuyTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxSellTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_buybackWallet","type":"address"}],"name":"updateBuyBackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526002600955600e600a55600f600b55600f600c556008600d556008600e55692e963951560b51800000600f55692e963951560b5180000060105568d8d726b7177a800000601155692e963951560b5180000060125573febb0033c348ce91c19d7b075134ec7a7e044e1b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601460156101000a81548160ff0219169083151502179055506000601460166101000a81548160ff0219169083151502179055503480156200013457600080fd5b506040518060400160405280600881526020017f425559204241434b0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f24424200000000000000000000000000000000000000000000000000000000008152508160039081620001b2919062000b3f565b508060049081620001c4919062000b3f565b505050620001e7620001db6200047c60201b60201c565b6200048460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000274919062000c90565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000302919062000c90565b6040518363ffffffff1660e01b81526004016200032192919062000cd3565b6020604051808303816000875af115801562000341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000367919062000c90565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000400620003f26200054a60201b60201c565b60016200057460201b60201c565b620004133060016200057460201b60201c565b62000448601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200057460201b60201c565b620004746200045c6200054a60201b60201c565b6a1232ae63c59c6bd60000006200074360201b60201c565b505062000f5f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005846200047c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005aa6200054a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000603576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005fa9062000d61565b60405180910390fd5b801515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000698576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068f9062000df9565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000737919062000e38565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ac9062000ea5565b60405180910390fd5b620007c960008383620008bb60201b60201c565b8060026000828254620007dd919062000ef6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000834919062000ef6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200089b919062000f42565b60405180910390a3620008b760008383620008c060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094757607f821691505b6020821081036200095d576200095c620008ff565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000988565b620009d3868362000988565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a2062000a1a62000a1484620009eb565b620009f5565b620009eb565b9050919050565b6000819050919050565b62000a3c83620009ff565b62000a5462000a4b8262000a27565b84845462000995565b825550505050565b600090565b62000a6b62000a5c565b62000a7881848462000a31565b505050565b5b8181101562000aa05762000a9460008262000a61565b60018101905062000a7e565b5050565b601f82111562000aef5762000ab98162000963565b62000ac48462000978565b8101602085101562000ad4578190505b62000aec62000ae38562000978565b83018262000a7d565b50505b505050565b600082821c905092915050565b600062000b146000198460080262000af4565b1980831691505092915050565b600062000b2f838362000b01565b9150826002028217905092915050565b62000b4a82620008c5565b67ffffffffffffffff81111562000b665762000b65620008d0565b5b62000b7282546200092e565b62000b7f82828562000aa4565b600060209050601f83116001811462000bb7576000841562000ba2578287015190505b62000bae858262000b21565b86555062000c1e565b601f19841662000bc78662000963565b60005b8281101562000bf15784890151825560018201915060208501945060208101905062000bca565b8683101562000c11578489015162000c0d601f89168262000b01565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c588262000c2b565b9050919050565b62000c6a8162000c4b565b811462000c7657600080fd5b50565b60008151905062000c8a8162000c5f565b92915050565b60006020828403121562000ca95762000ca862000c26565b5b600062000cb98482850162000c79565b91505092915050565b62000ccd8162000c4b565b82525050565b600060408201905062000cea600083018562000cc2565b62000cf9602083018462000cc2565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d4960208362000d00565b915062000d568262000d11565b602082019050919050565b6000602082019050818103600083015262000d7c8162000d3a565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000de1602a8362000d00565b915062000dee8262000d83565b604082019050919050565b6000602082019050818103600083015262000e148162000dd2565b9050919050565b60008115159050919050565b62000e328162000e1b565b82525050565b600060208201905062000e4f600083018462000e27565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e8d601f8362000d00565b915062000e9a8262000e55565b602082019050919050565b6000602082019050818103600083015262000ec08162000e7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f0382620009eb565b915062000f1083620009eb565b925082820190508082111562000f2b5762000f2a62000ec7565b5b92915050565b62000f3c81620009eb565b82525050565b600060208201905062000f59600083018462000f31565b92915050565b6080516145ff62000fa5600039600081816111750152818161225a01528181612464015281816125aa0152818161265b0152818161279c01526128a801526145ff6000f3fe6080604052600436106102815760003560e01c8063715018a61161014f578063c135cc5c116100c1578063e2f456051161007a578063e2f45605146109c1578063e6c75f71146109ec578063f121e10a14610a17578063f2fde38b14610a40578063f5b01e1514610a69578063f791a94c14610a9257610288565b8063c135cc5c146108b1578063c49b9a80146108da578063ccb6135814610903578063d506d3fe1461092e578063dd62ed3e14610959578063deab8aea1461099657610288565b806395d89b411161011357806395d89b411461078d578063a457c2d7146107b8578063a9059cbb146107f5578063b45e83f814610832578063ba18d7841461085d578063c02466681461088857610288565b8063715018a6146106cc5780638091f3bf146106e357806385141a771461070e5780638da5cb5b1461073957806391d55f411461076457610288565b80631cdd3be3116101f357806349bd5a5e116101ac57806349bd5a5e146105a65780634a74bb02146105d15780634b8ce602146105fc5780634fbee193146106275780635aa821a91461066457806370a082311461068f57610288565b80631cdd3be3146104705780631d7efc04146104ad57806323b872dd146104d65780632cb7114d14610513578063313ce5671461053e578063395093511461056957610288565b8063095ea7b311610245578063095ea7b314610360578063099d0d301461039d57806309e89af7146103c857806316216e5f146103f15780631694505e1461041a57806318160ddd1461044557610288565b806301143fea1461028d57806302259e9e146102b8578063036958a2146102e357806306e7b14d1461030c57806306fdde031461033557610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610abb565b6040516102af9190613318565b60405180910390f35b3480156102c457600080fd5b506102cd610ac1565b6040516102da9190613318565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613364565b610ac7565b005b34801561031857600080fd5b50610333600480360381019061032e9190613402565b610bab565b005b34801561034157600080fd5b5061034a610c6b565b60405161035791906134bf565b60405180910390f35b34801561036c57600080fd5b506103876004803603810190610382919061351f565b610cfd565b604051610394919061357a565b60405180910390f35b3480156103a957600080fd5b506103b2610d1b565b6040516103bf9190613318565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613595565b610d21565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613595565b610da7565b005b34801561042657600080fd5b5061042f610e8c565b60405161043c9190613621565b60405180910390f35b34801561045157600080fd5b5061045a610eb2565b6040516104679190613318565b60405180910390f35b34801561047c57600080fd5b506104976004803603810190610492919061363c565b610ebc565b6040516104a4919061357a565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613364565b610edc565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613669565b610fc0565b60405161050a919061357a565b60405180910390f35b34801561051f57600080fd5b506105286110b8565b6040516105359190613318565b60405180910390f35b34801561054a57600080fd5b506105536110be565b60405161056091906136d8565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b919061351f565b6110c7565b60405161059d919061357a565b60405180910390f35b3480156105b257600080fd5b506105bb611173565b6040516105c89190613702565b60405180910390f35b3480156105dd57600080fd5b506105e6611197565b6040516105f3919061357a565b60405180910390f35b34801561060857600080fd5b506106116111aa565b60405161061e9190613318565b60405180910390f35b34801561063357600080fd5b5061064e6004803603810190610649919061363c565b6111b0565b60405161065b919061357a565b60405180910390f35b34801561067057600080fd5b50610679611206565b6040516106869190613318565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b1919061363c565b61120c565b6040516106c39190613318565b60405180910390f35b3480156106d857600080fd5b506106e1611254565b005b3480156106ef57600080fd5b506106f86112dc565b604051610705919061357a565b60405180910390f35b34801561071a57600080fd5b506107236112ef565b6040516107309190613702565b60405180910390f35b34801561074557600080fd5b5061074e611315565b60405161075b9190613702565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190613595565b61133f565b005b34801561079957600080fd5b506107a2611465565b6040516107af91906134bf565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da919061351f565b6114f7565b6040516107ec919061357a565b60405180910390f35b34801561080157600080fd5b5061081c6004803603810190610817919061351f565b6115e2565b604051610829919061357a565b60405180910390f35b34801561083e57600080fd5b50610847611600565b6040516108549190613318565b60405180910390f35b34801561086957600080fd5b50610872611606565b60405161087f9190613318565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613749565b61160c565b005b3480156108bd57600080fd5b506108d860048036038101906108d39190613789565b6117c3565b005b3480156108e657600080fd5b5061090160048036038101906108fc9190613789565b61185c565b005b34801561090f57600080fd5b5061091861192c565b6040516109259190613318565b60405180910390f35b34801561093a57600080fd5b50610943611932565b6040516109509190613318565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b91906137b6565b611938565b60405161098d9190613318565b60405180910390f35b3480156109a257600080fd5b506109ab6119bf565b6040516109b89190613805565b60405180910390f35b3480156109cd57600080fd5b506109d66119e5565b6040516109e39190613318565b60405180910390f35b3480156109f857600080fd5b50610a016119eb565b604051610a0e9190613318565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190613364565b6119f1565b005b348015610a4c57600080fd5b50610a676004803603810190610a62919061363c565b611ad5565b005b348015610a7557600080fd5b50610a906004803603810190610a8b9190613595565b611bcc565b005b348015610a9e57600080fd5b50610ab96004803603810190610ab49190613749565b611cb1565b005b600a5481565b60105481565b610acf611d88565b73ffffffffffffffffffffffffffffffffffffffff16610aed611315565b73ffffffffffffffffffffffffffffffffffffffff1614610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a9061386c565b60405180910390fd5b6031610b588284611d9090919063ffffffff16565b1115610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b90906138d8565b60405180910390fd5b8160098190555080600a819055505050565b610bb3611d88565b73ffffffffffffffffffffffffffffffffffffffff16610bd1611315565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e9061386c565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610c7a90613927565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca690613927565b8015610cf35780601f10610cc857610100808354040283529160200191610cf3565b820191906000526020600020905b815481529060010190602001808311610cd657829003601f168201915b5050505050905090565b6000610d11610d0a611d88565b8484611da6565b6001905092915050565b600c5481565b610d29611d88565b73ffffffffffffffffffffffffffffffffffffffff16610d47611315565b73ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d949061386c565b60405180910390fd5b8060118190555050565b610daf611d88565b73ffffffffffffffffffffffffffffffffffffffff16610dcd611315565b73ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061386c565b60405180910390fd5b80601081905550610e456064610e37610eb2565b611f6f90919063ffffffff16565b6010541015610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906139a4565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60166020528060005260406000206000915054906101000a900460ff1681565b610ee4611d88565b73ffffffffffffffffffffffffffffffffffffffff16610f02611315565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f9061386c565b60405180910390fd5b6031610f6d8284611d9090919063ffffffff16565b1115610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906138d8565b60405180910390fd5b81600b8190555080600c819055505050565b6000610fcd848484611f85565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611018611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613a36565b60405180910390fd5b6110ac856110a4611d88565b858403611da6565b60019150509392505050565b600e5481565b60006012905090565b60006111696110d4611d88565b8484600160006110e2611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111649190613a85565b611da6565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460159054906101000a900460ff1681565b60075481565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125c611d88565b73ffffffffffffffffffffffffffffffffffffffff1661127a611315565b73ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c79061386c565b60405180910390fd5b6112da6000612aa3565b565b601460169054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611347611d88565b73ffffffffffffffffffffffffffffffffffffffff16611365611315565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b29061386c565b60405180910390fd5b60006012549050816012819055506113e460646113d6610eb2565b611f6f90919063ffffffff16565b6012541015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906139a4565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e738183604051611459929190613ab9565b60405180910390a15050565b60606004805461147490613927565b80601f01602080910402602001604051908101604052809291908181526020018280546114a090613927565b80156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050905090565b60008060016000611506611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613b54565b60405180910390fd5b6115d76115ce611d88565b85858403611da6565b600191505092915050565b60006115f66115ef611d88565b8484611f85565b6001905092915050565b600b5481565b600d5481565b611614611d88565b73ffffffffffffffffffffffffffffffffffffffff16611632611315565b73ffffffffffffffffffffffffffffffffffffffff1614611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f9061386c565b60405180910390fd5b801515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361171a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171190613be6565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117b7919061357a565b60405180910390a25050565b6117cb611d88565b73ffffffffffffffffffffffffffffffffffffffff166117e9611315565b73ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118369061386c565b60405180910390fd5b80601460166101000a81548160ff02191690831515021790555050565b611864611d88565b73ffffffffffffffffffffffffffffffffffffffff16611882611315565b73ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf9061386c565b60405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611921919061357a565b60405180910390a150565b60095481565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b60125481565b6119f9611d88565b73ffffffffffffffffffffffffffffffffffffffff16611a17611315565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a649061386c565b60405180910390fd5b6031611a828284611d9090919063ffffffff16565b1115611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba906138d8565b60405180910390fd5b81600d8190555080600e819055505050565b611add611d88565b73ffffffffffffffffffffffffffffffffffffffff16611afb611315565b73ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b489061386c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790613c78565b60405180910390fd5b611bc981612aa3565b50565b611bd4611d88565b73ffffffffffffffffffffffffffffffffffffffff16611bf2611315565b73ffffffffffffffffffffffffffffffffffffffff1614611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f9061386c565b60405180910390fd5b80600f81905550611c6a6064611c5c610eb2565b611f6f90919063ffffffff16565b600f541015611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca5906139a4565b60405180910390fd5b50565b611cb9611d88565b73ffffffffffffffffffffffffffffffffffffffff16611cd7611315565b73ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d249061386c565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60008183611d9e9190613a85565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0c90613d0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613d9c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f629190613318565b60405180910390a3505050565b60008183611f7d9190613deb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90613e8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90613f20565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121075750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613f8c565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ea5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561223f57601460169054906101000a900460ff1661223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590613ff8565b60405180910390fd5b5b600081036122585761225383836000612b69565b612a9e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122fd5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123535750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123b75760006123638361120c565b905060125482826123749190613a85565b11156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac9061408a565b60405180910390fd5b505b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561245b5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124b257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156124fd57600f548111156124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f39061411c565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125a15750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125f857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561264357601054811115612642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612639906141ae565b60405180910390fd5b5b60148054906101000a900460ff161580156126a957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156126c15750601460159054906101000a900460ff165b80156126e057506011546008541015806126df575060115460075410155b5b156126ee576126ed612de8565b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127925750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a92576000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036128a6576000600a541115612847576128206064612812600a5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b915081600860008282546128349190613a85565b92505081905550612846853084612b69565b5b600060095411156128a15761287a606461286c60095486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b9050806007600082825461288e9190613a85565b925050819055506128a0853083612b69565b5b612a68565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129b2576000600b5411156129535761292c606461291e600b5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b915081600860008282546129409190613a85565b92505081905550612952853084612b69565b5b6000600c5411156129ad576129866064612978600c5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b9050806007600082825461299a9190613a85565b925050819055506129ac853083612b69565b5b612a67565b6000600d541115612a0c576129e560646129d7600d5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b915081600860008282546129f99190613a85565b92505081905550612a0b853084612b69565b5b6000600e541115612a6657612a3f6064612a31600e5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b90508060076000828254612a539190613a85565b92505081905550612a65853083612b69565b5b5b5b612a8d612a7e8284611d9090919063ffffffff16565b84612f8090919063ffffffff16565b925050505b612a9d838383612b69565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90613e8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90613f20565b60405180910390fd5b612c52838383612f96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf90614240565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d6b9190613a85565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dcf9190613318565b60405180910390a3612de2848484612f9b565b50505050565b60016014806101000a81548160ff0219169083151502179055506000612e0d3061120c565b905060115460075410158015612e2557506011548110155b15612ee8576000612e426002601154611f6f90919063ffffffff16565b90506000612e5b82601154612f8090919063ffffffff16565b90506000479050612e6c8330612fa0565b6000612e818247612f8090919063ffffffff16565b9050612e8d838261321a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612ec093929190614260565b60405180910390a160115460076000828254612edc9190614297565b92505081905550505050505b60115460085410158015612efe57506011548110155b15612f4d57612f31601154601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612fa0565b60115460086000828254612f459190614297565b925050819055505b5060006014806101000a81548160ff021916908315150217905550565b60008183612f7891906142cb565b905092915050565b60008183612f8e9190614297565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612fbd57612fbc61430d565b5b604051908082528060200260200182016040528015612feb5781602001602082028036833780820191505090505b50905030816000815181106130035761300261433c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614380565b816001815181106130e2576130e161433c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508261314930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611938565b101561317f5761317e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611da6565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016131e39594939291906144a6565b600060405180830381600087803b1580156131fd57600080fd5b505af1158015613211573d6000803e3d6000fd5b50505050505050565b61324730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611da6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613293611315565b426040518863ffffffff1660e01b81526004016132b596959493929190614500565b60606040518083038185885af11580156132d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132f89190614576565b5050505050565b6000819050919050565b613312816132ff565b82525050565b600060208201905061332d6000830184613309565b92915050565b600080fd5b613341816132ff565b811461334c57600080fd5b50565b60008135905061335e81613338565b92915050565b6000806040838503121561337b5761337a613333565b5b60006133898582860161334f565b925050602061339a8582860161334f565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133cf826133a4565b9050919050565b6133df816133c4565b81146133ea57600080fd5b50565b6000813590506133fc816133d6565b92915050565b60006020828403121561341857613417613333565b5b6000613426848285016133ed565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346957808201518184015260208101905061344e565b60008484015250505050565b6000601f19601f8301169050919050565b60006134918261342f565b61349b818561343a565b93506134ab81856020860161344b565b6134b481613475565b840191505092915050565b600060208201905081810360008301526134d98184613486565b905092915050565b60006134ec826133a4565b9050919050565b6134fc816134e1565b811461350757600080fd5b50565b600081359050613519816134f3565b92915050565b6000806040838503121561353657613535613333565b5b60006135448582860161350a565b92505060206135558582860161334f565b9150509250929050565b60008115159050919050565b6135748161355f565b82525050565b600060208201905061358f600083018461356b565b92915050565b6000602082840312156135ab576135aa613333565b5b60006135b98482850161334f565b91505092915050565b6000819050919050565b60006135e76135e26135dd846133a4565b6135c2565b6133a4565b9050919050565b60006135f9826135cc565b9050919050565b600061360b826135ee565b9050919050565b61361b81613600565b82525050565b60006020820190506136366000830184613612565b92915050565b60006020828403121561365257613651613333565b5b60006136608482850161350a565b91505092915050565b60008060006060848603121561368257613681613333565b5b60006136908682870161350a565b93505060206136a18682870161350a565b92505060406136b28682870161334f565b9150509250925092565b600060ff82169050919050565b6136d2816136bc565b82525050565b60006020820190506136ed60008301846136c9565b92915050565b6136fc816134e1565b82525050565b600060208201905061371760008301846136f3565b92915050565b6137268161355f565b811461373157600080fd5b50565b6000813590506137438161371d565b92915050565b600080604083850312156137605761375f613333565b5b600061376e8582860161350a565b925050602061377f85828601613734565b9150509250929050565b60006020828403121561379f5761379e613333565b5b60006137ad84828501613734565b91505092915050565b600080604083850312156137cd576137cc613333565b5b60006137db8582860161350a565b92505060206137ec8582860161350a565b9150509250929050565b6137ff816133c4565b82525050565b600060208201905061381a60008301846137f6565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385660208361343a565b915061386182613820565b602082019050919050565b6000602082019050818103600083015261388581613849565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006138c2600c8361343a565b91506138cd8261388c565b602082019050919050565b600060208201905081810360008301526138f1816138b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061393f57607f821691505b602082108103613952576139516138f8565b5b50919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b600061398e600d8361343a565b915061399982613958565b602082019050919050565b600060208201905081810360008301526139bd81613981565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a2060288361343a565b9150613a2b826139c4565b604082019050919050565b60006020820190508181036000830152613a4f81613a13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a90826132ff565b9150613a9b836132ff565b9250828201905080821115613ab357613ab2613a56565b5b92915050565b6000604082019050613ace6000830185613309565b613adb6020830184613309565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b3e60258361343a565b9150613b4982613ae2565b604082019050919050565b60006020820190508181036000830152613b6d81613b31565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613bd0602a8361343a565b9150613bdb82613b74565b604082019050919050565b60006020820190508181036000830152613bff81613bc3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c6260268361343a565b9150613c6d82613c06565b604082019050919050565b60006020820190508181036000830152613c9181613c55565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613cf460248361343a565b9150613cff82613c98565b604082019050919050565b60006020820190508181036000830152613d2381613ce7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d8660228361343a565b9150613d9182613d2a565b604082019050919050565b60006020820190508181036000830152613db581613d79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613df6826132ff565b9150613e01836132ff565b925082613e1157613e10613dbc565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e7860258361343a565b9150613e8382613e1c565b604082019050919050565b60006020820190508181036000830152613ea781613e6b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0a60238361343a565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f546f2f66726f6d206164647265737320697320626c61636b6c69737465642100600082015250565b6000613f76601f8361343a565b9150613f8182613f40565b602082019050919050565b60006020820190508181036000830152613fa581613f69565b9050919050565b7f4e6f74204c61756e636865642e00000000000000000000000000000000000000600082015250565b6000613fe2600d8361343a565b9150613fed82613fac565b602082019050919050565b6000602082019050818103600083015261401181613fd5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061407460248361343a565b915061407f82614018565b604082019050919050565b600060208201905081810360008301526140a381614067565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000614106602b8361343a565b9150614111826140aa565b604082019050919050565b60006020820190508181036000830152614135816140f9565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000614198602c8361343a565b91506141a38261413c565b604082019050919050565b600060208201905081810360008301526141c78161418b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061422a60268361343a565b9150614235826141ce565b604082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b60006060820190506142756000830186613309565b6142826020830185613309565b61428f6040830184613309565b949350505050565b60006142a2826132ff565b91506142ad836132ff565b92508282039050818111156142c5576142c4613a56565b5b92915050565b60006142d6826132ff565b91506142e1836132ff565b92508282026142ef816132ff565b9150828204841483151761430657614305613a56565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061437a816134f3565b92915050565b60006020828403121561439657614395613333565b5b60006143a48482850161436b565b91505092915050565b6000819050919050565b60006143d26143cd6143c8846143ad565b6135c2565b6132ff565b9050919050565b6143e2816143b7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61441d816134e1565b82525050565b600061442f8383614414565b60208301905092915050565b6000602082019050919050565b6000614453826143e8565b61445d81856143f3565b935061446883614404565b8060005b838110156144995781516144808882614423565b975061448b8361443b565b92505060018101905061446c565b5085935050505092915050565b600060a0820190506144bb6000830188613309565b6144c860208301876143d9565b81810360408301526144da8186614448565b90506144e960608301856136f3565b6144f66080830184613309565b9695505050505050565b600060c08201905061451560008301896136f3565b6145226020830188613309565b61452f60408301876143d9565b61453c60608301866143d9565b61454960808301856136f3565b61455660a0830184613309565b979650505050505050565b60008151905061457081613338565b92915050565b60008060006060848603121561458f5761458e613333565b5b600061459d86828701614561565b93505060206145ae86828701614561565b92505060406145bf86828701614561565b915050925092509256fea26469706673582212203490c144ff57041a53da11b05ff2e4e1feed71e8ae55bdfb66820fb81f97de2b64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063715018a61161014f578063c135cc5c116100c1578063e2f456051161007a578063e2f45605146109c1578063e6c75f71146109ec578063f121e10a14610a17578063f2fde38b14610a40578063f5b01e1514610a69578063f791a94c14610a9257610288565b8063c135cc5c146108b1578063c49b9a80146108da578063ccb6135814610903578063d506d3fe1461092e578063dd62ed3e14610959578063deab8aea1461099657610288565b806395d89b411161011357806395d89b411461078d578063a457c2d7146107b8578063a9059cbb146107f5578063b45e83f814610832578063ba18d7841461085d578063c02466681461088857610288565b8063715018a6146106cc5780638091f3bf146106e357806385141a771461070e5780638da5cb5b1461073957806391d55f411461076457610288565b80631cdd3be3116101f357806349bd5a5e116101ac57806349bd5a5e146105a65780634a74bb02146105d15780634b8ce602146105fc5780634fbee193146106275780635aa821a91461066457806370a082311461068f57610288565b80631cdd3be3146104705780631d7efc04146104ad57806323b872dd146104d65780632cb7114d14610513578063313ce5671461053e578063395093511461056957610288565b8063095ea7b311610245578063095ea7b314610360578063099d0d301461039d57806309e89af7146103c857806316216e5f146103f15780631694505e1461041a57806318160ddd1461044557610288565b806301143fea1461028d57806302259e9e146102b8578063036958a2146102e357806306e7b14d1461030c57806306fdde031461033557610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610abb565b6040516102af9190613318565b60405180910390f35b3480156102c457600080fd5b506102cd610ac1565b6040516102da9190613318565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613364565b610ac7565b005b34801561031857600080fd5b50610333600480360381019061032e9190613402565b610bab565b005b34801561034157600080fd5b5061034a610c6b565b60405161035791906134bf565b60405180910390f35b34801561036c57600080fd5b506103876004803603810190610382919061351f565b610cfd565b604051610394919061357a565b60405180910390f35b3480156103a957600080fd5b506103b2610d1b565b6040516103bf9190613318565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613595565b610d21565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613595565b610da7565b005b34801561042657600080fd5b5061042f610e8c565b60405161043c9190613621565b60405180910390f35b34801561045157600080fd5b5061045a610eb2565b6040516104679190613318565b60405180910390f35b34801561047c57600080fd5b506104976004803603810190610492919061363c565b610ebc565b6040516104a4919061357a565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613364565b610edc565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613669565b610fc0565b60405161050a919061357a565b60405180910390f35b34801561051f57600080fd5b506105286110b8565b6040516105359190613318565b60405180910390f35b34801561054a57600080fd5b506105536110be565b60405161056091906136d8565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b919061351f565b6110c7565b60405161059d919061357a565b60405180910390f35b3480156105b257600080fd5b506105bb611173565b6040516105c89190613702565b60405180910390f35b3480156105dd57600080fd5b506105e6611197565b6040516105f3919061357a565b60405180910390f35b34801561060857600080fd5b506106116111aa565b60405161061e9190613318565b60405180910390f35b34801561063357600080fd5b5061064e6004803603810190610649919061363c565b6111b0565b60405161065b919061357a565b60405180910390f35b34801561067057600080fd5b50610679611206565b6040516106869190613318565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b1919061363c565b61120c565b6040516106c39190613318565b60405180910390f35b3480156106d857600080fd5b506106e1611254565b005b3480156106ef57600080fd5b506106f86112dc565b604051610705919061357a565b60405180910390f35b34801561071a57600080fd5b506107236112ef565b6040516107309190613702565b60405180910390f35b34801561074557600080fd5b5061074e611315565b60405161075b9190613702565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190613595565b61133f565b005b34801561079957600080fd5b506107a2611465565b6040516107af91906134bf565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da919061351f565b6114f7565b6040516107ec919061357a565b60405180910390f35b34801561080157600080fd5b5061081c6004803603810190610817919061351f565b6115e2565b604051610829919061357a565b60405180910390f35b34801561083e57600080fd5b50610847611600565b6040516108549190613318565b60405180910390f35b34801561086957600080fd5b50610872611606565b60405161087f9190613318565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613749565b61160c565b005b3480156108bd57600080fd5b506108d860048036038101906108d39190613789565b6117c3565b005b3480156108e657600080fd5b5061090160048036038101906108fc9190613789565b61185c565b005b34801561090f57600080fd5b5061091861192c565b6040516109259190613318565b60405180910390f35b34801561093a57600080fd5b50610943611932565b6040516109509190613318565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b91906137b6565b611938565b60405161098d9190613318565b60405180910390f35b3480156109a257600080fd5b506109ab6119bf565b6040516109b89190613805565b60405180910390f35b3480156109cd57600080fd5b506109d66119e5565b6040516109e39190613318565b60405180910390f35b3480156109f857600080fd5b50610a016119eb565b604051610a0e9190613318565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190613364565b6119f1565b005b348015610a4c57600080fd5b50610a676004803603810190610a62919061363c565b611ad5565b005b348015610a7557600080fd5b50610a906004803603810190610a8b9190613595565b611bcc565b005b348015610a9e57600080fd5b50610ab96004803603810190610ab49190613749565b611cb1565b005b600a5481565b60105481565b610acf611d88565b73ffffffffffffffffffffffffffffffffffffffff16610aed611315565b73ffffffffffffffffffffffffffffffffffffffff1614610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a9061386c565b60405180910390fd5b6031610b588284611d9090919063ffffffff16565b1115610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b90906138d8565b60405180910390fd5b8160098190555080600a819055505050565b610bb3611d88565b73ffffffffffffffffffffffffffffffffffffffff16610bd1611315565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e9061386c565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610c7a90613927565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca690613927565b8015610cf35780601f10610cc857610100808354040283529160200191610cf3565b820191906000526020600020905b815481529060010190602001808311610cd657829003601f168201915b5050505050905090565b6000610d11610d0a611d88565b8484611da6565b6001905092915050565b600c5481565b610d29611d88565b73ffffffffffffffffffffffffffffffffffffffff16610d47611315565b73ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d949061386c565b60405180910390fd5b8060118190555050565b610daf611d88565b73ffffffffffffffffffffffffffffffffffffffff16610dcd611315565b73ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061386c565b60405180910390fd5b80601081905550610e456064610e37610eb2565b611f6f90919063ffffffff16565b6010541015610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906139a4565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60166020528060005260406000206000915054906101000a900460ff1681565b610ee4611d88565b73ffffffffffffffffffffffffffffffffffffffff16610f02611315565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f9061386c565b60405180910390fd5b6031610f6d8284611d9090919063ffffffff16565b1115610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906138d8565b60405180910390fd5b81600b8190555080600c819055505050565b6000610fcd848484611f85565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611018611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613a36565b60405180910390fd5b6110ac856110a4611d88565b858403611da6565b60019150509392505050565b600e5481565b60006012905090565b60006111696110d4611d88565b8484600160006110e2611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111649190613a85565b611da6565b6001905092915050565b7f0000000000000000000000008a27d31ae7c3abfca144d515b25073c0b85f450c81565b601460159054906101000a900460ff1681565b60075481565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125c611d88565b73ffffffffffffffffffffffffffffffffffffffff1661127a611315565b73ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c79061386c565b60405180910390fd5b6112da6000612aa3565b565b601460169054906101000a900460ff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611347611d88565b73ffffffffffffffffffffffffffffffffffffffff16611365611315565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b29061386c565b60405180910390fd5b60006012549050816012819055506113e460646113d6610eb2565b611f6f90919063ffffffff16565b6012541015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906139a4565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e738183604051611459929190613ab9565b60405180910390a15050565b60606004805461147490613927565b80601f01602080910402602001604051908101604052809291908181526020018280546114a090613927565b80156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050905090565b60008060016000611506611d88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613b54565b60405180910390fd5b6115d76115ce611d88565b85858403611da6565b600191505092915050565b60006115f66115ef611d88565b8484611f85565b6001905092915050565b600b5481565b600d5481565b611614611d88565b73ffffffffffffffffffffffffffffffffffffffff16611632611315565b73ffffffffffffffffffffffffffffffffffffffff1614611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f9061386c565b60405180910390fd5b801515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361171a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171190613be6565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117b7919061357a565b60405180910390a25050565b6117cb611d88565b73ffffffffffffffffffffffffffffffffffffffff166117e9611315565b73ffffffffffffffffffffffffffffffffffffffff161461183f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118369061386c565b60405180910390fd5b80601460166101000a81548160ff02191690831515021790555050565b611864611d88565b73ffffffffffffffffffffffffffffffffffffffff16611882611315565b73ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf9061386c565b60405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611921919061357a565b60405180910390a150565b60095481565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b60125481565b6119f9611d88565b73ffffffffffffffffffffffffffffffffffffffff16611a17611315565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a649061386c565b60405180910390fd5b6031611a828284611d9090919063ffffffff16565b1115611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba906138d8565b60405180910390fd5b81600d8190555080600e819055505050565b611add611d88565b73ffffffffffffffffffffffffffffffffffffffff16611afb611315565b73ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b489061386c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790613c78565b60405180910390fd5b611bc981612aa3565b50565b611bd4611d88565b73ffffffffffffffffffffffffffffffffffffffff16611bf2611315565b73ffffffffffffffffffffffffffffffffffffffff1614611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f9061386c565b60405180910390fd5b80600f81905550611c6a6064611c5c610eb2565b611f6f90919063ffffffff16565b600f541015611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca5906139a4565b60405180910390fd5b50565b611cb9611d88565b73ffffffffffffffffffffffffffffffffffffffff16611cd7611315565b73ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d249061386c565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60008183611d9e9190613a85565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0c90613d0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613d9c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f629190613318565b60405180910390a3505050565b60008183611f7d9190613deb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90613e8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90613f20565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121075750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613f8c565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ea5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561223f57601460169054906101000a900460ff1661223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590613ff8565b60405180910390fd5b5b600081036122585761225383836000612b69565b612a9e565b7f0000000000000000000000008a27d31ae7c3abfca144d515b25073c0b85f450c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122fd5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123535750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123b75760006123638361120c565b905060125482826123749190613a85565b11156123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac9061408a565b60405180910390fd5b505b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561245b5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124b257507f0000000000000000000000008a27d31ae7c3abfca144d515b25073c0b85f450c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156124fd57600f548111156124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f39061411c565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125a15750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125f857507f0000000000000000000000008a27d31ae7c3abfca144d515b25073c0b85f450c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561264357601054811115612642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612639906141ae565b60405180910390fd5b5b60148054906101000a900460ff161580156126a957507f0000000000000000000000008a27d31ae7c3abfca144d515b25073c0b85f450c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156126c15750601460159054906101000a900460ff165b80156126e057506011546008541015806126df575060115460075410155b5b156126ee576126ed612de8565b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127925750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a92576000807f0000000000000000000000008a27d31ae7c3abfca144d515b25073c0b85f450c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036128a6576000600a541115612847576128206064612812600a5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b915081600860008282546128349190613a85565b92505081905550612846853084612b69565b5b600060095411156128a15761287a606461286c60095486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b9050806007600082825461288e9190613a85565b925050819055506128a0853083612b69565b5b612a68565b7f0000000000000000000000008a27d31ae7c3abfca144d515b25073c0b85f450c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129b2576000600b5411156129535761292c606461291e600b5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b915081600860008282546129409190613a85565b92505081905550612952853084612b69565b5b6000600c5411156129ad576129866064612978600c5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b9050806007600082825461299a9190613a85565b925050819055506129ac853083612b69565b5b612a67565b6000600d541115612a0c576129e560646129d7600d5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b915081600860008282546129f99190613a85565b92505081905550612a0b853084612b69565b5b6000600e541115612a6657612a3f6064612a31600e5486612f6a90919063ffffffff16565b611f6f90919063ffffffff16565b90508060076000828254612a539190613a85565b92505081905550612a65853083612b69565b5b5b5b612a8d612a7e8284611d9090919063ffffffff16565b84612f8090919063ffffffff16565b925050505b612a9d838383612b69565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90613e8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90613f20565b60405180910390fd5b612c52838383612f96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf90614240565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d6b9190613a85565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dcf9190613318565b60405180910390a3612de2848484612f9b565b50505050565b60016014806101000a81548160ff0219169083151502179055506000612e0d3061120c565b905060115460075410158015612e2557506011548110155b15612ee8576000612e426002601154611f6f90919063ffffffff16565b90506000612e5b82601154612f8090919063ffffffff16565b90506000479050612e6c8330612fa0565b6000612e818247612f8090919063ffffffff16565b9050612e8d838261321a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612ec093929190614260565b60405180910390a160115460076000828254612edc9190614297565b92505081905550505050505b60115460085410158015612efe57506011548110155b15612f4d57612f31601154601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612fa0565b60115460086000828254612f459190614297565b925050819055505b5060006014806101000a81548160ff021916908315150217905550565b60008183612f7891906142cb565b905092915050565b60008183612f8e9190614297565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612fbd57612fbc61430d565b5b604051908082528060200260200182016040528015612feb5781602001602082028036833780820191505090505b50905030816000815181106130035761300261433c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190614380565b816001815181106130e2576130e161433c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508261314930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611938565b101561317f5761317e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611da6565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016131e39594939291906144a6565b600060405180830381600087803b1580156131fd57600080fd5b505af1158015613211573d6000803e3d6000fd5b50505050505050565b61324730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611da6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613293611315565b426040518863ffffffff1660e01b81526004016132b596959493929190614500565b60606040518083038185885af11580156132d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132f89190614576565b5050505050565b6000819050919050565b613312816132ff565b82525050565b600060208201905061332d6000830184613309565b92915050565b600080fd5b613341816132ff565b811461334c57600080fd5b50565b60008135905061335e81613338565b92915050565b6000806040838503121561337b5761337a613333565b5b60006133898582860161334f565b925050602061339a8582860161334f565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133cf826133a4565b9050919050565b6133df816133c4565b81146133ea57600080fd5b50565b6000813590506133fc816133d6565b92915050565b60006020828403121561341857613417613333565b5b6000613426848285016133ed565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346957808201518184015260208101905061344e565b60008484015250505050565b6000601f19601f8301169050919050565b60006134918261342f565b61349b818561343a565b93506134ab81856020860161344b565b6134b481613475565b840191505092915050565b600060208201905081810360008301526134d98184613486565b905092915050565b60006134ec826133a4565b9050919050565b6134fc816134e1565b811461350757600080fd5b50565b600081359050613519816134f3565b92915050565b6000806040838503121561353657613535613333565b5b60006135448582860161350a565b92505060206135558582860161334f565b9150509250929050565b60008115159050919050565b6135748161355f565b82525050565b600060208201905061358f600083018461356b565b92915050565b6000602082840312156135ab576135aa613333565b5b60006135b98482850161334f565b91505092915050565b6000819050919050565b60006135e76135e26135dd846133a4565b6135c2565b6133a4565b9050919050565b60006135f9826135cc565b9050919050565b600061360b826135ee565b9050919050565b61361b81613600565b82525050565b60006020820190506136366000830184613612565b92915050565b60006020828403121561365257613651613333565b5b60006136608482850161350a565b91505092915050565b60008060006060848603121561368257613681613333565b5b60006136908682870161350a565b93505060206136a18682870161350a565b92505060406136b28682870161334f565b9150509250925092565b600060ff82169050919050565b6136d2816136bc565b82525050565b60006020820190506136ed60008301846136c9565b92915050565b6136fc816134e1565b82525050565b600060208201905061371760008301846136f3565b92915050565b6137268161355f565b811461373157600080fd5b50565b6000813590506137438161371d565b92915050565b600080604083850312156137605761375f613333565b5b600061376e8582860161350a565b925050602061377f85828601613734565b9150509250929050565b60006020828403121561379f5761379e613333565b5b60006137ad84828501613734565b91505092915050565b600080604083850312156137cd576137cc613333565b5b60006137db8582860161350a565b92505060206137ec8582860161350a565b9150509250929050565b6137ff816133c4565b82525050565b600060208201905061381a60008301846137f6565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061385660208361343a565b915061386182613820565b602082019050919050565b6000602082019050818103600083015261388581613849565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006138c2600c8361343a565b91506138cd8261388c565b602082019050919050565b600060208201905081810360008301526138f1816138b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061393f57607f821691505b602082108103613952576139516138f8565b5b50919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b600061398e600d8361343a565b915061399982613958565b602082019050919050565b600060208201905081810360008301526139bd81613981565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a2060288361343a565b9150613a2b826139c4565b604082019050919050565b60006020820190508181036000830152613a4f81613a13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a90826132ff565b9150613a9b836132ff565b9250828201905080821115613ab357613ab2613a56565b5b92915050565b6000604082019050613ace6000830185613309565b613adb6020830184613309565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b3e60258361343a565b9150613b4982613ae2565b604082019050919050565b60006020820190508181036000830152613b6d81613b31565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613bd0602a8361343a565b9150613bdb82613b74565b604082019050919050565b60006020820190508181036000830152613bff81613bc3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c6260268361343a565b9150613c6d82613c06565b604082019050919050565b60006020820190508181036000830152613c9181613c55565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613cf460248361343a565b9150613cff82613c98565b604082019050919050565b60006020820190508181036000830152613d2381613ce7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d8660228361343a565b9150613d9182613d2a565b604082019050919050565b60006020820190508181036000830152613db581613d79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613df6826132ff565b9150613e01836132ff565b925082613e1157613e10613dbc565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e7860258361343a565b9150613e8382613e1c565b604082019050919050565b60006020820190508181036000830152613ea781613e6b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0a60238361343a565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f546f2f66726f6d206164647265737320697320626c61636b6c69737465642100600082015250565b6000613f76601f8361343a565b9150613f8182613f40565b602082019050919050565b60006020820190508181036000830152613fa581613f69565b9050919050565b7f4e6f74204c61756e636865642e00000000000000000000000000000000000000600082015250565b6000613fe2600d8361343a565b9150613fed82613fac565b602082019050919050565b6000602082019050818103600083015261401181613fd5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061407460248361343a565b915061407f82614018565b604082019050919050565b600060208201905081810360008301526140a381614067565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000614106602b8361343a565b9150614111826140aa565b604082019050919050565b60006020820190508181036000830152614135816140f9565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000614198602c8361343a565b91506141a38261413c565b604082019050919050565b600060208201905081810360008301526141c78161418b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061422a60268361343a565b9150614235826141ce565b604082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b60006060820190506142756000830186613309565b6142826020830185613309565b61428f6040830184613309565b949350505050565b60006142a2826132ff565b91506142ad836132ff565b92508282039050818111156142c5576142c4613a56565b5b92915050565b60006142d6826132ff565b91506142e1836132ff565b92508282026142ef816132ff565b9150828204841483151761430657614305613a56565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061437a816134f3565b92915050565b60006020828403121561439657614395613333565b5b60006143a48482850161436b565b91505092915050565b6000819050919050565b60006143d26143cd6143c8846143ad565b6135c2565b6132ff565b9050919050565b6143e2816143b7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61441d816134e1565b82525050565b600061442f8383614414565b60208301905092915050565b6000602082019050919050565b6000614453826143e8565b61445d81856143f3565b935061446883614404565b8060005b838110156144995781516144808882614423565b975061448b8361443b565b92505060018101905061446c565b5085935050505092915050565b600060a0820190506144bb6000830188613309565b6144c860208301876143d9565b81810360408301526144da8186614448565b90506144e960608301856136f3565b6144f66080830184613309565b9695505050505050565b600060c08201905061451560008301896136f3565b6145226020830188613309565b61452f60408301876143d9565b61453c60608301866143d9565b61454960808301856136f3565b61455660a0830184613309565b979650505050505050565b60008151905061457081613338565b92915050565b60008060006060848603121561458f5761458e613333565b5b600061459d86828701614561565b93505060206145ae86828701614561565b92505060406145bf86828701614561565b915050925092509256fea26469706673582212203490c144ff57041a53da11b05ff2e4e1feed71e8ae55bdfb66820fb81f97de2b64736f6c63430008110033
Deployed Bytecode Sourcemap
25610:11313:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25893:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26163:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34417:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35095:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3768:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5174:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25968:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36136:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35458:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25684:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4356:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26729:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34637:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5409:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26052:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4198:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6019:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25732:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26557:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25779:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36264:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26098:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4527:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2528:94;;;;;;;;;;;;;:::i;:::-;;26604:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26442:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2042:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36580:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3987:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6352:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25930:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26011:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35691:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28271:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36401:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25851:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25816:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4962:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26345:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26229:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26287:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34860:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2777:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35232:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35989:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25893:29;;;;:::o;26163:59::-;;;;:::o;34417:212::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34536:2:::1;34512:20;34524:7;34512;:11;;:20;;;;:::i;:::-;:26;;34504:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34584:7;34566:15;:25;;;;34614:7;34602:9;:19;;;;34417:212:::0;;:::o;35095:129::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35202:14:::1;35186:13;;:30;;;;;;;;;;;;;;;;;;35095:129:::0;:::o;3768:100::-;3822:13;3855:5;3848:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3768:100;:::o;5174:169::-;5257:4;5274:39;5283:12;:10;:12::i;:::-;5297:7;5306:6;5274:8;:39::i;:::-;5331:4;5324:11;;5174:169;;;;:::o;25968:36::-;;;;:::o;36136:116::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36236:8:::1;36215:18;:29;;;;36136:116:::0;:::o;35458:221::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35572:12:::1;35545:24;:39;;;;35631:22;35649:3;35631:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;35603:24;;:50;;35595:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35458:221:::0;:::o;25684:41::-;;;;;;;;;;;;;:::o;4356:108::-;4417:7;4444:12;;4437:19;;4356:108;:::o;26729:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;34637:215::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34757:2:::1;34733:20;34745:7;34733;:11;;:20;;;;:::i;:::-;:26;;34725:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34800:7;34787:10;:20;;;;34837:7;34818:16;:26;;;;34637:215:::0;;:::o;5409:492::-;5549:4;5566:36;5576:6;5584:9;5595:6;5566:9;:36::i;:::-;5615:24;5642:11;:19;5654:6;5642:19;;;;;;;;;;;;;;;:33;5662:12;:10;:12::i;:::-;5642:33;;;;;;;;;;;;;;;;5615:60;;5714:6;5694:16;:26;;5686:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5801:57;5810:6;5818:12;:10;:12::i;:::-;5851:6;5832:16;:25;5801:8;:57::i;:::-;5889:4;5882:11;;;5409:492;;;;;:::o;26052:39::-;;;;:::o;4198:93::-;4256:5;4281:2;4274:9;;4198:93;:::o;6019:215::-;6107:4;6124:80;6133:12;:10;:12::i;:::-;6147:7;6193:10;6156:11;:25;6168:12;:10;:12::i;:::-;6156:25;;;;;;;;;;;;;;;:34;6182:7;6156:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6124:8;:80::i;:::-;6222:4;6215:11;;6019:215;;;;:::o;25732:38::-;;;:::o;26557:40::-;;;;;;;;;;;;;:::o;25779:30::-;;;;:::o;36264:125::-;36329:4;36353:19;:28;36373:7;36353:28;;;;;;;;;;;;;;;;;;;;;;;;;36346:35;;36264:125;;;:::o;26098:58::-;;;;:::o;4527:127::-;4601:7;4628:9;:18;4638:7;4628:18;;;;;;;;;;;;;;;;4621:25;;4527:127;;;:::o;2528:94::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2593:21:::1;2611:1;2593:9;:21::i;:::-;2528:94::o:0;26604:28::-;;;;;;;;;;;;;:::o;26442:70::-;;;;;;;;;;;;;:::o;2042:87::-;2088:7;2115:6;;;;;;;;;;;2108:13;;2042:87;:::o;36580:290::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36656:17:::1;36676:14;;36656:34;;36717:9;36700:14;:26;;;;36763:22;36781:3;36763:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;36745:14;;:40;;36737:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36819:44;36842:9;36853;36819:44;;;;;;;:::i;:::-;;;;;;;;36645:225;36580:290:::0;:::o;3987:104::-;4043:13;4076:7;4069:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3987:104;:::o;6352:413::-;6445:4;6462:24;6489:11;:25;6501:12;:10;:12::i;:::-;6489:25;;;;;;;;;;;;;;;:34;6515:7;6489:34;;;;;;;;;;;;;;;;6462:61;;6562:15;6542:16;:35;;6534:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6655:67;6664:12;:10;:12::i;:::-;6678:7;6706:15;6687:16;:34;6655:8;:67::i;:::-;6753:4;6746:11;;;6352:413;;;;:::o;4724:175::-;4810:4;4827:42;4837:12;:10;:12::i;:::-;4851:9;4862:6;4827:9;:42::i;:::-;4887:4;4880:11;;4724:175;;;;:::o;25930:30::-;;;;:::o;26011:33::-;;;;:::o;35691:290::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35816:8:::1;35784:40;;:19;:28;35804:7;35784:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;35776:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35913:8;35882:19;:28;35902:7;35882:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35955:7;35939:34;;;35964:8;35939:34;;;;;;:::i;:::-;;;;;;;;35691:290:::0;;:::o;28271:97::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28351:9:::1;28340:8;;:20;;;;;;;;;;;;;;;;;;28271:97:::0;:::o;36401:171::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36502:8:::1;36478:21;;:32;;;;;;;;;;;;;;;;;;36526:38;36555:8;36526:38;;;;;;:::i;:::-;;;;;;;;36401:171:::0;:::o;25851:34::-;;;;:::o;25816:28::-;;;;:::o;4962:151::-;5051:7;5078:11;:18;5090:5;5078:18;;;;;;;;;;;;;;;:27;5097:7;5078:27;;;;;;;;;;;;;;;;5071:34;;4962:151;;;;:::o;26345:90::-;;;;;;;;;;;;;:::o;26229:51::-;;;;:::o;26287:49::-;;;;:::o;34860:227::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34984:2:::1;34960:20;34972:7;34960;:11;;:20;;;;:::i;:::-;:26;;34952:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35031:7;35014:14;:24;;;;35072:7;35049:20;:30;;;;34860:227:::0;;:::o;2777:192::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2886:1:::1;2866:22;;:8;:22;;::::0;2858:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2942:19;2952:8;2942:9;:19::i;:::-;2777:192:::0;:::o;35232:218::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35344:12:::1;35318:23;:38;;;;35402:22;35420:3;35402:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;35375:23;;:49;;35367:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35232:218:::0;:::o;35989:139::-;2273:12;:10;:12::i;:::-;2262:23;;:7;:5;:7::i;:::-;:23;;;2254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36106:14:::1;36080;:23;36095:7;36080:23;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;35989:139:::0;;:::o;1234:98::-;1287:7;1314:10;1307:17;;1234:98;:::o;18048:::-;18106:7;18137:1;18133;:5;;;;:::i;:::-;18126:12;;18048:98;;;;:::o;8258:380::-;8411:1;8394:19;;:5;:19;;;8386:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8492:1;8473:21;;:7;:21;;;8465:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8576:6;8546:11;:18;8558:5;8546:18;;;;;;;;;;;;;;;:27;8565:7;8546:27;;;;;;;;;;;;;;;:36;;;;8614:7;8598:32;;8607:5;8598:32;;;8623:6;8598:32;;;;;;:::i;:::-;;;;;;;;8258:380;;;:::o;18784:98::-;18842:7;18873:1;18869;:5;;;;:::i;:::-;18862:12;;18784:98;;;;:::o;28376:3618::-;28524:1;28508:18;;:4;:18;;;28500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28601:1;28587:16;;:2;:16;;;28579:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28663:14;:20;28678:4;28663:20;;;;;;;;;;;;;;;;;;;;;;;;;28662:21;:44;;;;;28688:14;:18;28703:2;28688:18;;;;;;;;;;;;;;;;;;;;;;;;;28687:19;28662:44;28654:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28759:19;:25;28779:4;28759:25;;;;;;;;;;;;;;;;;;;;;;;;;28758:26;:54;;;;;28789:19;:23;28809:2;28789:23;;;;;;;;;;;;;;;;;;;;;;;;;28788:24;28758:54;28755:120;;;28837:8;;;;;;;;;;;28829:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;28755:120;28907:1;28897:6;:11;28894:92;;28925:28;28941:4;28947:2;28951:1;28925:15;:28::i;:::-;28968:7;;28894:92;29008:13;29002:19;;:4;:19;;;:49;;;;;29026:19;:25;29046:4;29026:25;;;;;;;;;;;;;;;;;;;;;;;;;29025:26;29002:49;:77;;;;;29056:19;:23;29076:2;29056:23;;;;;;;;;;;;;;;;;;;;;;;;;29055:24;29002:77;28998:273;;;29096:32;29131:13;29141:2;29131:9;:13::i;:::-;29096:48;;29204:14;;29194:6;29167:24;:33;;;;:::i;:::-;:51;;29159:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29081:190;28998:273;29287:19;:25;29307:4;29287:25;;;;;;;;;;;;;;;;;;;;;;;;;29286:26;:54;;;;;29317:19;:23;29337:2;29317:23;;;;;;;;;;;;;;;;;;;;;;;;;29316:24;29286:54;:77;;;;;29350:13;29344:19;;:4;:19;;;29286:77;29283:197;;;29397:23;;29387:6;:33;;29379:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;29283:197;29496:19;:25;29516:4;29496:25;;;;;;;;;;;;;;;;;;;;;;;;;29495:26;:54;;;;;29526:19;:23;29546:2;29526:23;;;;;;;;;;;;;;;;;;;;;;;;;29525:24;29495:54;:75;;;;;29557:13;29553:17;;:2;:17;;;29495:75;29492:197;;;29604:24;;29594:6;:34;;29586:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;29492:197;29709:16;;;;;;;;;;29708:17;:38;;;;;29733:13;29729:17;;:2;:17;;;29708:38;:77;;;;;29764:21;;;;;;;;;;;29708:77;:186;;;;;29821:18;;29804:13;;:35;;:89;;;;29875:18;;29856:15;;:37;;29804:89;29708:186;29705:243;;;29920:16;:14;:16::i;:::-;29705:243;29979:19;:25;29999:4;29979:25;;;;;;;;;;;;;;;;;;;;;;;;;29978:26;:54;;;;;30009:19;:23;30029:2;30009:23;;;;;;;;;;;;;;;;;;;;;;;;;30008:24;29978:54;29975:1964;;;30049:20;30084:22;30146:13;30138:21;;:4;:21;;;30135:1724;;30201:1;30189:9;;:13;30186:231;;;30242:30;30268:3;30242:21;30253:9;;30242:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;30227:45;;30312:12;30295:13;;:29;;;;;;;:::i;:::-;;;;;;;;30347:50;30363:4;30377;30384:12;30347:15;:50::i;:::-;30186:231;30456:1;30438:15;;:19;30435:251;;;30499:36;30531:3;30499:27;30510:15;;30499:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;30482:53;;30577:14;30558:15;;:33;;;;;;;:::i;:::-;;;;;;;;30614:52;30630:4;30644;30651:14;30614:15;:52::i;:::-;30435:251;30135:1724;;;30729:13;30723:19;;:2;:19;;;30720:1139;;30785:1;30772:10;;:14;30769:233;;;30826:31;30853:3;30826:22;30837:10;;30826:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;30811:46;;30897:12;30880:13;;:29;;;;;;;:::i;:::-;;;;;;;;30932:50;30948:4;30962;30969:12;30932:15;:50::i;:::-;30769:233;31042:1;31023:16;;:20;31020:253;;;31085:37;31118:3;31085:28;31096:16;;31085:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;31068:54;;31164:14;31145:15;;:33;;;;;;;:::i;:::-;;;;;;;;31201:52;31217:4;31231;31238:14;31201:15;:52::i;:::-;31020:253;30720:1139;;;31344:1;31327:14;;:18;31324:241;;;31385:35;31416:3;31385:26;31396:14;;31385:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;31370:50;;31460:12;31443:13;;:29;;;;;;;:::i;:::-;;;;;;;;31495:50;31511:4;31525;31532:12;31495:15;:50::i;:::-;31324:241;31609:1;31586:20;;:24;31583:261;;;31652:41;31689:3;31652:32;31663:20;;31652:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;31635:58;;31735:14;31716:15;;:33;;;;;;;:::i;:::-;;;;;;;;31772:52;31788:4;31802;31809:14;31772:15;:52::i;:::-;31583:261;30720:1139;30135:1724;31883:44;31894:32;31911:14;31894:12;:16;;:32;;;;:::i;:::-;31883:6;:10;;:44;;;;:::i;:::-;31874:53;;30034:1905;;29975:1964;31951:33;31967:4;31973:2;31977:6;31951:15;:33::i;:::-;28376:3618;;;;:::o;2977:173::-;3033:16;3052:6;;;;;;;;;;;3033:25;;3078:8;3069:6;;:17;;;;;;;;;;;;;;;;;;3133:8;3102:40;;3123:8;3102:40;;;;;;;;;;;;3022:128;2977:173;:::o;6867:733::-;7025:1;7007:20;;:6;:20;;;6999:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7109:1;7088:23;;:9;:23;;;7080:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7164:47;7185:6;7193:9;7204:6;7164:20;:47::i;:::-;7224:21;7248:9;:17;7258:6;7248:17;;;;;;;;;;;;;;;;7224:41;;7301:6;7284:13;:23;;7276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7422:6;7406:13;:22;7386:9;:17;7396:6;7386:17;;;;;;;;;;;;;;;:42;;;;7474:6;7450:9;:20;7460:9;7450:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7515:9;7498:35;;7507:6;7498:35;;;7526:6;7498:35;;;;;;:::i;:::-;;;;;;;;7546:46;7566:6;7574:9;7585:6;7546:19;:46::i;:::-;6988:612;6867:733;;;:::o;32002:1183::-;27313:4;27294:16;;:23;;;;;;;;;;;;;;;;;;32059:28:::1;32090:24;32108:4;32090:9;:24::i;:::-;32059:55;;32147:18;;32128:15;;:37;;:83;;;;;32193:18;;32169:20;:42;;32128:83;32125:825;;;32283:12;32298:25;32321:1;32298:18;;:22;;:25;;;;:::i;:::-;32283:40;;32338:17;32358:28;32381:4;32358:18;;:22;;:28;;;;:::i;:::-;32338:48;;32463:22;32488:21;32463:46;;32562:37;32579:4;32593;32562:16;:37::i;:::-;32668:18;32689:41;32715:14;32689:21;:25;;:41;;;;:::i;:::-;32668:62;;32788:35;32801:9;32812:10;32788:12;:35::i;:::-;32843:43;32858:4;32864:10;32876:9;32843:43;;;;;;;;:::i;:::-;;;;;;;;32920:18;;32901:15;;:37;;;;;;;:::i;:::-;;;;;;;;32213:737;;;;32125:825;32982:18;;32965:13;;:35;;:81;;;;;33028:18;;33004:20;:42;;32965:81;32962:214;;;33063:51;33080:18;;33100:13;;;;;;;;;;;33063:16;:51::i;:::-;33146:18;;33129:13;;:35;;;;;;;:::i;:::-;;;;;;;;32962:214;32048:1137;27359:5:::0;27340:16;;:24;;;;;;;;;;;;;;;;;;32002:1183::o;18517:98::-;18575:7;18606:1;18602;:5;;;;:::i;:::-;18595:12;;18517:98;;;;:::o;18296:::-;18354:7;18385:1;18381;:5;;;;:::i;:::-;18374:12;;18296:98;;;;:::o;8771:125::-;;;;:::o;9028:124::-;;;;:::o;33714:695::-;33853:21;33891:1;33877:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33853:40;;33922:4;33904;33909:1;33904:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33948:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33938:4;33943:1;33938:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34039:11;33986:50;34004:4;34019:15;;;;;;;;;;;33986:9;:50::i;:::-;:64;33983:156;;;34065:62;34082:4;34097:15;;;;;;;;;;;34124:1;34115:11;34065:8;:62::i;:::-;33983:156;34177:15;;;;;;;;;;;:66;;;34258:11;34284:1;34328:4;34347:3;34365:15;34177:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33782:627;33714:695;;:::o;33193:513::-;33341:62;33358:4;33373:15;;;;;;;;;;;33391:11;33341:8;:62::i;:::-;33446:15;;;;;;;;;;;:31;;;33485:9;33518:4;33538:11;33564:1;33607;33650:7;:5;:7::i;:::-;33672:15;33446:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33193:513;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:474::-;1110:6;1118;1167:2;1155:9;1146:7;1142:23;1138:32;1135:119;;;1173:79;;:::i;:::-;1135:119;1293:1;1318:53;1363:7;1354:6;1343:9;1339:22;1318:53;:::i;:::-;1308:63;;1264:117;1420:2;1446:53;1491:7;1482:6;1471:9;1467:22;1446:53;:::i;:::-;1436:63;;1391:118;1042:474;;;;;:::o;1522:126::-;1559:7;1599:42;1592:5;1588:54;1577:65;;1522:126;;;:::o;1654:104::-;1699:7;1728:24;1746:5;1728:24;:::i;:::-;1717:35;;1654:104;;;:::o;1764:138::-;1845:32;1871:5;1845:32;:::i;:::-;1838:5;1835:43;1825:71;;1892:1;1889;1882:12;1825:71;1764:138;:::o;1908:155::-;1962:5;2000:6;1987:20;1978:29;;2016:41;2051:5;2016:41;:::i;:::-;1908:155;;;;:::o;2069:345::-;2136:6;2185:2;2173:9;2164:7;2160:23;2156:32;2153:119;;;2191:79;;:::i;:::-;2153:119;2311:1;2336:61;2389:7;2380:6;2369:9;2365:22;2336:61;:::i;:::-;2326:71;;2282:125;2069:345;;;;:::o;2420:99::-;2472:6;2506:5;2500:12;2490:22;;2420:99;;;:::o;2525:169::-;2609:11;2643:6;2638:3;2631:19;2683:4;2678:3;2674:14;2659:29;;2525:169;;;;:::o;2700:246::-;2781:1;2791:113;2805:6;2802:1;2799:13;2791:113;;;2890:1;2885:3;2881:11;2875:18;2871:1;2866:3;2862:11;2855:39;2827:2;2824:1;2820:10;2815:15;;2791:113;;;2938:1;2929:6;2924:3;2920:16;2913:27;2762:184;2700:246;;;:::o;2952:102::-;2993:6;3044:2;3040:7;3035:2;3028:5;3024:14;3020:28;3010:38;;2952:102;;;:::o;3060:377::-;3148:3;3176:39;3209:5;3176:39;:::i;:::-;3231:71;3295:6;3290:3;3231:71;:::i;:::-;3224:78;;3311:65;3369:6;3364:3;3357:4;3350:5;3346:16;3311:65;:::i;:::-;3401:29;3423:6;3401:29;:::i;:::-;3396:3;3392:39;3385:46;;3152:285;3060:377;;;;:::o;3443:313::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3643:9;3637:4;3633:20;3629:1;3618:9;3614:17;3607:47;3671:78;3744:4;3735:6;3671:78;:::i;:::-;3663:86;;3443:313;;;;:::o;3762:96::-;3799:7;3828:24;3846:5;3828:24;:::i;:::-;3817:35;;3762:96;;;:::o;3864:122::-;3937:24;3955:5;3937:24;:::i;:::-;3930:5;3927:35;3917:63;;3976:1;3973;3966:12;3917:63;3864:122;:::o;3992:139::-;4038:5;4076:6;4063:20;4054:29;;4092:33;4119:5;4092:33;:::i;:::-;3992:139;;;;:::o;4137:474::-;4205:6;4213;4262:2;4250:9;4241:7;4237:23;4233:32;4230:119;;;4268:79;;:::i;:::-;4230:119;4388:1;4413:53;4458:7;4449:6;4438:9;4434:22;4413:53;:::i;:::-;4403:63;;4359:117;4515:2;4541:53;4586:7;4577:6;4566:9;4562:22;4541:53;:::i;:::-;4531:63;;4486:118;4137:474;;;;;:::o;4617:90::-;4651:7;4694:5;4687:13;4680:21;4669:32;;4617:90;;;:::o;4713:109::-;4794:21;4809:5;4794:21;:::i;:::-;4789:3;4782:34;4713:109;;:::o;4828:210::-;4915:4;4953:2;4942:9;4938:18;4930:26;;4966:65;5028:1;5017:9;5013:17;5004:6;4966:65;:::i;:::-;4828:210;;;;:::o;5044:329::-;5103:6;5152:2;5140:9;5131:7;5127:23;5123:32;5120:119;;;5158:79;;:::i;:::-;5120:119;5278:1;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5249:117;5044:329;;;;:::o;5379:60::-;5407:3;5428:5;5421:12;;5379:60;;;:::o;5445:142::-;5495:9;5528:53;5546:34;5555:24;5573:5;5555:24;:::i;:::-;5546:34;:::i;:::-;5528:53;:::i;:::-;5515:66;;5445:142;;;:::o;5593:126::-;5643:9;5676:37;5707:5;5676:37;:::i;:::-;5663:50;;5593:126;;;:::o;5725:153::-;5802:9;5835:37;5866:5;5835:37;:::i;:::-;5822:50;;5725:153;;;:::o;5884:185::-;5998:64;6056:5;5998:64;:::i;:::-;5993:3;5986:77;5884:185;;:::o;6075:276::-;6195:4;6233:2;6222:9;6218:18;6210:26;;6246:98;6341:1;6330:9;6326:17;6317:6;6246:98;:::i;:::-;6075:276;;;;:::o;6357:329::-;6416:6;6465:2;6453:9;6444:7;6440:23;6436:32;6433:119;;;6471:79;;:::i;:::-;6433:119;6591:1;6616:53;6661:7;6652:6;6641:9;6637:22;6616:53;:::i;:::-;6606:63;;6562:117;6357:329;;;;:::o;6692:619::-;6769:6;6777;6785;6834:2;6822:9;6813:7;6809:23;6805:32;6802:119;;;6840:79;;:::i;:::-;6802:119;6960:1;6985:53;7030:7;7021:6;7010:9;7006:22;6985:53;:::i;:::-;6975:63;;6931:117;7087:2;7113:53;7158:7;7149:6;7138:9;7134:22;7113:53;:::i;:::-;7103:63;;7058:118;7215:2;7241:53;7286:7;7277:6;7266:9;7262:22;7241:53;:::i;:::-;7231:63;;7186:118;6692:619;;;;;:::o;7317:86::-;7352:7;7392:4;7385:5;7381:16;7370:27;;7317:86;;;:::o;7409:112::-;7492:22;7508:5;7492:22;:::i;:::-;7487:3;7480:35;7409:112;;:::o;7527:214::-;7616:4;7654:2;7643:9;7639:18;7631:26;;7667:67;7731:1;7720:9;7716:17;7707:6;7667:67;:::i;:::-;7527:214;;;;:::o;7747:118::-;7834:24;7852:5;7834:24;:::i;:::-;7829:3;7822:37;7747:118;;:::o;7871:222::-;7964:4;8002:2;7991:9;7987:18;7979:26;;8015:71;8083:1;8072:9;8068:17;8059:6;8015:71;:::i;:::-;7871:222;;;;:::o;8099:116::-;8169:21;8184:5;8169:21;:::i;:::-;8162:5;8159:32;8149:60;;8205:1;8202;8195:12;8149:60;8099:116;:::o;8221:133::-;8264:5;8302:6;8289:20;8280:29;;8318:30;8342:5;8318:30;:::i;:::-;8221:133;;;;:::o;8360:468::-;8425:6;8433;8482:2;8470:9;8461:7;8457:23;8453:32;8450:119;;;8488:79;;:::i;:::-;8450:119;8608:1;8633:53;8678:7;8669:6;8658:9;8654:22;8633:53;:::i;:::-;8623:63;;8579:117;8735:2;8761:50;8803:7;8794:6;8783:9;8779:22;8761:50;:::i;:::-;8751:60;;8706:115;8360:468;;;;;:::o;8834:323::-;8890:6;8939:2;8927:9;8918:7;8914:23;8910:32;8907:119;;;8945:79;;:::i;:::-;8907:119;9065:1;9090:50;9132:7;9123:6;9112:9;9108:22;9090:50;:::i;:::-;9080:60;;9036:114;8834:323;;;;:::o;9163:474::-;9231:6;9239;9288:2;9276:9;9267:7;9263:23;9259:32;9256:119;;;9294:79;;:::i;:::-;9256:119;9414:1;9439:53;9484:7;9475:6;9464:9;9460:22;9439:53;:::i;:::-;9429:63;;9385:117;9541:2;9567:53;9612:7;9603:6;9592:9;9588:22;9567:53;:::i;:::-;9557:63;;9512:118;9163:474;;;;;:::o;9643:142::-;9746:32;9772:5;9746:32;:::i;:::-;9741:3;9734:45;9643:142;;:::o;9791:254::-;9900:4;9938:2;9927:9;9923:18;9915:26;;9951:87;10035:1;10024:9;10020:17;10011:6;9951:87;:::i;:::-;9791:254;;;;:::o;10051:182::-;10191:34;10187:1;10179:6;10175:14;10168:58;10051:182;:::o;10239:366::-;10381:3;10402:67;10466:2;10461:3;10402:67;:::i;:::-;10395:74;;10478:93;10567:3;10478:93;:::i;:::-;10596:2;10591:3;10587:12;10580:19;;10239:366;;;:::o;10611:419::-;10777:4;10815:2;10804:9;10800:18;10792:26;;10864:9;10858:4;10854:20;10850:1;10839:9;10835:17;10828:47;10892:131;11018:4;10892:131;:::i;:::-;10884:139;;10611:419;;;:::o;11036:162::-;11176:14;11172:1;11164:6;11160:14;11153:38;11036:162;:::o;11204:366::-;11346:3;11367:67;11431:2;11426:3;11367:67;:::i;:::-;11360:74;;11443:93;11532:3;11443:93;:::i;:::-;11561:2;11556:3;11552:12;11545:19;;11204:366;;;:::o;11576:419::-;11742:4;11780:2;11769:9;11765:18;11757:26;;11829:9;11823:4;11819:20;11815:1;11804:9;11800:17;11793:47;11857:131;11983:4;11857:131;:::i;:::-;11849:139;;11576:419;;;:::o;12001:180::-;12049:77;12046:1;12039:88;12146:4;12143:1;12136:15;12170:4;12167:1;12160:15;12187:320;12231:6;12268:1;12262:4;12258:12;12248:22;;12315:1;12309:4;12305:12;12336:18;12326:81;;12392:4;12384:6;12380:17;12370:27;;12326:81;12454:2;12446:6;12443:14;12423:18;12420:38;12417:84;;12473:18;;:::i;:::-;12417:84;12238:269;12187:320;;;:::o;12513:163::-;12653:15;12649:1;12641:6;12637:14;12630:39;12513:163;:::o;12682:366::-;12824:3;12845:67;12909:2;12904:3;12845:67;:::i;:::-;12838:74;;12921:93;13010:3;12921:93;:::i;:::-;13039:2;13034:3;13030:12;13023:19;;12682:366;;;:::o;13054:419::-;13220:4;13258:2;13247:9;13243:18;13235:26;;13307:9;13301:4;13297:20;13293:1;13282:9;13278:17;13271:47;13335:131;13461:4;13335:131;:::i;:::-;13327:139;;13054:419;;;:::o;13479:227::-;13619:34;13615:1;13607:6;13603:14;13596:58;13688:10;13683:2;13675:6;13671:15;13664:35;13479:227;:::o;13712:366::-;13854:3;13875:67;13939:2;13934:3;13875:67;:::i;:::-;13868:74;;13951:93;14040:3;13951:93;:::i;:::-;14069:2;14064:3;14060:12;14053:19;;13712:366;;;:::o;14084:419::-;14250:4;14288:2;14277:9;14273:18;14265:26;;14337:9;14331:4;14327:20;14323:1;14312:9;14308:17;14301:47;14365:131;14491:4;14365:131;:::i;:::-;14357:139;;14084:419;;;:::o;14509:180::-;14557:77;14554:1;14547:88;14654:4;14651:1;14644:15;14678:4;14675:1;14668:15;14695:191;14735:3;14754:20;14772:1;14754:20;:::i;:::-;14749:25;;14788:20;14806:1;14788:20;:::i;:::-;14783:25;;14831:1;14828;14824:9;14817:16;;14852:3;14849:1;14846:10;14843:36;;;14859:18;;:::i;:::-;14843:36;14695:191;;;;:::o;14892:332::-;15013:4;15051:2;15040:9;15036:18;15028:26;;15064:71;15132:1;15121:9;15117:17;15108:6;15064:71;:::i;:::-;15145:72;15213:2;15202:9;15198:18;15189:6;15145:72;:::i;:::-;14892:332;;;;;:::o;15230:224::-;15370:34;15366:1;15358:6;15354:14;15347:58;15439:7;15434:2;15426:6;15422:15;15415:32;15230:224;:::o;15460:366::-;15602:3;15623:67;15687:2;15682:3;15623:67;:::i;:::-;15616:74;;15699:93;15788:3;15699:93;:::i;:::-;15817:2;15812:3;15808:12;15801:19;;15460:366;;;:::o;15832:419::-;15998:4;16036:2;16025:9;16021:18;16013:26;;16085:9;16079:4;16075:20;16071:1;16060:9;16056:17;16049:47;16113:131;16239:4;16113:131;:::i;:::-;16105:139;;15832:419;;;:::o;16257:229::-;16397:34;16393:1;16385:6;16381:14;16374:58;16466:12;16461:2;16453:6;16449:15;16442:37;16257:229;:::o;16492:366::-;16634:3;16655:67;16719:2;16714:3;16655:67;:::i;:::-;16648:74;;16731:93;16820:3;16731:93;:::i;:::-;16849:2;16844:3;16840:12;16833:19;;16492:366;;;:::o;16864:419::-;17030:4;17068:2;17057:9;17053:18;17045:26;;17117:9;17111:4;17107:20;17103:1;17092:9;17088:17;17081:47;17145:131;17271:4;17145:131;:::i;:::-;17137:139;;16864:419;;;:::o;17289:225::-;17429:34;17425:1;17417:6;17413:14;17406:58;17498:8;17493:2;17485:6;17481:15;17474:33;17289:225;:::o;17520:366::-;17662:3;17683:67;17747:2;17742:3;17683:67;:::i;:::-;17676:74;;17759:93;17848:3;17759:93;:::i;:::-;17877:2;17872:3;17868:12;17861:19;;17520:366;;;:::o;17892:419::-;18058:4;18096:2;18085:9;18081:18;18073:26;;18145:9;18139:4;18135:20;18131:1;18120:9;18116:17;18109:47;18173:131;18299:4;18173:131;:::i;:::-;18165:139;;17892:419;;;:::o;18317:223::-;18457:34;18453:1;18445:6;18441:14;18434:58;18526:6;18521:2;18513:6;18509:15;18502:31;18317:223;:::o;18546:366::-;18688:3;18709:67;18773:2;18768:3;18709:67;:::i;:::-;18702:74;;18785:93;18874:3;18785:93;:::i;:::-;18903:2;18898:3;18894:12;18887:19;;18546:366;;;:::o;18918:419::-;19084:4;19122:2;19111:9;19107:18;19099:26;;19171:9;19165:4;19161:20;19157:1;19146:9;19142:17;19135:47;19199:131;19325:4;19199:131;:::i;:::-;19191:139;;18918:419;;;:::o;19343:221::-;19483:34;19479:1;19471:6;19467:14;19460:58;19552:4;19547:2;19539:6;19535:15;19528:29;19343:221;:::o;19570:366::-;19712:3;19733:67;19797:2;19792:3;19733:67;:::i;:::-;19726:74;;19809:93;19898:3;19809:93;:::i;:::-;19927:2;19922:3;19918:12;19911:19;;19570:366;;;:::o;19942:419::-;20108:4;20146:2;20135:9;20131:18;20123:26;;20195:9;20189:4;20185:20;20181:1;20170:9;20166:17;20159:47;20223:131;20349:4;20223:131;:::i;:::-;20215:139;;19942:419;;;:::o;20367:180::-;20415:77;20412:1;20405:88;20512:4;20509:1;20502:15;20536:4;20533:1;20526:15;20553:185;20593:1;20610:20;20628:1;20610:20;:::i;:::-;20605:25;;20644:20;20662:1;20644:20;:::i;:::-;20639:25;;20683:1;20673:35;;20688:18;;:::i;:::-;20673:35;20730:1;20727;20723:9;20718:14;;20553:185;;;;:::o;20744:224::-;20884:34;20880:1;20872:6;20868:14;20861:58;20953:7;20948:2;20940:6;20936:15;20929:32;20744:224;:::o;20974:366::-;21116:3;21137:67;21201:2;21196:3;21137:67;:::i;:::-;21130:74;;21213:93;21302:3;21213:93;:::i;:::-;21331:2;21326:3;21322:12;21315:19;;20974:366;;;:::o;21346:419::-;21512:4;21550:2;21539:9;21535:18;21527:26;;21599:9;21593:4;21589:20;21585:1;21574:9;21570:17;21563:47;21627:131;21753:4;21627:131;:::i;:::-;21619:139;;21346:419;;;:::o;21771:222::-;21911:34;21907:1;21899:6;21895:14;21888:58;21980:5;21975:2;21967:6;21963:15;21956:30;21771:222;:::o;21999:366::-;22141:3;22162:67;22226:2;22221:3;22162:67;:::i;:::-;22155:74;;22238:93;22327:3;22238:93;:::i;:::-;22356:2;22351:3;22347:12;22340:19;;21999:366;;;:::o;22371:419::-;22537:4;22575:2;22564:9;22560:18;22552:26;;22624:9;22618:4;22614:20;22610:1;22599:9;22595:17;22588:47;22652:131;22778:4;22652:131;:::i;:::-;22644:139;;22371:419;;;:::o;22796:181::-;22936:33;22932:1;22924:6;22920:14;22913:57;22796:181;:::o;22983:366::-;23125:3;23146:67;23210:2;23205:3;23146:67;:::i;:::-;23139:74;;23222:93;23311:3;23222:93;:::i;:::-;23340:2;23335:3;23331:12;23324:19;;22983:366;;;:::o;23355:419::-;23521:4;23559:2;23548:9;23544:18;23536:26;;23608:9;23602:4;23598:20;23594:1;23583:9;23579:17;23572:47;23636:131;23762:4;23636:131;:::i;:::-;23628:139;;23355:419;;;:::o;23780:163::-;23920:15;23916:1;23908:6;23904:14;23897:39;23780:163;:::o;23949:366::-;24091:3;24112:67;24176:2;24171:3;24112:67;:::i;:::-;24105:74;;24188:93;24277:3;24188:93;:::i;:::-;24306:2;24301:3;24297:12;24290:19;;23949:366;;;:::o;24321:419::-;24487:4;24525:2;24514:9;24510:18;24502:26;;24574:9;24568:4;24564:20;24560:1;24549:9;24545:17;24538:47;24602:131;24728:4;24602:131;:::i;:::-;24594:139;;24321:419;;;:::o;24746:223::-;24886:34;24882:1;24874:6;24870:14;24863:58;24955:6;24950:2;24942:6;24938:15;24931:31;24746:223;:::o;24975:366::-;25117:3;25138:67;25202:2;25197:3;25138:67;:::i;:::-;25131:74;;25214:93;25303:3;25214:93;:::i;:::-;25332:2;25327:3;25323:12;25316:19;;24975:366;;;:::o;25347:419::-;25513:4;25551:2;25540:9;25536:18;25528:26;;25600:9;25594:4;25590:20;25586:1;25575:9;25571:17;25564:47;25628:131;25754:4;25628:131;:::i;:::-;25620:139;;25347:419;;;:::o;25772:230::-;25912:34;25908:1;25900:6;25896:14;25889:58;25981:13;25976:2;25968:6;25964:15;25957:38;25772:230;:::o;26008:366::-;26150:3;26171:67;26235:2;26230:3;26171:67;:::i;:::-;26164:74;;26247:93;26336:3;26247:93;:::i;:::-;26365:2;26360:3;26356:12;26349:19;;26008:366;;;:::o;26380:419::-;26546:4;26584:2;26573:9;26569:18;26561:26;;26633:9;26627:4;26623:20;26619:1;26608:9;26604:17;26597:47;26661:131;26787:4;26661:131;:::i;:::-;26653:139;;26380:419;;;:::o;26805:231::-;26945:34;26941:1;26933:6;26929:14;26922:58;27014:14;27009:2;27001:6;26997:15;26990:39;26805:231;:::o;27042:366::-;27184:3;27205:67;27269:2;27264:3;27205:67;:::i;:::-;27198:74;;27281:93;27370:3;27281:93;:::i;:::-;27399:2;27394:3;27390:12;27383:19;;27042:366;;;:::o;27414:419::-;27580:4;27618:2;27607:9;27603:18;27595:26;;27667:9;27661:4;27657:20;27653:1;27642:9;27638:17;27631:47;27695:131;27821:4;27695:131;:::i;:::-;27687:139;;27414:419;;;:::o;27839:225::-;27979:34;27975:1;27967:6;27963:14;27956:58;28048:8;28043:2;28035:6;28031:15;28024:33;27839:225;:::o;28070:366::-;28212:3;28233:67;28297:2;28292:3;28233:67;:::i;:::-;28226:74;;28309:93;28398:3;28309:93;:::i;:::-;28427:2;28422:3;28418:12;28411:19;;28070:366;;;:::o;28442:419::-;28608:4;28646:2;28635:9;28631:18;28623:26;;28695:9;28689:4;28685:20;28681:1;28670:9;28666:17;28659:47;28723:131;28849:4;28723:131;:::i;:::-;28715:139;;28442:419;;;:::o;28867:442::-;29016:4;29054:2;29043:9;29039:18;29031:26;;29067:71;29135:1;29124:9;29120:17;29111:6;29067:71;:::i;:::-;29148:72;29216:2;29205:9;29201:18;29192:6;29148:72;:::i;:::-;29230;29298:2;29287:9;29283:18;29274:6;29230:72;:::i;:::-;28867:442;;;;;;:::o;29315:194::-;29355:4;29375:20;29393:1;29375:20;:::i;:::-;29370:25;;29409:20;29427:1;29409:20;:::i;:::-;29404:25;;29453:1;29450;29446:9;29438:17;;29477:1;29471:4;29468:11;29465:37;;;29482:18;;:::i;:::-;29465:37;29315:194;;;;:::o;29515:410::-;29555:7;29578:20;29596:1;29578:20;:::i;:::-;29573:25;;29612:20;29630:1;29612:20;:::i;:::-;29607:25;;29667:1;29664;29660:9;29689:30;29707:11;29689:30;:::i;:::-;29678:41;;29868:1;29859:7;29855:15;29852:1;29849:22;29829:1;29822:9;29802:83;29779:139;;29898:18;;:::i;:::-;29779:139;29563:362;29515:410;;;;:::o;29931:180::-;29979:77;29976:1;29969:88;30076:4;30073:1;30066:15;30100:4;30097:1;30090:15;30117:180;30165:77;30162:1;30155:88;30262:4;30259:1;30252:15;30286:4;30283:1;30276:15;30303:143;30360:5;30391:6;30385:13;30376:22;;30407:33;30434:5;30407:33;:::i;:::-;30303:143;;;;:::o;30452:351::-;30522:6;30571:2;30559:9;30550:7;30546:23;30542:32;30539:119;;;30577:79;;:::i;:::-;30539:119;30697:1;30722:64;30778:7;30769:6;30758:9;30754:22;30722:64;:::i;:::-;30712:74;;30668:128;30452:351;;;;:::o;30809:85::-;30854:7;30883:5;30872:16;;30809:85;;;:::o;30900:158::-;30958:9;30991:61;31009:42;31018:32;31044:5;31018:32;:::i;:::-;31009:42;:::i;:::-;30991:61;:::i;:::-;30978:74;;30900:158;;;:::o;31064:147::-;31159:45;31198:5;31159:45;:::i;:::-;31154:3;31147:58;31064:147;;:::o;31217:114::-;31284:6;31318:5;31312:12;31302:22;;31217:114;;;:::o;31337:184::-;31436:11;31470:6;31465:3;31458:19;31510:4;31505:3;31501:14;31486:29;;31337:184;;;;:::o;31527:132::-;31594:4;31617:3;31609:11;;31647:4;31642:3;31638:14;31630:22;;31527:132;;;:::o;31665:108::-;31742:24;31760:5;31742:24;:::i;:::-;31737:3;31730:37;31665:108;;:::o;31779:179::-;31848:10;31869:46;31911:3;31903:6;31869:46;:::i;:::-;31947:4;31942:3;31938:14;31924:28;;31779:179;;;;:::o;31964:113::-;32034:4;32066;32061:3;32057:14;32049:22;;31964:113;;;:::o;32113:732::-;32232:3;32261:54;32309:5;32261:54;:::i;:::-;32331:86;32410:6;32405:3;32331:86;:::i;:::-;32324:93;;32441:56;32491:5;32441:56;:::i;:::-;32520:7;32551:1;32536:284;32561:6;32558:1;32555:13;32536:284;;;32637:6;32631:13;32664:63;32723:3;32708:13;32664:63;:::i;:::-;32657:70;;32750:60;32803:6;32750:60;:::i;:::-;32740:70;;32596:224;32583:1;32580;32576:9;32571:14;;32536:284;;;32540:14;32836:3;32829:10;;32237:608;;;32113:732;;;;:::o;32851:831::-;33114:4;33152:3;33141:9;33137:19;33129:27;;33166:71;33234:1;33223:9;33219:17;33210:6;33166:71;:::i;:::-;33247:80;33323:2;33312:9;33308:18;33299:6;33247:80;:::i;:::-;33374:9;33368:4;33364:20;33359:2;33348:9;33344:18;33337:48;33402:108;33505:4;33496:6;33402:108;:::i;:::-;33394:116;;33520:72;33588:2;33577:9;33573:18;33564:6;33520:72;:::i;:::-;33602:73;33670:3;33659:9;33655:19;33646:6;33602:73;:::i;:::-;32851:831;;;;;;;;:::o;33688:807::-;33937:4;33975:3;33964:9;33960:19;33952:27;;33989:71;34057:1;34046:9;34042:17;34033:6;33989:71;:::i;:::-;34070:72;34138:2;34127:9;34123:18;34114:6;34070:72;:::i;:::-;34152:80;34228:2;34217:9;34213:18;34204:6;34152:80;:::i;:::-;34242;34318:2;34307:9;34303:18;34294:6;34242:80;:::i;:::-;34332:73;34400:3;34389:9;34385:19;34376:6;34332:73;:::i;:::-;34415;34483:3;34472:9;34468:19;34459:6;34415:73;:::i;:::-;33688:807;;;;;;;;;:::o;34501:143::-;34558:5;34589:6;34583:13;34574:22;;34605:33;34632:5;34605:33;:::i;:::-;34501:143;;;;:::o;34650:663::-;34738:6;34746;34754;34803:2;34791:9;34782:7;34778:23;34774:32;34771:119;;;34809:79;;:::i;:::-;34771:119;34929:1;34954:64;35010:7;35001:6;34990:9;34986:22;34954:64;:::i;:::-;34944:74;;34900:128;35067:2;35093:64;35149:7;35140:6;35129:9;35125:22;35093:64;:::i;:::-;35083:74;;35038:129;35206:2;35232:64;35288:7;35279:6;35268:9;35264:22;35232:64;:::i;:::-;35222:74;;35177:129;34650:663;;;;;:::o
Swarm Source
ipfs://3490c144ff57041a53da11b05ff2e4e1feed71e8ae55bdfb66820fb81f97de2b
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.