ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 MARS
Holders
556,337 (0.00%)
Market
Price
$0.00 @ 0.000000 FTM
Onchain Market Cap
$112,200,000.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 9 Decimals)
Balance
105,296.05219691 MARSValue
$0.01 ( ~0.0101505782073208 FTM) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
MarsToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-05-23 */ /* MarsToken is a deflationary defi token For every transaction, 2% goes to holders and 3% goes to the Liquidity Pool As the burn address participates as a holder, the supply is forever decreasing */ pragma solidity ^0.6.12; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract MarsToken is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "ProjectMars Token"; string private _symbol = "MARS"; uint8 private _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 3; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 5000000 * 10**6 * 10**9; uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; // Fantom Mainnet, Spiritswap Router IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x16327E3FbDaCA3bcF7E38F5Af2599D2DDc33aE52); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setRouter(address router) public onlyOwner { uniswapV2Router = IUniswapV2Router02(router); } function setPairAddress(address pair) public onlyOwner { uniswapV2Pair = pair; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { 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); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // 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); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function 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 ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405269d3c21bcecceda1000000600955600954600019816200002057fe5b0660001903600a556040518060400160405280601181526020017f50726f6a6563744d61727320546f6b656e000000000000000000000000000000815250600c90805190602001906200007592919062000612565b506040518060400160405280600481526020017f4d41525300000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c392919062000612565b506009600e60006101000a81548160ff021916908360ff1602179055506002600f55600f5460105560036011556011546012556001601460156101000a81548160ff02191690831515021790555069010f0cf064dd59200000601555681b1ae4d6e2ef5000006016553480156200013957600080fd5b5060006200014c620005e160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a546003600062000201620005e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060007316327e3fbdaca3bcf7e38f5af2599d2ddc33ae5290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029f57600080fd5b505afa158015620002b4573d6000803e3d6000fd5b505050506040513d6020811015620002cb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033f57600080fd5b505afa15801562000354573d6000803e3d6000fd5b505050506040513d60208110156200036b57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620003e657600080fd5b505af1158015620003fb573d6000803e3d6000fd5b505050506040513d60208110156200041257600080fd5b8101908080519060200190929190505050601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620004ba620005e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000573620005e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a350620006b8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200065557805160ff191683800117855562000686565b8280016001018555821562000686579182015b828111156200068557825182559160200191906001019062000668565b5b50905062000695919062000699565b5090565b5b80821115620006b45760008160009055506001016200069a565b5090565b61510980620006c86000396000f3fe6080604052600436106102345760003560e01c80636bc87c3a1161012e578063a69df4b5116100ab578063d543dbeb1161006f578063d543dbeb14610c63578063dd46706414610c9e578063dd62ed3e14610cd9578063ea2f0b3714610d5e578063f2fde38b14610daf5761023b565b8063a69df4b514610b22578063a9059cbb14610b39578063b6c5232414610baa578063c0d7865514610bd5578063c49b9a8014610c265761023b565b80638da5cb5b116100f25780638da5cb5b146109545780638ee88c531461099557806395d89b41146109d0578063a22d483214610a60578063a457c2d714610ab15761023b565b80636bc87c3a1461081b57806370a0823114610846578063715018a6146108ab5780637d1db4a5146108c257806388f82020146108ed5761023b565b80633685d419116101bc5780634549b039116101805780634549b0391461069a57806349bd5a5e146106f55780634a74bb021461073657806352390c02146107635780635342acb4146107b45761023b565b80633685d4191461052157806339509351146105725780633b124fe7146105e35780633bd5d1731461060e578063437823ec146106495761023b565b80631694505e116102035780631694505e146103a757806318160ddd146103e857806323b872dd146104135780632d838119146104a4578063313ce567146104f35761023b565b8063061c82d01461024057806306fdde031461027b578063095ea7b31461030b57806313114a9d1461037c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610e00565b005b34801561028757600080fd5b50610290610ed2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d05780820151818401526020810190506102b5565b50505050905090810190601f1680156102fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031757600080fd5b506103646004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f74565b60405180821515815260200191505060405180910390f35b34801561038857600080fd5b50610391610f92565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103bc610f9c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f457600080fd5b506103fd610fc2565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b5061048c6004803603606081101561043657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fcc565b60405180821515815260200191505060405180910390f35b3480156104b057600080fd5b506104dd600480360360208110156104c757600080fd5b81019080803590602001909291905050506110a5565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b50610508611129565b604051808260ff16815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611140565b005b34801561057e57600080fd5b506105cb6004803603604081101561059557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ca565b60405180821515815260200191505060405180910390f35b3480156105ef57600080fd5b506105f861157d565b6040518082815260200191505060405180910390f35b34801561061a57600080fd5b506106476004803603602081101561063157600080fd5b8101908080359060200190929190505050611583565b005b34801561065557600080fd5b506106986004803603602081101561066c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611714565b005b3480156106a657600080fd5b506106df600480360360408110156106bd57600080fd5b8101908080359060200190929190803515159060200190929190505050611837565b6040518082815260200191505060405180910390f35b34801561070157600080fd5b5061070a6118ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074257600080fd5b5061074b611914565b60405180821515815260200191505060405180910390f35b34801561076f57600080fd5b506107b26004803603602081101561078657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611927565b005b3480156107c057600080fd5b50610803600480360360208110156107d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c41565b60405180821515815260200191505060405180910390f35b34801561082757600080fd5b50610830611c97565b6040518082815260200191505060405180910390f35b34801561085257600080fd5b506108956004803603602081101561086957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c9d565b6040518082815260200191505060405180910390f35b3480156108b757600080fd5b506108c0611d88565b005b3480156108ce57600080fd5b506108d7611f0e565b6040518082815260200191505060405180910390f35b3480156108f957600080fd5b5061093c6004803603602081101561091057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f14565b60405180821515815260200191505060405180910390f35b34801561096057600080fd5b50610969611f6a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109a157600080fd5b506109ce600480360360208110156109b857600080fd5b8101908080359060200190929190505050611f93565b005b3480156109dc57600080fd5b506109e5612065565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a25578082015181840152602081019050610a0a565b50505050905090810190601f168015610a525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a6c57600080fd5b50610aaf60048036036020811015610a8357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612107565b005b348015610abd57600080fd5b50610b0a60048036036040811015610ad457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612213565b60405180821515815260200191505060405180910390f35b348015610b2e57600080fd5b50610b376122e0565b005b348015610b4557600080fd5b50610b9260048036036040811015610b5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124fd565b60405180821515815260200191505060405180910390f35b348015610bb657600080fd5b50610bbf61251b565b6040518082815260200191505060405180910390f35b348015610be157600080fd5b50610c2460048036036020811015610bf857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612525565b005b348015610c3257600080fd5b50610c6160048036036020811015610c4957600080fd5b81019080803515159060200190929190505050612631565b005b348015610c6f57600080fd5b50610c9c60048036036020811015610c8657600080fd5b810190808035906020019092919050505061274f565b005b348015610caa57600080fd5b50610cd760048036036020811015610cc157600080fd5b8101908080359060200190929190505050612848565b005b348015610ce557600080fd5b50610d4860048036036040811015610cfc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a39565b6040518082815260200191505060405180910390f35b348015610d6a57600080fd5b50610dad60048036036020811015610d8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ac0565b005b348015610dbb57600080fd5b50610dfe60048036036020811015610dd257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612be3565b005b610e08612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6a5780601f10610f3f57610100808354040283529160200191610f6a565b820191906000526020600020905b815481529060010190602001808311610f4d57829003601f168201915b5050505050905090565b6000610f88610f81612dee565b8484612df6565b6001905092915050565b6000600b54905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6000610fd9848484612fed565b61109a84610fe5612dee565b61109585604051806060016040528060288152602001614fc660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104b612dee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b29092919063ffffffff16565b612df6565b600190509392505050565b6000600a54821115611102576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614f0b602a913960400191505060405180910390fd5b600061110c613472565b9050611121818461349d90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b611148612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156114c6578173ffffffffffffffffffffffffffffffffffffffff16600882815481106112fb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114b95760086001600880549050038154811061135757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061138f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061147f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114c6565b80806001019150506112ca565b5050565b60006115736114d7612dee565b8461156e85600560006114e8612dee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b612df6565b6001905092915050565b600f5481565b600061158d612dee565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615060602c913960400191505060405180910390fd5b600061163d8361356f565b5050505050905061169681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116ee81600a546135cb90919063ffffffff16565b600a8190555061170983600b546134e790919063ffffffff16565b600b81905550505050565b61171c612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156118b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816118d15760006118c18461356f565b50505050509050809150506118e8565b60006118dc8461356f565b50505050915050809150505b92915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460159054906101000a900460ff1681565b61192f612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b8357611b3f600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d83565b611d80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a5565b90505b919050565b611d90612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f9b612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120fd5780601f106120d2576101008083540402835291602001916120fd565b820191906000526020600020905b8154815290600101906020018083116120e057829003601f168201915b5050505050905090565b61210f612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006122d6612220612dee565b846122d1856040518060600160405280602581526020016150af602591396005600061224a612dee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b29092919063ffffffff16565b612df6565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061508c6023913960400191505060405180910390fd5b60025442116123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f436f6e7472616374206973206c6f636b6564000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061251161250a612dee565b8484612fed565b6001905092915050565b6000600254905090565b61252d612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612639612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612757612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61283f60646128318360095461361590919063ffffffff16565b61349d90919063ffffffff16565b60158190555050565b612850612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612910576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ac8612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612beb612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f356026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061503c6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f5b6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806150176025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ee86023913960400191505060405180910390fd5b60008111613152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fee6029913960400191505060405180910390fd5b61315a611f6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131c85750613198611f6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561322957601554811115613228576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f7d6028913960400191505060405180910390fd5b5b600061323430611c9d565b905060155481106132455760155490505b60006016548210159050808015613267575060148054906101000a900460ff16155b80156132c15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132d95750601460159054906101000a900460ff165b156132ed5760165491506132ec8261369b565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133945750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561339e57600090505b6133aa8686868461377b565b505050505050565b600083831115829061345f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613424578082015181840152602081019050613409565b50505050905090810190601f1680156134515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061347f613a8c565b91509150613496818361349d90919063ffffffff16565b9250505090565b60006134df83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d1d565b905092915050565b600080828401905083811015613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006135868a613de3565b92509250925060008060006135a48d868661359f613472565b613e3d565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061360d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133b2565b905092915050565b6000808314156136285760009050613695565b600082840290508284828161363957fe5b0414613690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614fa56021913960400191505060405180910390fd5b809150505b92915050565b60016014806101000a81548160ff02191690831515021790555060006136cb60028361349d90919063ffffffff16565b905060006136e282846135cb90919063ffffffff16565b905060004790506136f283613ec6565b600061370782476135cb90919063ffffffff16565b9050613713838261417a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b80613789576137886142cf565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561382c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138415761383c848484614312565b613a78565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138e45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138f9576138f4848484614572565b613a77565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561399d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139b2576139ad8484846147d2565b613a76565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a545750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a6957613a6484848461499d565b613a75565b613a748484846147d2565b5b5b5b5b80613a8657613a85614c92565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613ce057826003600060088481548110613abf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613ba65750816004600060088481548110613b3e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613bbd57600a5460095494509450505050613d19565b613c466003600060088481548110613bd157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135cb90919063ffffffff16565b9250613cd16004600060088481548110613c5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836135cb90919063ffffffff16565b91508080600101915050613aa0565b50613cf8600954600a5461349d90919063ffffffff16565b821015613d1057600a54600954935093505050613d19565b81819350935050505b9091565b60008083118290613dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d8e578082015181840152602081019050613d73565b50505050905090810190601f168015613dbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613dd557fe5b049050809150509392505050565b600080600080613df285614ca6565b90506000613dff86614cd7565b90506000613e2882613e1a858a6135cb90919063ffffffff16565b6135cb90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613e56858961361590919063ffffffff16565b90506000613e6d868961361590919063ffffffff16565b90506000613e84878961361590919063ffffffff16565b90506000613ead82613e9f85876135cb90919063ffffffff16565b6135cb90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613ee057600080fd5b50604051908082528060200260200182016040528015613f0f5781602001602082028036833780820191505090505b5090503081600081518110613f2057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613fc257600080fd5b505afa158015613fd6573d6000803e3d6000fd5b505050506040513d6020811015613fec57600080fd5b81019080805190602001909291905050508160018151811061400a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061407130601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612df6565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561413557808201518184015260208101905061411a565b505050509050019650505050505050600060405180830381600087803b15801561415e57600080fd5b505af1158015614172573d6000803e3d6000fd5b505050505050565b6141a730601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612df6565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806141f3611f6a565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561427857600080fd5b505af115801561428c573d6000803e3d6000fd5b50505050506040513d60608110156142a357600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f541480156142e357506000601154145b156142ed57614310565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b6000806000806000806143248761356f565b95509550955095509550955061438287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061441786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ac85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144f881614d08565b6145028483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806145848761356f565b9550955095509550955095506145e286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061467783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061470c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475881614d08565b6147628483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147e48761356f565b95509550955095509550955061484286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148d785600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492381614d08565b61492d8483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806149af8761356f565b955095509550955095509550614a0d87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aa286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b3783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bcc85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c1881614d08565b614c228483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b6000614cd06064614cc2600f548561361590919063ffffffff16565b61349d90919063ffffffff16565b9050919050565b6000614d016064614cf36011548561361590919063ffffffff16565b61349d90919063ffffffff16565b9050919050565b6000614d12613472565b90506000614d29828461361590919063ffffffff16565b9050614d7d81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614ea857614e6483600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614ec282600a546135cb90919063ffffffff16565b600a81905550614edd81600b546134e790919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e82816af2b97e92d4134c6000b75d5c64c0484a37175ff911150aa851ff4f4c664736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102345760003560e01c80636bc87c3a1161012e578063a69df4b5116100ab578063d543dbeb1161006f578063d543dbeb14610c63578063dd46706414610c9e578063dd62ed3e14610cd9578063ea2f0b3714610d5e578063f2fde38b14610daf5761023b565b8063a69df4b514610b22578063a9059cbb14610b39578063b6c5232414610baa578063c0d7865514610bd5578063c49b9a8014610c265761023b565b80638da5cb5b116100f25780638da5cb5b146109545780638ee88c531461099557806395d89b41146109d0578063a22d483214610a60578063a457c2d714610ab15761023b565b80636bc87c3a1461081b57806370a0823114610846578063715018a6146108ab5780637d1db4a5146108c257806388f82020146108ed5761023b565b80633685d419116101bc5780634549b039116101805780634549b0391461069a57806349bd5a5e146106f55780634a74bb021461073657806352390c02146107635780635342acb4146107b45761023b565b80633685d4191461052157806339509351146105725780633b124fe7146105e35780633bd5d1731461060e578063437823ec146106495761023b565b80631694505e116102035780631694505e146103a757806318160ddd146103e857806323b872dd146104135780632d838119146104a4578063313ce567146104f35761023b565b8063061c82d01461024057806306fdde031461027b578063095ea7b31461030b57806313114a9d1461037c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610e00565b005b34801561028757600080fd5b50610290610ed2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d05780820151818401526020810190506102b5565b50505050905090810190601f1680156102fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031757600080fd5b506103646004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f74565b60405180821515815260200191505060405180910390f35b34801561038857600080fd5b50610391610f92565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103bc610f9c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f457600080fd5b506103fd610fc2565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b5061048c6004803603606081101561043657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fcc565b60405180821515815260200191505060405180910390f35b3480156104b057600080fd5b506104dd600480360360208110156104c757600080fd5b81019080803590602001909291905050506110a5565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b50610508611129565b604051808260ff16815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611140565b005b34801561057e57600080fd5b506105cb6004803603604081101561059557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ca565b60405180821515815260200191505060405180910390f35b3480156105ef57600080fd5b506105f861157d565b6040518082815260200191505060405180910390f35b34801561061a57600080fd5b506106476004803603602081101561063157600080fd5b8101908080359060200190929190505050611583565b005b34801561065557600080fd5b506106986004803603602081101561066c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611714565b005b3480156106a657600080fd5b506106df600480360360408110156106bd57600080fd5b8101908080359060200190929190803515159060200190929190505050611837565b6040518082815260200191505060405180910390f35b34801561070157600080fd5b5061070a6118ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074257600080fd5b5061074b611914565b60405180821515815260200191505060405180910390f35b34801561076f57600080fd5b506107b26004803603602081101561078657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611927565b005b3480156107c057600080fd5b50610803600480360360208110156107d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c41565b60405180821515815260200191505060405180910390f35b34801561082757600080fd5b50610830611c97565b6040518082815260200191505060405180910390f35b34801561085257600080fd5b506108956004803603602081101561086957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c9d565b6040518082815260200191505060405180910390f35b3480156108b757600080fd5b506108c0611d88565b005b3480156108ce57600080fd5b506108d7611f0e565b6040518082815260200191505060405180910390f35b3480156108f957600080fd5b5061093c6004803603602081101561091057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f14565b60405180821515815260200191505060405180910390f35b34801561096057600080fd5b50610969611f6a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109a157600080fd5b506109ce600480360360208110156109b857600080fd5b8101908080359060200190929190505050611f93565b005b3480156109dc57600080fd5b506109e5612065565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a25578082015181840152602081019050610a0a565b50505050905090810190601f168015610a525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a6c57600080fd5b50610aaf60048036036020811015610a8357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612107565b005b348015610abd57600080fd5b50610b0a60048036036040811015610ad457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612213565b60405180821515815260200191505060405180910390f35b348015610b2e57600080fd5b50610b376122e0565b005b348015610b4557600080fd5b50610b9260048036036040811015610b5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124fd565b60405180821515815260200191505060405180910390f35b348015610bb657600080fd5b50610bbf61251b565b6040518082815260200191505060405180910390f35b348015610be157600080fd5b50610c2460048036036020811015610bf857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612525565b005b348015610c3257600080fd5b50610c6160048036036020811015610c4957600080fd5b81019080803515159060200190929190505050612631565b005b348015610c6f57600080fd5b50610c9c60048036036020811015610c8657600080fd5b810190808035906020019092919050505061274f565b005b348015610caa57600080fd5b50610cd760048036036020811015610cc157600080fd5b8101908080359060200190929190505050612848565b005b348015610ce557600080fd5b50610d4860048036036040811015610cfc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a39565b6040518082815260200191505060405180910390f35b348015610d6a57600080fd5b50610dad60048036036020811015610d8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ac0565b005b348015610dbb57600080fd5b50610dfe60048036036020811015610dd257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612be3565b005b610e08612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6a5780601f10610f3f57610100808354040283529160200191610f6a565b820191906000526020600020905b815481529060010190602001808311610f4d57829003601f168201915b5050505050905090565b6000610f88610f81612dee565b8484612df6565b6001905092915050565b6000600b54905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6000610fd9848484612fed565b61109a84610fe5612dee565b61109585604051806060016040528060288152602001614fc660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104b612dee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b29092919063ffffffff16565b612df6565b600190509392505050565b6000600a54821115611102576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614f0b602a913960400191505060405180910390fd5b600061110c613472565b9050611121818461349d90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b611148612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156114c6578173ffffffffffffffffffffffffffffffffffffffff16600882815481106112fb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114b95760086001600880549050038154811061135757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061138f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061147f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114c6565b80806001019150506112ca565b5050565b60006115736114d7612dee565b8461156e85600560006114e8612dee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b612df6565b6001905092915050565b600f5481565b600061158d612dee565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615060602c913960400191505060405180910390fd5b600061163d8361356f565b5050505050905061169681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116ee81600a546135cb90919063ffffffff16565b600a8190555061170983600b546134e790919063ffffffff16565b600b81905550505050565b61171c612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156118b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816118d15760006118c18461356f565b50505050509050809150506118e8565b60006118dc8461356f565b50505050915050809150505b92915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460159054906101000a900460ff1681565b61192f612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b8357611b3f600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d83565b611d80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a5565b90505b919050565b611d90612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f9b612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120fd5780601f106120d2576101008083540402835291602001916120fd565b820191906000526020600020905b8154815290600101906020018083116120e057829003601f168201915b5050505050905090565b61210f612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006122d6612220612dee565b846122d1856040518060600160405280602581526020016150af602591396005600061224a612dee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b29092919063ffffffff16565b612df6565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061508c6023913960400191505060405180910390fd5b60025442116123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f436f6e7472616374206973206c6f636b6564000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061251161250a612dee565b8484612fed565b6001905092915050565b6000600254905090565b61252d612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612639612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612757612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61283f60646128318360095461361590919063ffffffff16565b61349d90919063ffffffff16565b60158190555050565b612850612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612910576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ac8612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612beb612dee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f356026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061503c6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f5b6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806150176025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ee86023913960400191505060405180910390fd5b60008111613152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fee6029913960400191505060405180910390fd5b61315a611f6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131c85750613198611f6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561322957601554811115613228576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f7d6028913960400191505060405180910390fd5b5b600061323430611c9d565b905060155481106132455760155490505b60006016548210159050808015613267575060148054906101000a900460ff16155b80156132c15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132d95750601460159054906101000a900460ff165b156132ed5760165491506132ec8261369b565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133945750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561339e57600090505b6133aa8686868461377b565b505050505050565b600083831115829061345f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613424578082015181840152602081019050613409565b50505050905090810190601f1680156134515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061347f613a8c565b91509150613496818361349d90919063ffffffff16565b9250505090565b60006134df83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d1d565b905092915050565b600080828401905083811015613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006135868a613de3565b92509250925060008060006135a48d868661359f613472565b613e3d565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061360d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133b2565b905092915050565b6000808314156136285760009050613695565b600082840290508284828161363957fe5b0414613690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614fa56021913960400191505060405180910390fd5b809150505b92915050565b60016014806101000a81548160ff02191690831515021790555060006136cb60028361349d90919063ffffffff16565b905060006136e282846135cb90919063ffffffff16565b905060004790506136f283613ec6565b600061370782476135cb90919063ffffffff16565b9050613713838261417a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b80613789576137886142cf565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561382c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138415761383c848484614312565b613a78565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138e45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138f9576138f4848484614572565b613a77565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561399d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139b2576139ad8484846147d2565b613a76565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a545750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a6957613a6484848461499d565b613a75565b613a748484846147d2565b5b5b5b5b80613a8657613a85614c92565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613ce057826003600060088481548110613abf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613ba65750816004600060088481548110613b3e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613bbd57600a5460095494509450505050613d19565b613c466003600060088481548110613bd157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135cb90919063ffffffff16565b9250613cd16004600060088481548110613c5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836135cb90919063ffffffff16565b91508080600101915050613aa0565b50613cf8600954600a5461349d90919063ffffffff16565b821015613d1057600a54600954935093505050613d19565b81819350935050505b9091565b60008083118290613dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d8e578082015181840152602081019050613d73565b50505050905090810190601f168015613dbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613dd557fe5b049050809150509392505050565b600080600080613df285614ca6565b90506000613dff86614cd7565b90506000613e2882613e1a858a6135cb90919063ffffffff16565b6135cb90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613e56858961361590919063ffffffff16565b90506000613e6d868961361590919063ffffffff16565b90506000613e84878961361590919063ffffffff16565b90506000613ead82613e9f85876135cb90919063ffffffff16565b6135cb90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613ee057600080fd5b50604051908082528060200260200182016040528015613f0f5781602001602082028036833780820191505090505b5090503081600081518110613f2057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613fc257600080fd5b505afa158015613fd6573d6000803e3d6000fd5b505050506040513d6020811015613fec57600080fd5b81019080805190602001909291905050508160018151811061400a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061407130601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612df6565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561413557808201518184015260208101905061411a565b505050509050019650505050505050600060405180830381600087803b15801561415e57600080fd5b505af1158015614172573d6000803e3d6000fd5b505050505050565b6141a730601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612df6565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806141f3611f6a565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561427857600080fd5b505af115801561428c573d6000803e3d6000fd5b50505050506040513d60608110156142a357600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f541480156142e357506000601154145b156142ed57614310565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b6000806000806000806143248761356f565b95509550955095509550955061438287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061441786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ac85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144f881614d08565b6145028483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806145848761356f565b9550955095509550955095506145e286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061467783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061470c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475881614d08565b6147628483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147e48761356f565b95509550955095509550955061484286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148d785600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492381614d08565b61492d8483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806149af8761356f565b955095509550955095509550614a0d87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aa286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cb90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b3783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bcc85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c1881614d08565b614c228483614ead565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b6000614cd06064614cc2600f548561361590919063ffffffff16565b61349d90919063ffffffff16565b9050919050565b6000614d016064614cf36011548561361590919063ffffffff16565b61349d90919063ffffffff16565b9050919050565b6000614d12613472565b90506000614d29828461361590919063ffffffff16565b9050614d7d81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614ea857614e6483600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e790919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614ec282600a546135cb90919063ffffffff16565b600a81905550614edd81600b546134e790919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e82816af2b97e92d4134c6000b75d5c64c0484a37175ff911150aa851ff4f4c664736f6c634300060c0033
Deployed Bytecode Sourcemap
25810:18497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32533:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28238:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29150:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30271:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26777:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28515:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29319:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31195:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28424:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31797:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29640:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26589:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30366:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32288:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30751:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26825:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26894:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31456:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36656:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26676:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28618:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16418:148;;;;;;;;;;;;;:::i;:::-;;26947:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30143:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15775:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32643:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28329:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33248:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29866:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17428:280;;;;;;;;;;;;;:::i;:::-;;28824:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16973:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33125:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32946:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32776:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17138:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28999:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32411:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16721:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32533:98;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32617:6:::1;32607:7;:16;;;;32533:98:::0;:::o;28238:83::-;28275:13;28308:5;28301:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28238:83;:::o;29150:161::-;29225:4;29242:39;29251:12;:10;:12::i;:::-;29265:7;29274:6;29242:8;:39::i;:::-;29299:4;29292:11;;29150:161;;;;:::o;30271:87::-;30313:7;30340:10;;30333:17;;30271:87;:::o;26777:41::-;;;;;;;;;;;;;:::o;28515:95::-;28568:7;28595;;28588:14;;28515:95;:::o;29319:313::-;29417:4;29434:36;29444:6;29452:9;29463:6;29434:9;:36::i;:::-;29481:121;29490:6;29498:12;:10;:12::i;:::-;29512:89;29550:6;29512:89;;;;;;;;;;;;;;;;;:11;:19;29524:6;29512:19;;;;;;;;;;;;;;;:33;29532:12;:10;:12::i;:::-;29512:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29481:8;:121::i;:::-;29620:4;29613:11;;29319:313;;;;;:::o;31195:253::-;31261:7;31300;;31289;:18;;31281:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31365:19;31388:10;:8;:10::i;:::-;31365:33;;31416:24;31428:11;31416:7;:11;;:24;;;;:::i;:::-;31409:31;;;31195:253;;;:::o;28424:83::-;28465:5;28490:9;;;;;;;;;;;28483:16;;28424:83;:::o;31797:479::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31879:11:::1;:20;31891:7;31879:20;;;;;;;;;;;;;;;;;;;;;;;;;31871:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31947:9;31942:327;31966:9;:16;;;;31962:1;:20;31942:327;;;32024:7;32008:23;;:9;32018:1;32008:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;32004:254;;;32067:9;32096:1;32077:9;:16;;;;:20;32067:31;;;;;;;;;;;;;;;;;;;;;;;;;32052:9;32062:1;32052:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32136:1;32117:7;:16;32125:7;32117:16;;;;;;;;;;;;;;;:20;;;;32179:5;32156:11;:20;32168:7;32156:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32203:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32237:5;;32004:254;31984:3;;;;;;;31942:327;;;;31797:479:::0;:::o;29640:218::-;29728:4;29745:83;29754:12;:10;:12::i;:::-;29768:7;29777:50;29816:10;29777:11;:25;29789:12;:10;:12::i;:::-;29777:25;;;;;;;;;;;;;;;:34;29803:7;29777:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29745:8;:83::i;:::-;29846:4;29839:11;;29640:218;;;;:::o;26589:26::-;;;;:::o;30366:377::-;30418:14;30435:12;:10;:12::i;:::-;30418:29;;30467:11;:19;30479:6;30467:19;;;;;;;;;;;;;;;;;;;;;;;;;30466:20;30458:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30547:15;30571:19;30582:7;30571:10;:19::i;:::-;30546:44;;;;;;;30619:28;30639:7;30619;:15;30627:6;30619:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30601:7;:15;30609:6;30601:15;;;;;;;;;;;;;;;:46;;;;30668:20;30680:7;30668;;:11;;:20;;;;:::i;:::-;30658:7;:30;;;;30712:23;30727:7;30712:10;;:14;;:23;;;;:::i;:::-;30699:10;:36;;;;30366:377;;;:::o;32288:111::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32387:4:::1;32357:18;:27;32376:7;32357:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32288:111:::0;:::o;30751:436::-;30841:7;30880;;30869;:18;;30861:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30939:17;30934:246;;30974:15;30998:19;31009:7;30998:10;:19::i;:::-;30973:44;;;;;;;31039:7;31032:14;;;;;30934:246;31081:23;31112:19;31123:7;31112:10;:19::i;:::-;31079:52;;;;;;;31153:15;31146:22;;;30751:436;;;;;:::o;26825:28::-;;;;;;;;;;;;;:::o;26894:40::-;;;;;;;;;;;;;:::o;31456:333::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31539:11:::1;:20;31551:7;31539:20;;;;;;;;;;;;;;;;;;;;;;;;;31538:21;31530:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31624:1;31605:7;:16;31613:7;31605:16;;;;;;;;;;;;;;;;:20;31602:108;;;31661:37;31681:7;:16;31689:7;31681:16;;;;;;;;;;;;;;;;31661:19;:37::i;:::-;31642:7;:16;31650:7;31642:16;;;;;;;;;;;;;;;:56;;;;31602:108;31743:4;31720:11;:20;31732:7;31720:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31758:9;31773:7;31758:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31456:333:::0;:::o;36656:123::-;36720:4;36744:18;:27;36763:7;36744:27;;;;;;;;;;;;;;;;;;;;;;;;;36737:34;;36656:123;;;:::o;26676:32::-;;;;:::o;28618:198::-;28684:7;28708:11;:20;28720:7;28708:20;;;;;;;;;;;;;;;;;;;;;;;;;28704:49;;;28737:7;:16;28745:7;28737:16;;;;;;;;;;;;;;;;28730:23;;;;28704:49;28771:37;28791:7;:16;28799:7;28791:16;;;;;;;;;;;;;;;;28771:19;:37::i;:::-;28764:44;;28618:198;;;;:::o;16418:148::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16525:1:::1;16488:40;;16509:6;::::0;::::1;;;;;;;;16488:40;;;;;;;;;;;;16556:1;16539:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16418:148::o:0;26947:53::-;;;;:::o;30143:120::-;30211:4;30235:11;:20;30247:7;30235:20;;;;;;;;;;;;;;;;;;;;;;;;;30228:27;;30143:120;;;:::o;15775:79::-;15813:7;15840:6;;;;;;;;;;;15833:13;;15775:79;:::o;32643:122::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32745:12:::1;32729:13;:28;;;;32643:122:::0;:::o;28329:87::-;28368:13;28401:7;28394:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28329:87;:::o;33248:94::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33330:4:::1;33314:13;;:20;;;;;;;;;;;;;;;;;;33248:94:::0;:::o;29866:269::-;29959:4;29976:129;29985:12;:10;:12::i;:::-;29999:7;30008:96;30047:15;30008:96;;;;;;;;;;;;;;;;;:11;:25;30020:12;:10;:12::i;:::-;30008:25;;;;;;;;;;;;;;;:34;30034:7;30008:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29976:8;:129::i;:::-;30123:4;30116:11;;29866:269;;;;:::o;17428:280::-;17498:10;17480:28;;:14;;;;;;;;;;;:28;;;17472:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17573:9;;17567:3;:15;17559:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17651:14;;;;;;;;;;;17622:44;;17643:6;;;;;;;;;;17622:44;;;;;;;;;;;;17686:14;;;;;;;;;;;17677:6;;:23;;;;;;;;;;;;;;;;;;17428:280::o;28824:167::-;28902:4;28919:42;28929:12;:10;:12::i;:::-;28943:9;28954:6;28919:9;:42::i;:::-;28979:4;28972:11;;28824:167;;;;:::o;16973:89::-;17018:7;17045:9;;17038:16;;16973:89;:::o;33125:115::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33225:6:::1;33188:15;;:44;;;;;;;;;;;;;;;;;;33125:115:::0;:::o;32946:171::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33047:8:::1;33023:21;;:32;;;;;;;;;;;;;;;;;;33071:38;33100:8;33071:38;;;;;;;;;;;;;;;;;;;;32946:171:::0;:::o;32776:162::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32870:60:::1;32914:5;32870:25;32882:12;32870:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;32855:12;:75;;;;32776:162:::0;:::o;17138:214::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17219:6:::1;::::0;::::1;;;;;;;;17202:14;;:23;;;;;;;;;;;;;;;;;;17253:1;17236:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17284:4;17278:3;:10;17266:9;:22;;;;17341:1;17304:40;;17325:6;::::0;::::1;;;;;;;;17304:40;;;;;;;;;;;;17138:214:::0;:::o;28999:143::-;29080:7;29107:11;:18;29119:5;29107:18;;;;;;;;;;;;;;;:27;29126:7;29107:27;;;;;;;;;;;;;;;;29100:34;;28999:143;;;;:::o;32411:110::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32508:5:::1;32478:18;:27;32497:7;32478:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32411:110:::0;:::o;16721:244::-;15997:12;:10;:12::i;:::-;15987:22;;:6;;;;;;;;;;:22;;;15979:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16830:1:::1;16810:22;;:8;:22;;;;16802:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16920:8;16891:38;;16912:6;::::0;::::1;;;;;;;;16891:38;;;;;;;;;;;;16949:8;16940:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16721:244:::0;:::o;8183:106::-;8236:15;8271:10;8264:17;;8183:106;:::o;36787:337::-;36897:1;36880:19;;:5;:19;;;;36872:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36978:1;36959:21;;:7;:21;;;;36951:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37062:6;37032:11;:18;37044:5;37032:18;;;;;;;;;;;;;;;:27;37051:7;37032:27;;;;;;;;;;;;;;;:36;;;;37100:7;37084:32;;37093:5;37084:32;;;37109:6;37084:32;;;;;;;;;;;;;;;;;;36787:337;;;:::o;37132:1813::-;37270:1;37254:18;;:4;:18;;;;37246:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37347:1;37333:16;;:2;:16;;;;37325:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37417:1;37408:6;:10;37400:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37486:7;:5;:7::i;:::-;37478:15;;:4;:15;;;;:32;;;;;37503:7;:5;:7::i;:::-;37497:13;;:2;:13;;;;37478:32;37475:125;;;37543:12;;37533:6;:22;;37525:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37475:125;37895:28;37926:24;37944:4;37926:9;:24::i;:::-;37895:55;;37998:12;;37974:20;:36;37971:112;;38059:12;;38036:35;;37971:112;38103:24;38154:29;;38130:20;:53;;38103:80;;38212:19;:53;;;;;38249:16;;;;;;;;;;38248:17;38212:53;:91;;;;;38290:13;;;;;;;;;;;38282:21;;:4;:21;;;;38212:91;:129;;;;;38320:21;;;;;;;;;;;38212:129;38194:318;;;38391:29;;38368:52;;38464:36;38479:20;38464:14;:36::i;:::-;38194:318;38593:12;38608:4;38593:19;;38720:18;:24;38739:4;38720:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;38748:18;:22;38767:2;38748:22;;;;;;;;;;;;;;;;;;;;;;;;;38720:50;38717:96;;;38796:5;38786:15;;38717:96;38899:38;38914:4;38919:2;38922:6;38929:7;38899:14;:38::i;:::-;37132:1813;;;;;;:::o;4593:192::-;4679:7;4712:1;4707;:6;;4715:12;4699:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:9;4755:1;4751;:5;4739:17;;4776:1;4769:8;;;4593:192;;;;;:::o;34810:163::-;34851:7;34872:15;34889;34908:19;:17;:19::i;:::-;34871:56;;;;34945:20;34957:7;34945;:11;;:20;;;;:::i;:::-;34938:27;;;;34810:163;:::o;5991:132::-;6049:7;6076:39;6080:1;6083;6076:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6069:46;;5991:132;;;;:::o;3690:181::-;3748:7;3768:9;3784:1;3780;:5;3768:17;;3809:1;3804;:6;;3796:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3862:1;3855:8;;;3690:181;;;;:::o;33608:419::-;33667:7;33676;33685;33694;33703;33712;33733:23;33758:12;33772:18;33794:20;33806:7;33794:11;:20::i;:::-;33732:82;;;;;;33826:15;33843:23;33868:12;33884:50;33896:7;33905:4;33911:10;33923;:8;:10::i;:::-;33884:11;:50::i;:::-;33825:109;;;;;;33953:7;33962:15;33979:4;33985:15;34002:4;34008:10;33945:74;;;;;;;;;;;;;;;;;;33608:419;;;;;;;:::o;4154:136::-;4212:7;4239:43;4243:1;4246;4239:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4232:50;;4154:136;;;;:::o;5044:471::-;5102:7;5352:1;5347;:6;5343:47;;;5377:1;5370:8;;;;5343:47;5402:9;5418:1;5414;:5;5402:17;;5447:1;5442;5438;:5;;;;;;:10;5430:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5506:1;5499:8;;;5044:471;;;;;:::o;38953:985::-;27403:4;27384:16;;:23;;;;;;;;;;;;;;;;;;39089:12:::1;39104:27;39129:1;39104:20;:24;;:27;;;;:::i;:::-;39089:42;;39142:17;39162:30;39187:4;39162:20;:24;;:30;;;;:::i;:::-;39142:50;;39470:22;39495:21;39470:46;;39561:22;39578:4;39561:16;:22::i;:::-;39714:18;39735:41;39761:14;39735:21;:25;;:41;;;;:::i;:::-;39714:62;;39826:35;39839:9;39850:10;39826:12;:35::i;:::-;39887:43;39902:4;39908:10;39920:9;39887:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27418:1;;;;27449:5:::0;27430:16;;:24;;;;;;;;;;;;;;;;;;38953:985;:::o;41137:834::-;41248:7;41244:40;;41270:14;:12;:14::i;:::-;41244:40;41309:11;:19;41321:6;41309:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41333:11;:22;41345:9;41333:22;;;;;;;;;;;;;;;;;;;;;;;;;41332:23;41309:46;41305:597;;;41372:48;41394:6;41402:9;41413:6;41372:21;:48::i;:::-;41305:597;;;41443:11;:19;41455:6;41443:19;;;;;;;;;;;;;;;;;;;;;;;;;41442:20;:46;;;;;41466:11;:22;41478:9;41466:22;;;;;;;;;;;;;;;;;;;;;;;;;41442:46;41438:464;;;41505:46;41525:6;41533:9;41544:6;41505:19;:46::i;:::-;41438:464;;;41574:11;:19;41586:6;41574:19;;;;;;;;;;;;;;;;;;;;;;;;;41573:20;:47;;;;;41598:11;:22;41610:9;41598:22;;;;;;;;;;;;;;;;;;;;;;;;;41597:23;41573:47;41569:333;;;41637:44;41655:6;41663:9;41674:6;41637:17;:44::i;:::-;41569:333;;;41703:11;:19;41715:6;41703:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41726:11;:22;41738:9;41726:22;;;;;;;;;;;;;;;;;;;;;;;;;41703:45;41699:203;;;41765:48;41787:6;41795:9;41806:6;41765:21;:48::i;:::-;41699:203;;;41846:44;41864:6;41872:9;41883:6;41846:17;:44::i;:::-;41699:203;41569:333;41438:464;41305:597;41926:7;41922:41;;41948:15;:13;:15::i;:::-;41922:41;41137:834;;;;:::o;34981:561::-;35031:7;35040;35060:15;35078:7;;35060:25;;35096:15;35114:7;;35096:25;;35143:9;35138:289;35162:9;:16;;;;35158:1;:20;35138:289;;;35228:7;35204;:21;35212:9;35222:1;35212:12;;;;;;;;;;;;;;;;;;;;;;;;;35204:21;;;;;;;;;;;;;;;;:31;:66;;;;35263:7;35239;:21;35247:9;35257:1;35247:12;;;;;;;;;;;;;;;;;;;;;;;;;35239:21;;;;;;;;;;;;;;;;:31;35204:66;35200:97;;;35280:7;;35289;;35272:25;;;;;;;;;35200:97;35322:34;35334:7;:21;35342:9;35352:1;35342:12;;;;;;;;;;;;;;;;;;;;;;;;;35334:21;;;;;;;;;;;;;;;;35322:7;:11;;:34;;;;:::i;:::-;35312:44;;35381:34;35393:7;:21;35401:9;35411:1;35401:12;;;;;;;;;;;;;;;;;;;;;;;;;35393:21;;;;;;;;;;;;;;;;35381:7;:11;;:34;;;;:::i;:::-;35371:44;;35180:3;;;;;;;35138:289;;;;35451:20;35463:7;;35451;;:11;;:20;;;;:::i;:::-;35441:7;:30;35437:61;;;35481:7;;35490;;35473:25;;;;;;;;35437:61;35517:7;35526;35509:25;;;;;;34981:561;;;:::o;6619:278::-;6705:7;6737:1;6733;:5;6740:12;6725:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6764:9;6780:1;6776;:5;;;;;;6764:17;;6888:1;6881:8;;;6619:278;;;;;:::o;34035:330::-;34095:7;34104;34113;34133:12;34148:24;34164:7;34148:15;:24::i;:::-;34133:39;;34183:18;34204:30;34226:7;34204:21;:30::i;:::-;34183:51;;34245:23;34271:33;34293:10;34271:17;34283:4;34271:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34245:59;;34323:15;34340:4;34346:10;34315:42;;;;;;;;;34035:330;;;;;:::o;34373:429::-;34488:7;34497;34506;34526:15;34544:24;34556:11;34544:7;:11;;:24;;;;:::i;:::-;34526:42;;34579:12;34594:21;34603:11;34594:4;:8;;:21;;;;:::i;:::-;34579:36;;34626:18;34647:27;34662:11;34647:10;:14;;:27;;;;:::i;:::-;34626:48;;34685:23;34711:33;34733:10;34711:17;34723:4;34711:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34685:59;;34763:7;34772:15;34789:4;34755:39;;;;;;;;;;34373:429;;;;;;;;:::o;39946:589::-;40072:21;40110:1;40096:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40072:40;;40141:4;40123;40128:1;40123:7;;;;;;;;;;;;;:23;;;;;;;;;;;40167:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40157:4;40162:1;40157:7;;;;;;;;;;;;;:32;;;;;;;;;;;40202:62;40219:4;40234:15;;;;;;;;;;;40252:11;40202:8;:62::i;:::-;40303:15;;;;;;;;;;;:66;;;40384:11;40410:1;40454:4;40481;40501:15;40303:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39946:589;;:::o;40543:513::-;40691:62;40708:4;40723:15;;;;;;;;;;;40741:11;40691:8;:62::i;:::-;40796:15;;;;;;;;;;;:31;;;40835:9;40868:4;40888:11;40914:1;40957;41000:7;:5;:7::i;:::-;41022:15;40796:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40543:513;;:::o;36257:250::-;36314:1;36303:7;;:12;:34;;;;;36336:1;36319:13;;:18;36303:34;36300:46;;;36339:7;;36300:46;36384:7;;36366:15;:25;;;;36426:13;;36402:21;:37;;;;36470:1;36460:7;:11;;;;36498:1;36482:13;:17;;;;36257:250;:::o;43083:566::-;43186:15;43203:23;43228:12;43242:23;43267:12;43281:18;43303:19;43314:7;43303:10;:19::i;:::-;43185:137;;;;;;;;;;;;43351:28;43371:7;43351;:15;43359:6;43351:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43333:7;:15;43341:6;43333:15;;;;;;;;;;;;;;;:46;;;;43408:28;43428:7;43408;:15;43416:6;43408:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43390:7;:15;43398:6;43390:15;;;;;;;;;;;;;;;:46;;;;43468:39;43491:15;43468:7;:18;43476:9;43468:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43447:7;:18;43455:9;43447:18;;;;;;;;;;;;;;;:60;;;;43521:26;43536:10;43521:14;:26::i;:::-;43558:23;43570:4;43576;43558:11;:23::i;:::-;43614:9;43597:44;;43606:6;43597:44;;;43625:15;43597:44;;;;;;;;;;;;;;;;;;43083:566;;;;;;;;;:::o;42489:586::-;42590:15;42607:23;42632:12;42646:23;42671:12;42685:18;42707:19;42718:7;42707:10;:19::i;:::-;42589:137;;;;;;;;;;;;42755:28;42775:7;42755;:15;42763:6;42755:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42737:7;:15;42745:6;42737:15;;;;;;;;;;;;;;;:46;;;;42815:39;42838:15;42815:7;:18;42823:9;42815:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42794:7;:18;42802:9;42794:18;;;;;;;;;;;;;;;:60;;;;42886:39;42909:15;42886:7;:18;42894:9;42886:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42865:7;:18;42873:9;42865:18;;;;;;;;;;;;;;;:60;;;;42947:26;42962:10;42947:14;:26::i;:::-;42984:23;42996:4;43002;42984:11;:23::i;:::-;43040:9;43023:44;;43032:6;43023:44;;;43051:15;43023:44;;;;;;;;;;;;;;;;;;42489:586;;;;;;;;;:::o;41979:502::-;42078:15;42095:23;42120:12;42134:23;42159:12;42173:18;42195:19;42206:7;42195:10;:19::i;:::-;42077:137;;;;;;;;;;;;42243:28;42263:7;42243;:15;42251:6;42243:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42225:7;:15;42233:6;42225:15;;;;;;;;;;;;;;;:46;;;;42303:39;42326:15;42303:7;:18;42311:9;42303:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42282:7;:18;42290:9;42282:18;;;;;;;;;;;;;;;:60;;;;42353:26;42368:10;42353:14;:26::i;:::-;42390:23;42402:4;42408;42390:11;:23::i;:::-;42446:9;42429:44;;42438:6;42429:44;;;42457:15;42429:44;;;;;;;;;;;;;;;;;;41979:502;;;;;;;;;:::o;43660:642::-;43763:15;43780:23;43805:12;43819:23;43844:12;43858:18;43880:19;43891:7;43880:10;:19::i;:::-;43762:137;;;;;;;;;;;;43928:28;43948:7;43928;:15;43936:6;43928:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43910:7;:15;43918:6;43910:15;;;;;;;;;;;;;;;:46;;;;43985:28;44005:7;43985;:15;43993:6;43985:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43967:7;:15;43975:6;43967:15;;;;;;;;;;;;;;;:46;;;;44045:39;44068:15;44045:7;:18;44053:9;44045:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44024:7;:18;44032:9;44024:18;;;;;;;;;;;;;;;:60;;;;44116:39;44139:15;44116:7;:18;44124:9;44116:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44095:7;:18;44103:9;44095:18;;;;;;;;;;;;;;;:60;;;;44174:26;44189:10;44174:14;:26::i;:::-;44211:23;44223:4;44229;44211:11;:23::i;:::-;44267:9;44250:44;;44259:6;44250:44;;;44278:15;44250:44;;;;;;;;;;;;;;;;;;43660:642;;;;;;;;;:::o;36519:125::-;36573:15;;36563:7;:25;;;;36615:21;;36599:13;:37;;;;36519:125::o;35921:154::-;35985:7;36012:55;36051:5;36012:20;36024:7;;36012;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36005:62;;35921:154;;;:::o;36083:166::-;36153:7;36180:61;36225:5;36180:26;36192:13;;36180:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;36173:68;;36083:166;;;:::o;35554:355::-;35617:19;35640:10;:8;:10::i;:::-;35617:33;;35661:18;35682:27;35697:11;35682:10;:14;;:27;;;;:::i;:::-;35661:48;;35745:38;35772:10;35745:7;:22;35761:4;35745:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35720:7;:22;35736:4;35720:22;;;;;;;;;;;;;;;:63;;;;35797:11;:26;35817:4;35797:26;;;;;;;;;;;;;;;;;;;;;;;;;35794:107;;;35863:38;35890:10;35863:7;:22;35879:4;35863:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35838:7;:22;35854:4;35838:22;;;;;;;;;;;;;;;:63;;;;35794:107;35554:355;;;:::o;33451:147::-;33529:17;33541:4;33529:7;;:11;;:17;;;;:::i;:::-;33519:7;:27;;;;33570:20;33585:4;33570:10;;:14;;:20;;;;:::i;:::-;33557:10;:33;;;;33451:147;;:::o
Swarm Source
ipfs://e82816af2b97e92d4134c6000b75d5c64c0484a37175ff911150aa851ff4f4c6
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.