ETH Price: $3,358.30 (+0.31%)

Token

Mullet Money Mission (MULLET)
 

Overview

Max Total Supply

1,000,000,000 MULLET

Holders

649

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
whatsupduck.eth
Balance
980,529.278927725049381005 MULLET

Value
$0.00
0x4C9B1E04031d03F48132F27B1FA0a06Aed94b8c5
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MULLET

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-28
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

// $MULLET
// - 1 billion supply
// - no contract owner
// - 100% of tokens in initial LP
// - LP locked in contract permanently
// - V3 LP with a 5 ETH initial market cap
// - 1,000,000 token max transfer for 5 minutes
// https://mullet.capital

// $HAIR
// - fully liquid without the need for a DEX
// - 10% buy/sell tax
// - tax distributed to token holders in the form of ETH
// - referral link, own 100 $HAIR or more to get 3% of referred buys/reinvests
// https://hedge.mullet.capital


interface Callable {
	function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

interface Router {
	struct ExactInputSingleParams {
		address tokenIn;
		address tokenOut;
		uint24 fee;
		address recipient;
		uint256 amountIn;
		uint256 amountOutMinimum;
		uint160 sqrtPriceLimitX96;
	}
	function factory() external view returns (address);
	function positionManager() external view returns (address);
	function WETH9() external view returns (address);
	function exactInputSingle(ExactInputSingleParams calldata) external payable returns (uint256);
}

interface Factory {
	function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
}

interface Pool {
	function initialize(uint160 _sqrtPriceX96) external;
}

interface PositionManager {
	struct MintParams {
		address token0;
		address token1;
		uint24 fee;
		int24 tickLower;
		int24 tickUpper;
		uint256 amount0Desired;
		uint256 amount1Desired;
		uint256 amount0Min;
		uint256 amount1Min;
		address recipient;
		uint256 deadline;
	}
	struct CollectParams {
		uint256 tokenId;
		address recipient;
		uint128 amount0Max;
		uint128 amount1Max;
	}
	function mint(MintParams calldata) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
	function collect(CollectParams calldata) external payable returns (uint256 amount0, uint256 amount1);
}

interface ERC20 {
	function balanceOf(address) external view returns (uint256);
	function transfer(address, uint256) external returns (bool);
}

interface WETH is ERC20 {
	function withdraw(uint256) external;
}


contract HEDGE {

	uint256 constant private FLOAT_SCALAR = 2**64;
	uint256 constant private BUY_TAX = 10;
	uint256 constant private SELL_TAX = 10;
	uint256 constant private TEAM_TAX = 1;
	uint256 constant private REF_TAX = 3;
	uint256 constant private REF_REQUIREMENT = 1e20; // 100 HAIR
	uint256 constant private STARTING_PRICE = 0.001 ether;
	uint256 constant private INCREMENT = 1e10; // 10 Gwei
	address constant private BUYBACK_ADDRESS = 0xA093Ea0904250084411F98d9195567e8b4406696;

	string constant public name = "HEDGE";
	string constant public symbol = "HAIR";
	uint8 constant public decimals = 18;

	struct User {
		uint256 balance;
		mapping(address => uint256) allowance;
		int256 scaledPayout;
		address ref;
	}

	struct Info {
		uint256 totalSupply;
		mapping(address => User) users;
		uint256 scaledEthPerToken;
		address team;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);
	event Buy(address indexed buyer, uint256 amountSpent, uint256 tokensReceived);
	event Sell(address indexed seller, uint256 tokensSpent, uint256 amountReceived);
	event Withdraw(address indexed user, uint256 amount);
	event Reinvest(address indexed user, uint256 amount);


	constructor() {
		info.team = msg.sender;
	}
	
	receive() external payable {
		buy();
	}
	
	function buy() public payable returns (uint256) {
		return buy(address(0x0));
	}
	
	function buy(address _ref) public payable returns (uint256) {
		require(msg.value > 0);
		if (_ref != address(0x0) && _ref != msg.sender && _ref != refOf(msg.sender)) {
			info.users[msg.sender].ref = _ref;
		}
		return _buy(msg.value);
	}

	function sell(uint256 _tokens) external returns (uint256) {
		return _sell(_tokens);
	}

	function withdraw() external returns (uint256) {
		uint256 _rewards = rewardsOf(msg.sender);
		require(_rewards >= 0);
		info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR);
		payable(msg.sender).transfer(_rewards);
		emit Withdraw(msg.sender, _rewards);
		return _rewards;
	}

	function reinvest() external returns (uint256) {
		uint256 _rewards = rewardsOf(msg.sender);
		require(_rewards >= 0);
		info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR);
		emit Reinvest(msg.sender, _rewards);
		return _buy(_rewards);
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		return _transfer(msg.sender, _to, _tokens);
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		info.users[msg.sender].allowance[_spender] = _tokens;
		emit Approval(msg.sender, _spender, _tokens);
		return true;
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		require(allowance(_from, msg.sender) >= _tokens);
		info.users[_from].allowance[msg.sender] -= _tokens;
		return _transfer(_from, _to, _tokens);
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokens, _data));
		}
		return true;
	}


	function team() public view returns (address) {
		return info.team;
	}

	function buybackAddress() public pure returns (address) {
		return BUYBACK_ADDRESS;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function currentPrices() public view returns (uint256 truePrice, uint256 buyPrice, uint256 sellPrice) {
		truePrice = STARTING_PRICE + INCREMENT * totalSupply() / 1e18;
		buyPrice = truePrice * 100 / (100 - BUY_TAX);
		sellPrice = truePrice * (100 - SELL_TAX) / 100;
	}

	function refOf(address _user) public view returns (address) {
		return info.users[_user].ref;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance;
	}

	function rewardsOf(address _user) public view returns (uint256) {
		return uint256(int256(info.scaledEthPerToken * balanceOf(_user)) - info.users[_user].scaledPayout) / FLOAT_SCALAR;
	}

	function allInfoFor(address _user) public view returns (uint256 contractBalance, uint256 totalTokenSupply, uint256 truePrice, uint256 buyPrice, uint256 sellPrice, uint256 userETH, uint256 userBalance, uint256 userRewards, uint256 userLiquidValue, address userRef) {
		contractBalance = address(this).balance;
		totalTokenSupply = totalSupply();
		(truePrice, buyPrice, sellPrice) = currentPrices();
		userETH = _user.balance;
		userBalance = balanceOf(_user);
		userRewards = rewardsOf(_user);
		userLiquidValue = calculateResult(userBalance, false, false) + userRewards;
		userRef = refOf(_user);
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function calculateResult(uint256 _amount, bool _isBuy, bool _inverse) public view returns (uint256) {
		unchecked {
			uint256 _buyPrice;
			uint256 _sellPrice;
			( , _buyPrice, _sellPrice) = currentPrices();
			uint256 _rate = (_isBuy ? _buyPrice : _sellPrice);
			uint256 _increment = INCREMENT * (_isBuy ? 100 : (100 - SELL_TAX)) / (_isBuy ? (100 - BUY_TAX) : 100);
			if ((_isBuy && !_inverse) || (!_isBuy && _inverse)) {
				if (_inverse) {
					return (2 * _rate - _sqrt(4 * _rate * _rate + _increment * _increment - 4 * _rate * _increment - 8 * _amount * _increment) - _increment) * 1e18 / (2 * _increment);
				} else {
					return (_sqrt((_increment + 2 * _rate) * (_increment + 2 * _rate) + 8 * _amount * _increment) - _increment - 2 * _rate) * 1e18 / (2 * _increment);
				}
			} else {
				if (_inverse) {
					return (_rate * _amount + (_increment * (_amount + 1e18) / 2e18) * _amount) / 1e18;
				} else {
					return (_rate * _amount - (_increment * (_amount + 1e18) / 2e18) * _amount) / 1e18;
				}
			}
		}
	}


	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		require(balanceOf(_from) >= _tokens);
		info.users[_from].balance -= _tokens;
		info.users[_from].scaledPayout -= int256(_tokens * info.scaledEthPerToken);
		info.users[_to].balance += _tokens;
		info.users[_to].scaledPayout += int256(_tokens * info.scaledEthPerToken);
		emit Transfer(_from, _to, _tokens);
		return true;
	}

	function _buy(uint256 _amount) internal returns (uint256 tokens) {
		uint256 _tax = _amount * BUY_TAX / 100;
		tokens = calculateResult(_amount, true, false);
		info.totalSupply += tokens;
		info.users[msg.sender].balance += tokens;
		info.users[msg.sender].scaledPayout += int256(tokens * info.scaledEthPerToken);
		uint256 _teamTax = _amount * TEAM_TAX / 100;
		info.users[team()].scaledPayout -= int256(_teamTax * FLOAT_SCALAR);
		uint256 _refTax = _amount * REF_TAX / 100;
		address _ref = refOf(msg.sender);
		if (_ref != address(0x0) && balanceOf(_ref) >= REF_REQUIREMENT) {
			info.users[_ref].scaledPayout -= int256(_refTax * FLOAT_SCALAR);
		} else {
			info.users[buybackAddress()].scaledPayout -= int256(_refTax * FLOAT_SCALAR);
		}
		info.scaledEthPerToken += (_tax - _teamTax - _refTax) * FLOAT_SCALAR / info.totalSupply;
		emit Transfer(address(0x0), msg.sender, tokens);
		emit Buy(msg.sender, _amount, tokens);
	}

	function _sell(uint256 _tokens) internal returns (uint256 amount) {
		require(balanceOf(msg.sender) >= _tokens);
		amount = calculateResult(_tokens, false, false);
		uint256 _tax = amount * SELL_TAX / (100 - SELL_TAX);
		info.totalSupply -= _tokens;
		info.users[msg.sender].balance -= _tokens;
		info.users[msg.sender].scaledPayout -= int256(_tokens * info.scaledEthPerToken);
		uint256 _teamTax = amount * TEAM_TAX / (100 - SELL_TAX);
		info.users[team()].scaledPayout -= int256(_teamTax * FLOAT_SCALAR);
		info.scaledEthPerToken += (_tax - _teamTax) * FLOAT_SCALAR / info.totalSupply;
		payable(msg.sender).transfer(amount);
		emit Transfer(msg.sender, address(0x0), _tokens);
		emit Sell(msg.sender, _tokens, amount);
	}


	function _sqrt(uint256 _n) internal pure returns (uint256 result) {
		unchecked {
			uint256 _tmp = (_n + 1) / 2;
			result = _n;
			while (_tmp < result) {
				result = _tmp;
				_tmp = (_n / _tmp + _tmp) / 2;
			}
		}
	}
}


contract Team {

	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 immutable public token;
	HEDGE immutable public hedge;


	constructor() {
		token = ERC20(msg.sender);
		hedge = new HEDGE();
		_addShare(0x7178523CD70c5E96C079701fE46Cda3E1799b4Ce, 9);
		_addShare(0xc61D594dff6D253142C7Fa83F41D318F157B018a, 9);
		_addShare(0x2000Af01b455C4cd3E65AED180eC3EE52BD6C264, 2);
	}

	receive() external payable {}

	function withdrawETH() public {
		uint256 _balance = address(this).balance;
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				!_share.user.send(_balance * _share.shares / totalShares);
			}
		}
	}

	function withdrawHAIR() external {
		hedge.withdraw();
		withdrawETH();
	}

	function withdrawToken(ERC20 _token) public {
		WETH _weth = WETH(ROUTER.WETH9());
		if (address(_token) == address(_weth)) {
			_weth.withdraw(_weth.balanceOf(address(this)));
			withdrawETH();
		} else {
			uint256 _balance = _token.balanceOf(address(this));
			if (_balance > 0) {
				for (uint256 i = 0; i < shares.length; i++) {
					Share memory _share = shares[i];
					_token.transfer(_share.user, _balance * _share.shares / totalShares);
				}
			}
		}
	}

	function withdrawWETH() public {
		withdrawToken(ERC20(ROUTER.WETH9()));
	}

	function withdrawFees() external {
		withdrawWETH();
		withdrawToken(token);
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract Ambassadors {

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 immutable public token;


	constructor() {
		token = ERC20(msg.sender);
		_addShare(0x1427798f129b92F19927931a964D17bd6C2F5253, 10);
		_addShare(0x9D756A1848Ee62db36C17f000699f65BfEF9bf11, 7);
		_addShare(0x1248E5Ce0dB0F869A9A934b1677bd5A17e5B8DFe, 7);
		_addShare(0x6A5da854d5a3A0Fc4A760Bc6A9062D2A8e36431a, 7);
		_addShare(0x5a02FbCE3B19E9508F5Cc7F351f671795c1a81a4, 7);
		_addShare(0x1B1B694c797904D9B84ed636661C32C4DcaA17d9, 7);
		_addShare(0x492bb59126d7F06C2c5B13cD50caD209a43eA326, 7);
		_addShare(0x60d5567d7f8d05C899C89e63E00E4f6ca396ec13, 7);
		_addShare(0xBaE44b530f65Aa9A97bb0d17b4eafb07Ac67259C, 7);
		_addShare(0xe6eD771d0deC3a1F5B1A9bBc90fF9353E7Ec9c56, 7);
		_addShare(0xc44241b85051E5837B522289B2559d70496B16dC, 7);
		_addShare(0x0539480eE00A547974e7E38c1A9c8b046d767F22, 7);
		_addShare(0x7a3DD779b524C80e464B23AfCA6906539Df958D0, 7);
		_addShare(0xDfCE959d59F3E34c4f018cd91E4A5B9453Ff2D7d, 7);
		_addShare(0xAc537fcf993fAbCA3e795658B5b1a06c5DEC1e85, 7);
		_addShare(0x0d9997acB3f204fe3A09aCB1Fd594F906bCc88BB, 7);
		_addShare(0x6a49351D350245cFA979c1EBce7D18ADa46406d5, 7);
		_addShare(0x8E44aF6308e52b94157Ec9A898eC9f31cc1B0E16, 7);
		_addShare(0xf939FDa6330984F3E84EB32701bd404dACc27D50, 7);
		_addShare(0x29f3536D4E2a790f11d5827490390Dd1dca3e9b1, 7);
		_addShare(0xA4C501D7Cd0914fCfDb9E2bf367cC224a4531fAc, 7);
		_addShare(0x5dBFEAcf8f26e83314790f3Ee91eEAB97617F734, 7);
		_addShare(0xEBf184353dD81C21AAaB257143346584d75d1537, 7);
		_addShare(0xdAf028effC6e75307c54899a433b40514fEBB936, 7);
		_addShare(0xC4be049c2835D5F42c3B11a44c775F8A4909bd5F, 7);
		_addShare(0xD89eF44a1fBeA729912Fc40CAcF7d0CAe2A49841, 7);
		_addShare(0x5E056D473F95eA7Ef9660a46310297b2D457cAaD, 7);
		_addShare(0xb592016Dc145aFBA2aeE5B35e2Dfe0629BF83A36, 4);
		_addShare(0x95f572bD843b74C0d582b1BE5AF2583293ad2255, 2);
	}

	function distribute() external {
		uint256 _balance = token.balanceOf(address(this));
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				token.transfer(_share.user, _balance * _share.shares / totalShares);
			}
		}
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract MULLET {

	uint256 constant private UINT_MAX = type(uint256).max;
	uint128 constant private UINT128_MAX = type(uint128).max;
	uint256 constant private INITIAL_SUPPLY = 1e27; // 1 billion
	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);
	uint256 constant private INITIAL_ETH_MC = 5 ether; // 5 ETH initial market cap price
	uint256 constant private UPPER_ETH_MC = 1e6 ether; // 1,000,000 ETH max market cap price
	uint256 constant private LIMIT_TIME = 5 minutes;
	uint256 constant private TOKEN_LIMIT = (INITIAL_SUPPLY / 1000); // max buy of 1m tokens, approx. 0.005 ETH, for 5 minutes

	int24 constant private MIN_TICK = -887272;
	int24 constant private MAX_TICK = -MIN_TICK;
	uint160 constant private MIN_SQRT_RATIO = 4295128739;
	uint160 constant private MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;

	string constant public name = "Mullet Money Mission";
	string constant public symbol = "MULLET";
	uint8 constant public decimals = 18;

	struct User {
		uint256 balance;
		mapping(address => uint256) allowance;
	}

	struct Info {
		Team team;
		address pool;
		uint256 totalSupply;
		mapping(address => User) users;
		uint128 positionId;
		uint128 startTime;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);


	constructor() payable {
		require(msg.value > 0);
		info.team = new Team();
		address _this = address(this);
		address _weth = ROUTER.WETH9();
		(uint160 _initialSqrtPrice, ) = _getPriceAndTickFromValues(_weth < _this, INITIAL_SUPPLY, INITIAL_ETH_MC);
		info.pool = Factory(ROUTER.factory()).createPool(_this, _weth, 10000);
		Pool(pool()).initialize(_initialSqrtPrice);
	}
	
	function initialize() external {
		require(totalSupply() == 0);
		address _this = address(this);
		address _weth = ROUTER.WETH9();
		bool _weth0 = _weth < _this;
		PositionManager _pm = PositionManager(ROUTER.positionManager());
		info.totalSupply = INITIAL_SUPPLY;
		info.users[_this].balance = INITIAL_SUPPLY;
		emit Transfer(address(0x0), _this, INITIAL_SUPPLY);
		_approve(_this, address(_pm), INITIAL_SUPPLY);
		( , int24 _minTick) = _getPriceAndTickFromValues(_weth0, INITIAL_SUPPLY, INITIAL_ETH_MC);
		( , int24 _maxTick) = _getPriceAndTickFromValues(_weth0, INITIAL_SUPPLY, UPPER_ETH_MC);
		(uint256 _positionId, , , ) = _pm.mint(PositionManager.MintParams({
			token0: _weth0 ? _weth : _this,
			token1: !_weth0 ? _weth : _this,
			fee: 10000,
			tickLower: _weth0 ? _maxTick : _minTick,
			tickUpper: !_weth0 ? _maxTick : _minTick,
			amount0Desired: _weth0 ? 0 : INITIAL_SUPPLY,
			amount1Desired: !_weth0 ? 0 : INITIAL_SUPPLY,
			amount0Min: 0,
			amount1Min: 0,
			recipient: _this,
			deadline: block.timestamp
		}));
		info.positionId = uint128(_positionId);
		Ambassadors _ambassadors = new Ambassadors();
		ROUTER.exactInputSingle{value:_this.balance}(Router.ExactInputSingleParams({
			tokenIn: _weth,
			tokenOut: _this,
			fee: 10000,
			recipient: address(_ambassadors),
			amountIn: _this.balance,
			amountOutMinimum: 0,
			sqrtPriceLimitX96: 0
		}));
		_ambassadors.distribute();
		info.startTime = uint128(block.timestamp);
	}

	function collectTradingFees() external {
		PositionManager(ROUTER.positionManager()).collect(PositionManager.CollectParams({
			tokenId: position(),
			recipient: team(),
			amount0Max: UINT128_MAX,
			amount1Max: UINT128_MAX
		}));
		info.team.withdrawFees();
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		return _transfer(msg.sender, _to, _tokens);
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		return _approve(msg.sender, _spender, _tokens);
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		uint256 _allowance = allowance(_from, msg.sender);
		require(_allowance >= _tokens);
		if (_allowance != UINT_MAX) {
			info.users[_from].allowance[msg.sender] -= _tokens;
		}
		return _transfer(_from, _to, _tokens);
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokens, _data));
		}
		return true;
	}
	

	function team() public view returns (address) {
		return address(info.team);
	}

	function pool() public view returns (address) {
		return info.pool;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance;
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function position() public view returns (uint256) {
		return info.positionId;
	}


	function _approve(address _owner, address _spender, uint256 _tokens) internal returns (bool) {
		info.users[_owner].allowance[_spender] = _tokens;
		emit Approval(_owner, _spender, _tokens);
		return true;
	}
	
	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		unchecked {
			if (block.timestamp < info.startTime + LIMIT_TIME) {
				require(_tokens <= TOKEN_LIMIT);
			}
			require(balanceOf(_from) >= _tokens);
			info.users[_from].balance -= _tokens;
			info.users[_to].balance += _tokens;
			emit Transfer(_from, _to, _tokens);
			return true;
		}
	}


	function _getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
		unchecked {
			uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));
			require(absTick <= uint256(int256(MAX_TICK)), 'T');

			uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
			if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
			if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;
			if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;
			if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;
			if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;
			if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;
			if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;
			if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;
			if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;
			if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;
			if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;
			if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;
			if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;
			if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;
			if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;
			if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;
			if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;
			if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;
			if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;

			if (tick > 0) ratio = type(uint256).max / ratio;

			sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
		}
	}

	function _getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {
		unchecked {
			require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');
			uint256 ratio = uint256(sqrtPriceX96) << 32;

			uint256 r = ratio;
			uint256 msb = 0;

			assembly {
				let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(5, gt(r, 0xFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(4, gt(r, 0xFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(3, gt(r, 0xFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(2, gt(r, 0xF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(1, gt(r, 0x3))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := gt(r, 0x1)
				msb := or(msb, f)
			}

			if (msb >= 128) r = ratio >> (msb - 127);
			else r = ratio << (127 - msb);

			int256 log_2 = (int256(msb) - 128) << 64;

			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(63, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(62, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(61, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(60, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(59, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(58, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(57, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(56, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(55, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(54, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(53, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(52, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(51, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(50, f))
			}

			int256 log_sqrt10001 = log_2 * 255738958999603826347141;

			int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);
			int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);

			tick = tickLow == tickHi ? tickLow : _getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;
		}
	}

	function _sqrt(uint256 _n) internal pure returns (uint256 result) {
		unchecked {
			uint256 _tmp = (_n + 1) / 2;
			result = _n;
			while (_tmp < result) {
				result = _tmp;
				_tmp = (_n / _tmp + _tmp) / 2;
			}
		}
	}

	function _getPriceAndTickFromValues(bool _weth0, uint256 _tokens, uint256 _weth) internal pure returns (uint160 price, int24 tick) {
		uint160 _tmpPrice = uint160(_sqrt(2**192 / (!_weth0 ? _tokens : _weth) * (_weth0 ? _tokens : _weth)));
		tick = _getTickAtSqrtRatio(_tmpPrice);
		tick = tick - (tick % 200);
		price = _getSqrtRatioAtTick(tick);
	}
}


contract Deploy {
	MULLET immutable public mullet;
	HEDGE immutable public hedge;
	constructor() payable {
		mullet = new MULLET{value:msg.value}();
		mullet.initialize();
		hedge = HEDGE(Team(payable(mullet.team())).hedge());
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"tokens","type":"uint256"}],"name":"Approval","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":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_user","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":"_tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectTradingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"position","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040525f341162000010575f80fd5b6040516200001e90620009b8565b604051809103905ff08015801562000038573d5f803e3d5ffd5b505f80546001600160a01b0319166001600160a01b0392909216919091178155604080516312a9293f60e21b815290513092917368b3465833fb72a70ecdf485e0e4c7bd8665fc4591634aa4a4fc916004808201926020929091908290030181865afa158015620000ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000d19190620009c6565b90505f620001036001600160a01b03808516908416106b033b2e3c9fd0803ce8000000674563918244f400006200027d565b5090507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000157573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017d9190620009c6565b60405163a167129560e01b81526001600160a01b03858116600483015284811660248301526127106044830152919091169063a1671295906064016020604051808303815f875af1158015620001d5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fb9190620009c6565b600180546001600160a01b0319166001600160a01b0392909216918217905560405163f637731d60e01b81526001600160a01b038381166004830152919091169063f637731d906024015f604051808303815f87803b1580156200025d575f80fd5b505af115801562000270573d5f803e3d5ffd5b5050505050505062000a9f565b5f805f620002c58662000291578462000293565b855b8715620002a15785620002a3565b865b620002b390600160c01b62000a1d565b620002bf919062000a33565b62000305565b9050620002d28162000350565b9150620002e160c88362000a53565b620002ed908362000a77565b9150620002fa8262000675565b925050935093915050565b80600260018201045b818110156200034a578091506002818285816200032f576200032f620009f5565b040181620003415762000341620009f5565b0490506200030e565b50919050565b5f6401000276a36001600160a01b038316108015906200038c575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b620003c25760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106200045657607f810383901c915062000460565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1462000666576001600160a01b038916620006488262000675565b6001600160a01b031611156200065f578162000668565b8062000668565b815b9998505050505050505050565b5f805f8360020b126200068c578260020b62000693565b8260020b5f035b9050620d89e8811115620006ce5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401620003b9565b5f816001165f03620006e557600160801b620006f7565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161562000722576ffff97272373d413259a46990580e213a0260801c5b600482161562000742576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161562000762576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161562000782576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615620007a2576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615620007c2576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615620007e2576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161562000803576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161562000824576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161562000845576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161562000866576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161562000887576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615620008a8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615620008c9576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615620008ea576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156200090c576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156200092d576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156200094d576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156200096b576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156200098e57805f19816200098a576200098a620009f5565b0490505b640100000000810615620009a4576001620009a6565b5f5b60ff16602082901c0192505050919050565b611ea58062002b1083390190565b5f60208284031215620009d7575f80fd5b81516001600160a01b0381168114620009ee575f80fd5b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8262000a2e5762000a2e620009f5565b500490565b808202811582820484141762000a4d5762000a4d62000a09565b92915050565b5f8260020b8062000a685762000a68620009f5565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff8213171562000a4d5762000a4d62000a09565b6120638062000aad5f395ff3fe608060405234801562000010575f80fd5b506004361062000104575f3560e01c80634000aea0116200009f57806385f2aef2116200006b57806385f2aef2146200025257806395d89b411462000263578063a9059cbb1462000289578063dd62ed3e14620002a0575f80fd5b80634000aea014620001fa57806353f8b303146200021157806370a08231146200021d5780638129fc1c1462000248575f80fd5b806316f0115b11620000df57806316f0115b146200019857806318160ddd14620001be57806323b872dd14620001c7578063313ce56714620001de575f80fd5b806306fdde03146200010857806309218e911462000154578063095ea7b31462000170575b5f80fd5b6200013c6040518060400160405280601481526020017326bab63632ba1026b7b732bc9026b4b9b9b4b7b760611b81525081565b6040516200014b919062001381565b60405180910390f35b6004546001600160801b03165b6040519081526020016200014b565b6200018762000181366004620013e6565b620002df565b60405190151581526020016200014b565b6001546001600160a01b03165b6040516001600160a01b0390911681526020016200014b565b60025462000161565b62000187620001d836600462001413565b620002f6565b620001e7601281565b60405160ff90911681526020016200014b565b620001876200020b36600462001456565b62000385565b6200021b6200042f565b005b620001616200022e366004620014df565b6001600160a01b03165f9081526003602052604090205490565b6200021b620005eb565b5f546001600160a01b0316620001a5565b6200013c6040518060400160405280600681526020016513555313115560d21b81525081565b620001876200029a366004620013e6565b62000aec565b62000161620002b136600462001504565b6001600160a01b039182165f9081526003602090815260408083209390941682526001909201909152205490565b5f620002ed33848462000afa565b90505b92915050565b6001600160a01b0383165f9081526003602090815260408083203384526001019091528120548281101562000329575f80fd5b5f1981146200036f576001600160a01b0385165f908152600360209081526040808320338452600101909152812080548592906200036990849062001554565b90915550505b6200037c85858562000b66565b95945050505050565b5f6200039333868662000b66565b50843b63ffffffff8116156200042357604051636be32e7360e01b81526001600160a01b03871690636be32e7390620003d79033908990899089906004016200156a565b6020604051808303815f875af1158015620003f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200041a9190620015b1565b62000423575f80fd5b50600195945050505050565b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000480573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a69190620015d2565b6001600160a01b031663fc6f78656040518060800160405280620004d26004546001600160801b031690565b8152602001620004e95f546001600160a01b031690565b6001600160a01b0390811682526001600160801b0360208084018290526040938401829052835160e087901b6001600160e01b031916815285516004820152908501519092166024830152918301518216604482015260609092015116606482015260840160408051808303815f875af11580156200056a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005909190620015f0565b50505f8054604080516323b1a1f760e11b815290516001600160a01b039092169263476343ee9260048084019382900301818387803b158015620005d2575f80fd5b505af1158015620005e5573d5f803e3d5ffd5b50505050565b60025415620005f8575f80fd5b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200064e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006749190620015d2565b90505f826001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007069190620015d2565b6b033b2e3c9fd0803ce800000060028190556001600160a01b0386165f8181526003602052604080822084905551939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200076a91815260200190565b60405180910390a36200078b84826b033b2e3c9fd0803ce800000062000afa565b505f620007ae836b033b2e3c9fd0803ce8000000674563918244f4000062000c2c565b9150505f620007d5846b033b2e3c9fd0803ce800000069d3c21bcecceda100000062000c2c565b9150505f836001600160a01b031663883164566040518061016001604052808862000801578a62000803565b895b6001600160a01b0316815260200188156200081f578a62000821565b895b6001600160a01b0316815261271060208201526040018862000844578662000846565b855b60020b815260200188156200085c57866200085e565b855b60020b8152602001886200087f576b033b2e3c9fd0803ce800000062000881565b5f5b81526020018815620008a0576b033b2e3c9fd0803ce8000000620008a2565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401620008e4919062001613565b6080604051808303815f875af115801562000901573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620009279190620016dc565b5050600480546fffffffffffffffffffffffffffffffff19166001600160801b038416179055506040519091505f90620009619062001373565b604051809103905ff0801580156200097b573d5f803e3d5ffd5b506040805160e0810182526001600160a01b038a811682528b811660208301818152612710848601908152868416606086019081528331608087019081525f60a0880181815260c0890191825298516304e45aaf60e01b8152975187166004890152935186166024880152915162ffffff1660448701525184166064860152516084850152935160a484015292511660c48201529192507368b3465833fb72a70ecdf485e0e4c7bd8665fc45916304e45aaf91319060e40160206040518083038185885af115801562000a50573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019062000a77919062001724565b50806001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562000ab1575f80fd5b505af115801562000ac4573d5f803e3d5ffd5b5050600480546001600160801b03428116600160801b02911617905550505050505050505050565b5f620002ed33848462000b66565b6001600160a01b038381165f8181526003602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b6004545f906001600160801b03600160801b9091041661012c0142101562000b9f5769d3c21bcecceda100000082111562000b9f575f80fd5b8162000bbf856001600160a01b03165f9081526003602052604090205490565b101562000bca575f80fd5b6001600160a01b038085165f81815260036020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b549086815260200190565b5f805f62000c748662000c40578462000c42565b855b871562000c50578562000c52565b865b62000c6290600160c01b62001750565b62000c6e919062001766565b62000cb4565b905062000c818162000cff565b915062000c9060c88362001780565b62000c9c9083620017a4565b915062000ca98262001026565b925050935093915050565b80600260018201045b8181101562000cf95780915060028182858162000cde5762000cde6200173c565b04018162000cf05762000cf06200173c565b04905062000cbd565b50919050565b5f6401000276a36001600160a01b0383161080159062000d3b575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b62000d715760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811062000e0757607f810383901c915062000e11565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146200101757886001600160a01b031662000ff98262001026565b6001600160a01b0316111562001010578162001019565b8062001019565b815b9998505050505050505050565b5f805f8360020b126200103d578260020b62001044565b8260020b5f035b9050620d89e88111156200107f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640162000d68565b5f816001165f036200109657600160801b620010a8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615620010dd576ffff97272373d413259a46990580e213a0260801c5b6004821615620010fd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156200111d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156200113d576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156200115d576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156200117d576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156200119d576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615620011be576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615620011df576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161562001200576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161562001221576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161562001242576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161562001263576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161562001284576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615620012a5576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615620012c7576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615620012e8576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161562001308576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161562001326576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156200134957805f19816200134557620013456200173c565b0490505b6401000000008106156200135f57600162001361565b5f5b60ff16602082901c0192505050919050565b61086180620017cd83390190565b5f6020808352835180828501525f5b81811015620013ae5785810183015185820160400152820162001390565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114620013e3575f80fd5b50565b5f8060408385031215620013f8575f80fd5b82356200140581620013ce565b946020939093013593505050565b5f805f6060848603121562001426575f80fd5b83356200143381620013ce565b925060208401356200144581620013ce565b929592945050506040919091013590565b5f805f80606085870312156200146a575f80fd5b84356200147781620013ce565b935060208501359250604085013567ffffffffffffffff808211156200149b575f80fd5b818701915087601f830112620014af575f80fd5b813581811115620014be575f80fd5b886020828501011115620014d0575f80fd5b95989497505060200194505050565b5f60208284031215620014f0575f80fd5b8135620014fd81620013ce565b9392505050565b5f806040838503121562001516575f80fd5b82356200152381620013ce565b915060208301356200153581620013ce565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620002f057620002f062001540565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f60208284031215620015c2575f80fd5b81518015158114620014fd575f80fd5b5f60208284031215620015e3575f80fd5b8151620014fd81620013ce565b5f806040838503121562001602575f80fd5b505080516020909101519092909150565b81516001600160a01b03168152610160810160208301516200164060208401826001600160a01b03169052565b50604083015162001658604084018262ffffff169052565b5060608301516200166e606084018260020b9052565b50608083015162001684608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151620016cb828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f8060808587031215620016f0575f80fd5b8451935060208501516001600160801b03811681146200170e575f80fd5b6040860151606090960151949790965092505050565b5f6020828403121562001735575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f826200176157620017616200173c565b500490565b8082028115828204841417620002f057620002f062001540565b5f8260020b806200179557620017956200173c565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff82131715620002f057620002f06200154056fe60a060405234801561000f575f80fd5b5033608052610033731427798f129b92f19927931a964d17bd6c2f5253600a61039c565b610052739d756a1848ee62db36c17f000699f65bfef9bf11600761039c565b610071731248e5ce0db0f869a9a934b1677bd5a17e5b8dfe600761039c565b610090736a5da854d5a3a0fc4a760bc6a9062d2a8e36431a600761039c565b6100af735a02fbce3b19e9508f5cc7f351f671795c1a81a4600761039c565b6100ce731b1b694c797904d9b84ed636661c32c4dcaa17d9600761039c565b6100ed73492bb59126d7f06c2c5b13cd50cad209a43ea326600761039c565b61010c7360d5567d7f8d05c899c89e63e00e4f6ca396ec13600761039c565b61012b73bae44b530f65aa9a97bb0d17b4eafb07ac67259c600761039c565b61014a73e6ed771d0dec3a1f5b1a9bbc90ff9353e7ec9c56600761039c565b61016973c44241b85051e5837b522289b2559d70496b16dc600761039c565b610188730539480ee00a547974e7e38c1a9c8b046d767f22600761039c565b6101a7737a3dd779b524c80e464b23afca6906539df958d0600761039c565b6101c673dfce959d59f3e34c4f018cd91e4a5b9453ff2d7d600761039c565b6101e573ac537fcf993fabca3e795658b5b1a06c5dec1e85600761039c565b610204730d9997acb3f204fe3a09acb1fd594f906bcc88bb600761039c565b610223736a49351d350245cfa979c1ebce7d18ada46406d5600761039c565b610242738e44af6308e52b94157ec9a898ec9f31cc1b0e16600761039c565b61026173f939fda6330984f3e84eb32701bd404dacc27d50600761039c565b6102807329f3536d4e2a790f11d5827490390dd1dca3e9b1600761039c565b61029f73a4c501d7cd0914fcfdb9e2bf367cc224a4531fac600761039c565b6102be735dbfeacf8f26e83314790f3ee91eeab97617f734600761039c565b6102dd73ebf184353dd81c21aaab257143346584d75d1537600761039c565b6102fc73daf028effc6e75307c54899a433b40514febb936600761039c565b61031b73c4be049c2835d5f42c3b11a44c775f8a4909bd5f600761039c565b61033a73d89ef44a1fbea729912fc40cacf7d0cae2a49841600761039c565b610359735e056d473f95ea7ef9660a46310297b2d457caad600761039c565b61037873b592016dc145afba2aee5b35e2dfe0629bf83a36600461039c565b6103977395f572bd843b74c0d582b1be5af2583293ad2255600261039c565b61046f565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5649092019190915581548392919061044190849061044a565b90915550505050565b8082018082111561046957634e487b7160e01b5f52601160045260245ffd5b92915050565b6080516103cd6104945f395f818160ab01528181610131015261020501526103cd5ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80633a98ef391461004e57806357a858fc1461006a578063e4fc6b6d1461009c578063fc0c546a146100a6575b5f80fd5b61005760015481565b6040519081526020015b60405180910390f35b61007d6100783660046102c7565b6100e5565b604080516001600160a01b039093168352602083019190915201610061565b6100a461011a565b005b6100cd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610061565b5f81815481106100f3575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561017e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a291906102de565b905080156102c4575f5b5f548110156102c2575f8082815481106101c8576101c86102f5565b5f9182526020918290206040805180820190915260029092020180546001600160a01b0390811680845260019283015494840185905291549294507f0000000000000000000000000000000000000000000000000000000000000000169263a9059cbb9290610237908861031d565b610241919061033a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ad9190610359565b505080806102ba9061037f565b9150506101ac565b505b50565b5f602082840312156102d7575f80fd5b5035919050565b5f602082840312156102ee575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761033457610334610309565b92915050565b5f8261035457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610369575f80fd5b81518015158114610378575f80fd5b9392505050565b5f6001820161039057610390610309565b506001019056fea2646970667358221220aa1d6408a603e011931de66cfd063bd1077adb4a5db42b7677b610068614ce5164736f6c63430008150033a2646970667358221220fc7db4763a07689366273763e3f881dd8958f5498c2d6873729c2604d09238cd64736f6c6343000815003360c060405234801561000f575f80fd5b503360805260405161002090610156565b604051809103905ff080158015610039573d5f803e3d5ffd5b506001600160a01b031660a052610065737178523cd70c5e96c079701fe46cda3e1799b4ce60096100a8565b61008473c61d594dff6d253142c7fa83f41d318f157b018a60096100a8565b6100a3732000af01b455c4cd3e65aed180ec3ee52bd6c26460026100a8565b610188565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5649092019190915581548392919061014d908490610163565b90915550505050565b6114e4806109c183390190565b8082018082111561018257634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05161080a6101b75f395f818161017a01526101e901525f81816101c50152610280015261080a5ff3fe608060405260043610610087575f3560e01c806357a858fc1161005757806357a858fc146100f85780638947606914610136578063e086e5ec14610155578063e1d6a17c14610169578063fc0c546a146101b4575f80fd5b80632fb8d911146100925780633a98ef39146100a8578063476343ee146100d05780634c02f62e146100e4575f80fd5b3661008e57005b5f80fd5b34801561009d575f80fd5b506100a66101e7565b005b3480156100b3575f80fd5b506100bd60015481565b6040519081526020015b60405180910390f35b3480156100db575f80fd5b506100a6610273565b3480156100ef575f80fd5b506100a66102a4565b348015610103575f80fd5b506101176101123660046106ba565b61031b565b604080516001600160a01b0390931683526020830191909152016100c7565b348015610141575f80fd5b506100a66101503660046106e5565b610350565b348015610160575f80fd5b506100a6610614565b348015610174575f80fd5b5061019c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c7565b3480156101bf575f80fd5b5061019c7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610244573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102689190610707565b50610271610614565b565b61027b6102a4565b6102717f0000000000000000000000000000000000000000000000000000000000000000610350565b6102717368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610150919061071e565b5f8181548110610329575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c5919061071e565b9050806001600160a01b0316826001600160a01b0316036104a5576040516370a0823160e01b81523060048201526001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa15801561042a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044e9190610707565b6040518263ffffffff1660e01b815260040161046c91815260200190565b5f604051808303815f87803b158015610483575f80fd5b505af1158015610495573d5f803e3d5ffd5b505050506104a1610614565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156104e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061050d9190610707565b9050801561060f575f5b5f5481101561060d575f80828154811061053357610533610739565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03908116808452600192830154948401859052915492945088169263a9059cbb92906105829088610761565b61058c919061077e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156105d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f8919061079d565b50508080610605906107bc565b915050610517565b505b505050565b4780156106b7575f5b5f548110156104a1575f80828154811061063957610639610739565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168083526001918201549383018490529054919350916108fc91906106829087610761565b61068c919061077e565b6040518115909202915f818181858888f19350505050505080806106af906107bc565b91505061061d565b50565b5f602082840312156106ca575f80fd5b5035919050565b6001600160a01b03811681146106b7575f80fd5b5f602082840312156106f5575f80fd5b8135610700816106d1565b9392505050565b5f60208284031215610717575f80fd5b5051919050565b5f6020828403121561072e575f80fd5b8151610700816106d1565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107785761077861074d565b92915050565b5f8261079857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107ad575f80fd5b81518015158114610700575f80fd5b5f600182016107cd576107cd61074d565b506001019056fea2646970667358221220d7d1807f95e09fbb4970874e9fdb43d9a4411e3c0a1ff0acf5c19ff577d660c164736f6c63430008150033608060405234801561000f575f80fd5b50600380546001600160a01b031916331790556114b58061002f5f395ff3fe608060405260043610610134575f3560e01c806370a08231116100a8578063c6c28fd01161006d578063c6c28fd0146103eb578063cc2fbd661461040a578063dd62ed3e14610430578063e4849b3214610475578063f088d54714610494578063fdb5a03e146104a7575f80fd5b806370a082311461033057806385f2aef21461036457806395d89b4114610395578063a6f2ae3a146103c4578063a9059cbb146103cc575f80fd5b8063313ce567116100f9578063313ce567146102275780633472956c1461024d5780633ccfd60b1461026c5780634000aea014610280578063479ba7ae1461029f57806357f6b812146102be575f80fd5b806306fdde0314610147578063095ea7b31461018d57806318160ddd146101bc57806323b872dd146101d9578063259bfdd7146101f8575f80fd5b36610143576101416104bb565b005b5f80fd5b348015610152575f80fd5b5061017760405180604001604052806005815260200164484544474560d81b81525081565b6040516101849190611155565b60405180910390f35b348015610198575f80fd5b506101ac6101a73660046111bb565b6104ca565b6040519015158152602001610184565b3480156101c7575f80fd5b505f545b604051908152602001610184565b3480156101e4575f80fd5b506101ac6101f33660046111e3565b61052f565b348015610203575f80fd5b5061020c6105ae565b60408051938452602084019290925290820152606001610184565b348015610232575f80fd5b5061023b601281565b60405160ff9091168152602001610184565b348015610258575f80fd5b506101cb61026736600461122c565b610639565b348015610277575f80fd5b506101cb610788565b34801561028b575f80fd5b506101ac61029a36600461126b565b61082e565b3480156102aa575f80fd5b506101cb6102b93660046112eb565b6108cf565b3480156102c9575f80fd5b506102dd6102d83660046112eb565b610915565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526001600160a01b031661012082015261014001610184565b34801561033b575f80fd5b506101cb61034a3660046112eb565b6001600160a01b03165f9081526001602052604090205490565b34801561036f575f80fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610184565b3480156103a0575f80fd5b50610177604051806040016040528060048152602001632420a4a960e11b81525081565b6101cb6104bb565b3480156103d7575f80fd5b506101ac6103e63660046111bb565b610991565b3480156103f6575f80fd5b5061037d6104053660046112eb565b61099d565b348015610415575f80fd5b5073a093ea0904250084411f98d9195567e8b440669661037d565b34801561043b575f80fd5b506101cb61044a366004611304565b6001600160a01b039182165f9081526001602081815260408084209490951683529201909152205490565b348015610480575f80fd5b506101cb61048f366004611335565b6109bd565b6101cb6104a23660046112eb565b6109c7565b3480156104b2575f80fd5b506101cb610a53565b5f6104c55f6109c7565b905090565b335f8181526001602081815260408084206001600160a01b0388168086529301825280842086905551858152929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6001600160a01b0383165f908152600160208181526040808420338552909201905281205482111561055f575f80fd5b6001600160a01b0384165f908152600160208181526040808420338552909201905281208054849290610593908490611360565b909155506105a49050848484610ad8565b90505b9392505050565b5f805f670de0b6b3a76400006105c25f5490565b6105d1906402540be400611373565b6105db919061139e565b6105ec9066038d7ea4c680006113bd565b92506105fa600a6064611360565b610605846064611373565b61060f919061139e565b9150606461061e600a82611360565b6106289085611373565b610632919061139e565b9050909192565b5f805f6106446105ae565b90935091505f9050856106575781610659565b825b90505f8661066857606461066b565b605a5b8761067757605a61067a565b60645b6402540be400028161068e5761068e61138a565b04905086801561069c575085155b806106ad5750861580156106ad5750855b1561073c5785156107065780600202816106dd838b60080202848660040202858602878860040202010303610c24565b846002020303670de0b6b3a764000002816106fa576106fa61138a565b049450505050506105a7565b60028082029083028261072382820180028c830260080201610c24565b0303670de0b6b3a764000002816106fa576106fa61138a565b851561076557670de0b6b3a7640000828902671bc16d674ec800008a83018402048a02016106fa565b670de0b6b3a7640000671bc16d674ec800008982018302048902838a02036106fa565b5f80610793336108cf565b90506107a3600160401b82611373565b335f90815260016020526040812060020180549091906107c49084906113d0565b9091555050604051339082156108fc029083905f818181858888f193505050501580156107f3573d5f803e3d5ffd5b5060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a2919050565b5f61083a338686610ad8565b50843b63ffffffff8116156108c357604051636be32e7360e01b81526001600160a01b03871690636be32e739061087b9033908990899089906004016113f7565b6020604051808303815f875af1158015610897573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bb919061143e565b6108c3575f80fd5b50600195945050505050565b6001600160a01b0381165f90815260016020526040812060028101549054600160401b91906002546109019190611373565b61090b9190611459565b610529919061139e565b475f80808080808080806109275f5490565b98506109316105ae565b6001600160a01b038e165f81815260016020526040902054939b509199509750319550935061095f8b6108cf565b92508261096d855f80610639565b61097791906113bd565b91506109828b61099d565b90509193959799509193959799565b5f6105a7338484610ad8565b6001600160a01b039081165f908152600160205260409020600301541690565b5f61052982610c67565b5f8034116109d3575f80fd5b6001600160a01b038216158015906109f457506001600160a01b0382163314155b8015610a1a5750610a043361099d565b6001600160a01b0316826001600160a01b031614155b15610a4a57335f90815260016020526040902060030180546001600160a01b0319166001600160a01b0384161790555b61052934610e7b565b5f80610a5e336108cf565b9050610a6e600160401b82611373565b335f9081526001602052604081206002018054909190610a8f9084906113d0565b909155505060405181815233907fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b879060200160405180910390a2610ad281610e7b565b91505090565b6001600160a01b0383165f90815260016020526040812054821115610afb575f80fd5b6001600160a01b0384165f9081526001602052604081208054849290610b22908490611360565b9091555050600254610b349083611373565b6001600160a01b0385165f9081526001602052604081206002018054909190610b5e908490611459565b90915550506001600160a01b0383165f9081526001602052604081208054849290610b8a9084906113bd565b9091555050600254610b9c9083611373565b6001600160a01b0384165f9081526001602052604081206002018054909190610bc69084906113d0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c1291815260200190565b60405180910390a35060019392505050565b80600260018201045b81811015610c6157809150600281828581610c4a57610c4a61138a565b040181610c5957610c5961138a565b049050610c2d565b50919050565b335f90815260016020526040812054821115610c81575f80fd5b610c8c825f80610639565b90505f610c9b600a6064611360565b610ca6600a84611373565b610cb0919061139e565b9050825f80015f828254610cc49190611360565b9091555050335f9081526001602052604081208054859290610ce7908490611360565b9091555050600254610cf99084611373565b335f9081526001602052604081206002018054909190610d1a908490611459565b909155505f9050610d2d600a6064611360565b610d38600185611373565b610d42919061139e565b9050610d52600160401b82611373565b60015f610d676003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610d979190611459565b90915550505f54600160401b610dad8385611360565b610db79190611373565b610dc1919061139e565b600280545f90610dd29084906113bd565b9091555050604051339084156108fc029085905f818181858888f19350505050158015610e01573d5f803e3d5ffd5b506040518481525f9033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518581526020810185905233917fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a910160405180910390a25050919050565b5f806064610e8a600a85611373565b610e94919061139e565b9050610ea28360015f610639565b9150815f80015f828254610eb691906113bd565b9091555050335f9081526001602052604081208054849290610ed99084906113bd565b9091555050600254610eeb9083611373565b335f9081526001602052604081206002018054909190610f0c9084906113d0565b909155505f90506064610f20600186611373565b610f2a919061139e565b9050610f3a600160401b82611373565b60015f610f4f6003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610f7f9190611459565b909155505f90506064610f93600387611373565b610f9d919061139e565b90505f610fa93361099d565b90506001600160a01b03811615801590610fe9575068056bc75e2d63100000610fe6826001600160a01b03165f9081526001602052604090205490565b10155b1561103157610ffc600160401b83611373565b6001600160a01b0382165f9081526001602052604081206002018054909190611026908490611459565b909155506110949050565b61103f600160401b83611373565b73a093ea0904250084411f98d9195567e8b44066965f90815260016020527f9d025699c06daf25b0e2685b09612a9ecf0b64407fd10444aa5e288db0ee799d805490919061108e908490611459565b90915550505b5f54600160401b836110a68688611360565b6110b09190611360565b6110ba9190611373565b6110c4919061139e565b600280545f906110d59084906113bd565b909155505060405185815233905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518781526020810187905233917f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed910160405180910390a250505050919050565b5f6020808352835180828501525f5b8181101561118057858101830151858201604001528201611164565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111b6575f80fd5b919050565b5f80604083850312156111cc575f80fd5b6111d5836111a0565b946020939093013593505050565b5f805f606084860312156111f5575f80fd5b6111fe846111a0565b925061120c602085016111a0565b9150604084013590509250925092565b8015158114611229575f80fd5b50565b5f805f6060848603121561123e575f80fd5b8335925060208401356112508161121c565b915060408401356112608161121c565b809150509250925092565b5f805f806060858703121561127e575f80fd5b611287856111a0565b935060208501359250604085013567ffffffffffffffff808211156112aa575f80fd5b818701915087601f8301126112bd575f80fd5b8135818111156112cb575f80fd5b8860208285010111156112dc575f80fd5b95989497505060200194505050565b5f602082840312156112fb575f80fd5b6105a7826111a0565b5f8060408385031215611315575f80fd5b61131e836111a0565b915061132c602084016111a0565b90509250929050565b5f60208284031215611345575f80fd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105295761052961134c565b80820281158282048414176105295761052961134c565b634e487b7160e01b5f52601260045260245ffd5b5f826113b857634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105295761052961134c565b8082018281125f8312801582168215821617156113ef576113ef61134c565b505092915050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f6020828403121561144e575f80fd5b81516105a78161121c565b8181035f8312801583831316838312821617156114785761147861134c565b509291505056fea2646970667358221220d4996163bb350842839b008fe49e9d1e61a43bef38996ab98d1324871b55048164736f6c63430008150033

Deployed Bytecode

0x608060405234801562000010575f80fd5b506004361062000104575f3560e01c80634000aea0116200009f57806385f2aef2116200006b57806385f2aef2146200025257806395d89b411462000263578063a9059cbb1462000289578063dd62ed3e14620002a0575f80fd5b80634000aea014620001fa57806353f8b303146200021157806370a08231146200021d5780638129fc1c1462000248575f80fd5b806316f0115b11620000df57806316f0115b146200019857806318160ddd14620001be57806323b872dd14620001c7578063313ce56714620001de575f80fd5b806306fdde03146200010857806309218e911462000154578063095ea7b31462000170575b5f80fd5b6200013c6040518060400160405280601481526020017326bab63632ba1026b7b732bc9026b4b9b9b4b7b760611b81525081565b6040516200014b919062001381565b60405180910390f35b6004546001600160801b03165b6040519081526020016200014b565b6200018762000181366004620013e6565b620002df565b60405190151581526020016200014b565b6001546001600160a01b03165b6040516001600160a01b0390911681526020016200014b565b60025462000161565b62000187620001d836600462001413565b620002f6565b620001e7601281565b60405160ff90911681526020016200014b565b620001876200020b36600462001456565b62000385565b6200021b6200042f565b005b620001616200022e366004620014df565b6001600160a01b03165f9081526003602052604090205490565b6200021b620005eb565b5f546001600160a01b0316620001a5565b6200013c6040518060400160405280600681526020016513555313115560d21b81525081565b620001876200029a366004620013e6565b62000aec565b62000161620002b136600462001504565b6001600160a01b039182165f9081526003602090815260408083209390941682526001909201909152205490565b5f620002ed33848462000afa565b90505b92915050565b6001600160a01b0383165f9081526003602090815260408083203384526001019091528120548281101562000329575f80fd5b5f1981146200036f576001600160a01b0385165f908152600360209081526040808320338452600101909152812080548592906200036990849062001554565b90915550505b6200037c85858562000b66565b95945050505050565b5f6200039333868662000b66565b50843b63ffffffff8116156200042357604051636be32e7360e01b81526001600160a01b03871690636be32e7390620003d79033908990899089906004016200156a565b6020604051808303815f875af1158015620003f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200041a9190620015b1565b62000423575f80fd5b50600195945050505050565b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000480573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a69190620015d2565b6001600160a01b031663fc6f78656040518060800160405280620004d26004546001600160801b031690565b8152602001620004e95f546001600160a01b031690565b6001600160a01b0390811682526001600160801b0360208084018290526040938401829052835160e087901b6001600160e01b031916815285516004820152908501519092166024830152918301518216604482015260609092015116606482015260840160408051808303815f875af11580156200056a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005909190620015f0565b50505f8054604080516323b1a1f760e11b815290516001600160a01b039092169263476343ee9260048084019382900301818387803b158015620005d2575f80fd5b505af1158015620005e5573d5f803e3d5ffd5b50505050565b60025415620005f8575f80fd5b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200064e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006749190620015d2565b90505f826001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007069190620015d2565b6b033b2e3c9fd0803ce800000060028190556001600160a01b0386165f8181526003602052604080822084905551939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200076a91815260200190565b60405180910390a36200078b84826b033b2e3c9fd0803ce800000062000afa565b505f620007ae836b033b2e3c9fd0803ce8000000674563918244f4000062000c2c565b9150505f620007d5846b033b2e3c9fd0803ce800000069d3c21bcecceda100000062000c2c565b9150505f836001600160a01b031663883164566040518061016001604052808862000801578a62000803565b895b6001600160a01b0316815260200188156200081f578a62000821565b895b6001600160a01b0316815261271060208201526040018862000844578662000846565b855b60020b815260200188156200085c57866200085e565b855b60020b8152602001886200087f576b033b2e3c9fd0803ce800000062000881565b5f5b81526020018815620008a0576b033b2e3c9fd0803ce8000000620008a2565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401620008e4919062001613565b6080604051808303815f875af115801562000901573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620009279190620016dc565b5050600480546fffffffffffffffffffffffffffffffff19166001600160801b038416179055506040519091505f90620009619062001373565b604051809103905ff0801580156200097b573d5f803e3d5ffd5b506040805160e0810182526001600160a01b038a811682528b811660208301818152612710848601908152868416606086019081528331608087019081525f60a0880181815260c0890191825298516304e45aaf60e01b8152975187166004890152935186166024880152915162ffffff1660448701525184166064860152516084850152935160a484015292511660c48201529192507368b3465833fb72a70ecdf485e0e4c7bd8665fc45916304e45aaf91319060e40160206040518083038185885af115801562000a50573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019062000a77919062001724565b50806001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562000ab1575f80fd5b505af115801562000ac4573d5f803e3d5ffd5b5050600480546001600160801b03428116600160801b02911617905550505050505050505050565b5f620002ed33848462000b66565b6001600160a01b038381165f8181526003602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b6004545f906001600160801b03600160801b9091041661012c0142101562000b9f5769d3c21bcecceda100000082111562000b9f575f80fd5b8162000bbf856001600160a01b03165f9081526003602052604090205490565b101562000bca575f80fd5b6001600160a01b038085165f81815260036020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b549086815260200190565b5f805f62000c748662000c40578462000c42565b855b871562000c50578562000c52565b865b62000c6290600160c01b62001750565b62000c6e919062001766565b62000cb4565b905062000c818162000cff565b915062000c9060c88362001780565b62000c9c9083620017a4565b915062000ca98262001026565b925050935093915050565b80600260018201045b8181101562000cf95780915060028182858162000cde5762000cde6200173c565b04018162000cf05762000cf06200173c565b04905062000cbd565b50919050565b5f6401000276a36001600160a01b0383161080159062000d3b575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b62000d715760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811062000e0757607f810383901c915062000e11565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146200101757886001600160a01b031662000ff98262001026565b6001600160a01b0316111562001010578162001019565b8062001019565b815b9998505050505050505050565b5f805f8360020b126200103d578260020b62001044565b8260020b5f035b9050620d89e88111156200107f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640162000d68565b5f816001165f036200109657600160801b620010a8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615620010dd576ffff97272373d413259a46990580e213a0260801c5b6004821615620010fd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156200111d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156200113d576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156200115d576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156200117d576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156200119d576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615620011be576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615620011df576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161562001200576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161562001221576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161562001242576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161562001263576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161562001284576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615620012a5576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615620012c7576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615620012e8576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161562001308576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161562001326576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156200134957805f19816200134557620013456200173c565b0490505b6401000000008106156200135f57600162001361565b5f5b60ff16602082901c0192505050919050565b61086180620017cd83390190565b5f6020808352835180828501525f5b81811015620013ae5785810183015185820160400152820162001390565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114620013e3575f80fd5b50565b5f8060408385031215620013f8575f80fd5b82356200140581620013ce565b946020939093013593505050565b5f805f6060848603121562001426575f80fd5b83356200143381620013ce565b925060208401356200144581620013ce565b929592945050506040919091013590565b5f805f80606085870312156200146a575f80fd5b84356200147781620013ce565b935060208501359250604085013567ffffffffffffffff808211156200149b575f80fd5b818701915087601f830112620014af575f80fd5b813581811115620014be575f80fd5b886020828501011115620014d0575f80fd5b95989497505060200194505050565b5f60208284031215620014f0575f80fd5b8135620014fd81620013ce565b9392505050565b5f806040838503121562001516575f80fd5b82356200152381620013ce565b915060208301356200153581620013ce565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620002f057620002f062001540565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f60208284031215620015c2575f80fd5b81518015158114620014fd575f80fd5b5f60208284031215620015e3575f80fd5b8151620014fd81620013ce565b5f806040838503121562001602575f80fd5b505080516020909101519092909150565b81516001600160a01b03168152610160810160208301516200164060208401826001600160a01b03169052565b50604083015162001658604084018262ffffff169052565b5060608301516200166e606084018260020b9052565b50608083015162001684608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151620016cb828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f8060808587031215620016f0575f80fd5b8451935060208501516001600160801b03811681146200170e575f80fd5b6040860151606090960151949790965092505050565b5f6020828403121562001735575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f826200176157620017616200173c565b500490565b8082028115828204841417620002f057620002f062001540565b5f8260020b806200179557620017956200173c565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff82131715620002f057620002f06200154056fe60a060405234801561000f575f80fd5b5033608052610033731427798f129b92f19927931a964d17bd6c2f5253600a61039c565b610052739d756a1848ee62db36c17f000699f65bfef9bf11600761039c565b610071731248e5ce0db0f869a9a934b1677bd5a17e5b8dfe600761039c565b610090736a5da854d5a3a0fc4a760bc6a9062d2a8e36431a600761039c565b6100af735a02fbce3b19e9508f5cc7f351f671795c1a81a4600761039c565b6100ce731b1b694c797904d9b84ed636661c32c4dcaa17d9600761039c565b6100ed73492bb59126d7f06c2c5b13cd50cad209a43ea326600761039c565b61010c7360d5567d7f8d05c899c89e63e00e4f6ca396ec13600761039c565b61012b73bae44b530f65aa9a97bb0d17b4eafb07ac67259c600761039c565b61014a73e6ed771d0dec3a1f5b1a9bbc90ff9353e7ec9c56600761039c565b61016973c44241b85051e5837b522289b2559d70496b16dc600761039c565b610188730539480ee00a547974e7e38c1a9c8b046d767f22600761039c565b6101a7737a3dd779b524c80e464b23afca6906539df958d0600761039c565b6101c673dfce959d59f3e34c4f018cd91e4a5b9453ff2d7d600761039c565b6101e573ac537fcf993fabca3e795658b5b1a06c5dec1e85600761039c565b610204730d9997acb3f204fe3a09acb1fd594f906bcc88bb600761039c565b610223736a49351d350245cfa979c1ebce7d18ada46406d5600761039c565b610242738e44af6308e52b94157ec9a898ec9f31cc1b0e16600761039c565b61026173f939fda6330984f3e84eb32701bd404dacc27d50600761039c565b6102807329f3536d4e2a790f11d5827490390dd1dca3e9b1600761039c565b61029f73a4c501d7cd0914fcfdb9e2bf367cc224a4531fac600761039c565b6102be735dbfeacf8f26e83314790f3ee91eeab97617f734600761039c565b6102dd73ebf184353dd81c21aaab257143346584d75d1537600761039c565b6102fc73daf028effc6e75307c54899a433b40514febb936600761039c565b61031b73c4be049c2835d5f42c3b11a44c775f8a4909bd5f600761039c565b61033a73d89ef44a1fbea729912fc40cacf7d0cae2a49841600761039c565b610359735e056d473f95ea7ef9660a46310297b2d457caad600761039c565b61037873b592016dc145afba2aee5b35e2dfe0629bf83a36600461039c565b6103977395f572bd843b74c0d582b1be5af2583293ad2255600261039c565b61046f565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5649092019190915581548392919061044190849061044a565b90915550505050565b8082018082111561046957634e487b7160e01b5f52601160045260245ffd5b92915050565b6080516103cd6104945f395f818160ab01528181610131015261020501526103cd5ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80633a98ef391461004e57806357a858fc1461006a578063e4fc6b6d1461009c578063fc0c546a146100a6575b5f80fd5b61005760015481565b6040519081526020015b60405180910390f35b61007d6100783660046102c7565b6100e5565b604080516001600160a01b039093168352602083019190915201610061565b6100a461011a565b005b6100cd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610061565b5f81815481106100f3575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561017e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a291906102de565b905080156102c4575f5b5f548110156102c2575f8082815481106101c8576101c86102f5565b5f9182526020918290206040805180820190915260029092020180546001600160a01b0390811680845260019283015494840185905291549294507f0000000000000000000000000000000000000000000000000000000000000000169263a9059cbb9290610237908861031d565b610241919061033a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ad9190610359565b505080806102ba9061037f565b9150506101ac565b505b50565b5f602082840312156102d7575f80fd5b5035919050565b5f602082840312156102ee575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761033457610334610309565b92915050565b5f8261035457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610369575f80fd5b81518015158114610378575f80fd5b9392505050565b5f6001820161039057610390610309565b506001019056fea2646970667358221220aa1d6408a603e011931de66cfd063bd1077adb4a5db42b7677b610068614ce5164736f6c63430008150033a2646970667358221220fc7db4763a07689366273763e3f881dd8958f5498c2d6873729c2604d09238cd64736f6c63430008150033

Deployed Bytecode Sourcemap

14946:11994:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15835:52;;;;;;;;;;;;;;;-1:-1:-1;;;15835:52:0;;;;;;;;;;;;:::i;:::-;;;;;;;;19988:82;20050:15;;-1:-1:-1;;;;;20050:15:0;19988:82;;;713:25:1;;;701:2;686:18;19988:82:0;567:177:1;18688:132:0;;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18688:132:0;1205:187:1;19568:72:0;19626:9;;-1:-1:-1;;;;;19626:9:0;19568:72;;;-1:-1:-1;;;;;1670:32:1;;;1652:51;;1640:2;1625:18;19568:72:0;1506:203:1;19645:86:0;19710:16;;19645:86;;18825:321;;;;;;:::i;:::-;;:::i;15935:35::-;;15968:2;15935:35;;;;;2347:4:1;2335:17;;;2317:36;;2305:2;2290:18;15935:35:0;2175:184:1;19151:323:0;;;;;;:::i;:::-;;:::i;18283:271::-;;;:::i;:::-;;19736:106;;;;;;:::i;:::-;-1:-1:-1;;;;;19812:17:0;19791:7;19812:17;;;:10;:17;;;;;:25;;19736:106;16789:1489;;;:::i;19482:81::-;19519:7;19548:9;-1:-1:-1;;;;;19548:9:0;19482:81;;15891:40;;;;;;;;;;;;;;;-1:-1:-1;;;15891:40:0;;;;;18559:124;;;;;;:::i;:::-;;:::i;19847:136::-;;;;;;:::i;:::-;-1:-1:-1;;;;;19941:17:0;;;19920:7;19941:17;;;:10;:17;;;;;;;;:37;;;;;;:27;;;;:37;;;;;;19847:136;18688:132;18758:4;18776:39;18785:10;18797:8;18807:7;18776:8;:39::i;:::-;18769:46;;18688:132;;;;;:::o;18825:321::-;-1:-1:-1;;;;;19941:17:0;;18910:4;19941:17;;;:10;:17;;;;;;;;18959:10;19941:37;;:27;;:37;;;;;;18997:7;18983:10;:21;;18975:30;;;;;;-1:-1:-1;;19014:10:0;:22;19010:90;;-1:-1:-1;;;;;19044:17:0;;:4;:17;;;:10;:17;;;;;;;;19072:10;19044:39;;:27;;:39;;;;;:50;;19087:7;;19044:4;:50;;19087:7;;19044:50;:::i;:::-;;;;-1:-1:-1;;19010:90:0;19111:30;19121:5;19128:3;19133:7;19111:9;:30::i;:::-;19104:37;18825:321;-1:-1:-1;;;;;18825:321:0:o;19151:323::-;19246:4;19257:35;19267:10;19279:3;19284:7;19257:9;:35::i;:::-;-1:-1:-1;19338:16:0;;19367:9;;;;19363:91;;19392:55;;-1:-1:-1;;;19392:55:0;;-1:-1:-1;;;;;19392:27:0;;;;;:55;;19420:10;;19432:7;;19441:5;;;;19392:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19384:64;;;;;;-1:-1:-1;19465:4:0;;19151:323;-1:-1:-1;;;;;19151:323:0:o;18283:271::-;15188:42;-1:-1:-1;;;;;18343:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18327:49:0;;18377:142;;;;;;;;18422:10;20050:15;;-1:-1:-1;;;;;20050:15:0;;19988:82;18422:10;18377:142;;;;18449:6;19519:7;19548:9;-1:-1:-1;;;;;19548:9:0;;19482:81;18449:6;-1:-1:-1;;;;;18377:142:0;;;;;-1:-1:-1;;;;;18377:142:0;;;;;;;;;;;;;;18327:193;;;;;;-1:-1:-1;;;;;;18327:193:0;;;5400:13:1;;18327:193:0;;;5382:32:1;5462:17;;;5456:24;5452:50;;;5430:20;;;5423:80;5538:17;;;5532:24;5647:21;;5625:20;;;5618:51;5729:4;5717:17;;;5711:24;5707:33;5685:20;;;5678:63;5354:19;;18327:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;18525:4:0;:9;;:24;;;-1:-1:-1;;;18525:24:0;;;;-1:-1:-1;;;;;18525:9:0;;;;:22;;:24;;;;;;;;;;:4;:9;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18283:271::o;16789:1489::-;19710:16;;16833:18;16825:27;;;;;;16857:13;16881:4;16857:29;;16891:13;15188:42;-1:-1:-1;;;;;16907:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16891:30;;16926:11;16948:5;-1:-1:-1;;;;;16940:13:0;:5;-1:-1:-1;;;;;16940:13:0;;16926:27;;16958:19;15188:42;-1:-1:-1;;;;;16996:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15127:4;17026:16;:33;;;-1:-1:-1;;;;;17064:17:0;;17026:4;17064:17;;;:10;:17;;;;;;:42;;;17116:45;16958:63;;-1:-1:-1;17064:17:0;;17026:4;;17116:45;;;;713:25:1;;701:2;686:18;;567:177;17116:45:0;;;;;;;;17166;17175:5;17190:3;15127:4;17166:8;:45::i;:::-;;17220:14;17238:66;17265:6;15127:4;15277:7;17238:26;:66::i;:::-;17216:88;;;17313:14;17331:64;17358:6;15127:4;15362:9;17331:26;:64::i;:::-;17309:86;;;17401:19;17430:3;-1:-1:-1;;;;;17430:8:0;;17439:403;;;;;;;;17480:6;:22;;17497:5;17480:22;;;17489:5;17480:22;-1:-1:-1;;;;;17439:403:0;;;;;17517:6;17516:7;:23;;17534:5;17516:23;;;17526:5;17516:23;-1:-1:-1;;;;;17439:403:0;;;17550:5;17439:403;;;;;;17572:6;:28;;17592:8;17572:28;;;17581:8;17572:28;17439:403;;;;;;17618:6;17617:7;:29;;17638:8;17617:29;;;17627:8;17617:29;17439:403;;;;;;17668:6;:27;;15127:4;17668:27;;;17677:1;17668:27;17439:403;;;;17718:6;17717:7;:28;;15127:4;17717:28;;;17727:1;17717:28;17439:403;;;;17763:1;17439:403;;;;17782:1;17439:403;;;;17800:5;-1:-1:-1;;;;;17439:403:0;;;;;17821:15;17439:403;;;17430:413;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;17848:15:0;:38;;-1:-1:-1;;17848:38:0;-1:-1:-1;;;;;17848:38:0;;;;;-1:-1:-1;17918:17:0;;17848:38;;-1:-1:-1;;;17918:17:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17985:211:0;;;;;;;;-1:-1:-1;;;;;17985:211:0;;;;;17970:13;;;17985:211;;;;;;18067:5;17985:211;;;;;;;;;;;;;;;18126:13;;17985:211;;;;;;-1:-1:-1;17985:211:0;;;;;;;;;;;;17940:257;;-1:-1:-1;;;17940:257:0;;8195:13:1;;8191:22;;17940:257:0;;;8173:41:1;8256:24;;8252:33;;8230:20;;;8223:63;8328:24;;8354:8;8324:39;8302:20;;;8295:69;8406:24;8402:33;;8380:20;;;8373:63;8474:24;8452:20;;;8445:54;8537:24;;8515:20;;;8508:54;8604:24;;8600:33;8578:20;;;8571:63;17985:211:0;;-1:-1:-1;15188:42:0;;17940:23;;17970:13;;8107:19:1;;17940:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18202:12;-1:-1:-1;;;;;18202:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18232:14:0;:41;;-1:-1:-1;;;;;18257:15:0;18232:41;;-1:-1:-1;;;18232:41:0;;;;;;-1:-1:-1;;;;;;;;;;16789:1489:0:o;18559:124::-;18625:4;18643:35;18653:10;18665:3;18670:7;18643:9;:35::i;20077:212::-;-1:-1:-1;;;;;20175:18:0;;;20164:4;20175:18;;;:10;:18;;;;;;;;:38;;;;;;:28;;;;:38;;;;;:48;;;20233:35;713:25:1;;;20164:4:0;;20175:38;:18;20233:35;;686:18:1;20233:35:0;;;;;;;;-1:-1:-1;20280:4:0;20077:212;;;;;:::o;20295:395::-;20426:14;;20377:4;;-1:-1:-1;;;;;;;;20426:14:0;;;;15451:9;20426:27;20408:15;:45;20404:96;;;15504:21;20470:22;;;20462:31;;;;;;20533:7;20513:16;20523:5;-1:-1:-1;;;;;19812:17:0;19791:7;19812:17;;;:10;:17;;;;;:25;;19736:106;20513:16;:27;;20505:36;;;;;;-1:-1:-1;;;;;20547:17:0;;;:4;:17;;;:10;:17;;;;;;:36;;;;;;;20589:15;;;;;;;;;;:34;;;;;;20634:29;;;;;;20576:7;713:25:1;;701:2;686:18;;567:177;26584:353:0;26688:13;26703:10;26720:17;26748:72;26794:6;:24;;26813:5;26794:24;;;26803:7;26794:24;26765:6;26764:7;:25;;26784:5;26764:25;;;26774:7;26764:25;26754:36;;-1:-1:-1;;;26754:36:0;:::i;:::-;:65;;;;:::i;:::-;26748:5;:72::i;:::-;26720:101;;26833:30;26853:9;26833:19;:30::i;:::-;26826:37;-1:-1:-1;26883:10:0;26890:3;26826:37;26883:10;:::i;:::-;26875:19;;:4;:19;:::i;:::-;26868:26;;26907:25;26927:4;26907:19;:25::i;:::-;26899:33;;26715:222;26584:353;;;;;;:::o;26348:231::-;26451:6;26461:1;26456;26451:6;;26450:12;26485:85;26499:6;26492:4;:13;26485:85;;;26523:4;26514:13;;26562:1;26554:4;26547;26542:2;:9;;;;;:::i;:::-;;:16;26541:22;;;;;:::i;:::-;;26534:29;;26485:85;;;26419:156;26348:231;;;:::o;22917:3426::-;22991:10;15724;-1:-1:-1;;;;;23032:30:0;;;;;;:63;;-1:-1:-1;15780:49:0;-1:-1:-1;;;;;23066:29:0;;;23032:63;23024:77;;;;-1:-1:-1;;;23024:77:0;;9835:2:1;23024:77:0;;;9817:21:1;9874:1;9854:18;;;9847:29;-1:-1:-1;;;9892:18:1;;;9885:31;9933:18;;23024:77:0;;;;;;;;;-1:-1:-1;;;;;23148:2:0;23123:27;;;;-1:-1:-1;;;;;23236:41:0;;23233:1;23229:49;23312:9;;;23370:18;23364:25;;23361:1;23357:33;23424:9;;;23482:10;23476:17;;23473:1;23469:25;23528:9;;;23586:6;23580:13;;23577:1;23573:21;23628:9;;;23686:4;23680:11;;23677:1;23673:19;;;23726:9;;;23784:3;23778:10;;23775:1;23771:18;23823:9;;;23875:10;;;23872:1;23868:18;;;23920:9;;;;23965:10;;;23403;;23507;;;23607;;;23705;23802;;;23899;23988;24022:3;24015:10;;24011:75;;24047:3;24041;:9;24031:5;:20;;24027:24;;24011:75;;;24082:3;24076;:9;24066:5;:20;;24062:24;;24011:75;24172:9;;;24167:3;24163:19;;;24197:11;;;;24255:9;;;;24305;;24296:19;;;24330:11;;;24388:9;24438;;24429:19;;;24463:11;;;24521:9;24571;;24562:19;;;24596:11;;;24654:9;24704;;24695:19;;;24729:11;;;24787:9;24837;;24828:19;;;24862:11;;;24920:9;24970;;24961:19;;;24995:11;;;25053:9;25103;;25094:19;;;25128:11;;;25186:9;25236;;25227:19;;;25261:11;;;25319:9;25369;;25360:19;;;25394:11;;;25452:9;25502;;25493:19;;;25527:11;;;25585:9;25635;;25626:19;;;25660:11;;;25718:9;25768;;25759:19;;;25793:11;;;;25851:9;;;;25901;;25892:19;;;;;24172:9;-1:-1:-1;;24110:17:0;;24132:2;24109:25;24233:10;;;;;;;24223:21;24366:10;;;;;;;24356:21;;;;24499:10;;;;;;;24489:21;;;;24632:10;;;;;;;24622:21;;;;24765:10;;;;;;;24755:21;;;;24898:10;;;;;;;24888:21;;;;25031:10;;;;;;;25021:21;25164:10;;;;;;;25154:21;25297:10;;;;;;;25287:21;25430:10;;;;;;;25420:21;25563:10;;;;;;;25553:21;25696:10;;;;;;;25686:21;25829:10;;;;;;;25819:21;25962:10;;;;;;;25952:21;26017:24;26009:32;;-1:-1:-1;;26072:53:0;;24124:3;26071:62;;;;26178:39;26162:55;;26161:64;;26241:17;;;;;;;;;:92;;26302:12;-1:-1:-1;;;;;26271:43:0;:27;26291:6;26271:19;:27::i;:::-;-1:-1:-1;;;;;26271:43:0;;;:62;;26326:7;26241:92;;26271:62;26317:6;26241:92;;;26261:7;26241:92;26234:99;22917:3426;-1:-1:-1;;;;;;;;;22917:3426:0:o;20697:2215::-;20761:20;20804:15;20829:1;20822:4;:8;;;:57;;20873:4;20866:12;;20822:57;;;20849:4;20842:12;;20841:13;;20822:57;20804:75;-1:-1:-1;15669:9:0;20893:36;;;20885:50;;;;-1:-1:-1;;;20885:50:0;;10164:2:1;20885:50:0;;;10146:21:1;10203:1;10183:18;;;10176:29;-1:-1:-1;;;10221:18:1;;;10214:31;10262:18;;20885:50:0;9962:324:1;20885:50:0;20943:13;20959:7;20969:3;20959:13;20976:1;20959:18;:93;;-1:-1:-1;;;20959:93:0;;;20980:34;20959:93;20943:109;;;-1:-1:-1;21072:3:0;21062:13;;:18;21058:83;;21099:34;21091:42;21138:3;21090:51;21058:83;21161:3;21151:13;;:18;21147:83;;21188:34;21180:42;21227:3;21179:51;21147:83;21250:3;21240:13;;:18;21236:83;;21277:34;21269:42;21316:3;21268:51;21236:83;21339:4;21329:14;;:19;21325:84;;21367:34;21359:42;21406:3;21358:51;21325:84;21429:4;21419:14;;:19;21415:84;;21457:34;21449:42;21496:3;21448:51;21415:84;21519:4;21509:14;;:19;21505:84;;21547:34;21539:42;21586:3;21538:51;21505:84;21609:4;21599:14;;:19;21595:84;;21637:34;21629:42;21676:3;21628:51;21595:84;21699:5;21689:15;;:20;21685:85;;21728:34;21720:42;21767:3;21719:51;21685:85;21790:5;21780:15;;:20;21776:85;;21819:34;21811:42;21858:3;21810:51;21776:85;21881:5;21871:15;;:20;21867:85;;21910:34;21902:42;21949:3;21901:51;21867:85;21972:5;21962:15;;:20;21958:85;;22001:34;21993:42;22040:3;21992:51;21958:85;22063:6;22053:16;;:21;22049:86;;22093:34;22085:42;22132:3;22084:51;22049:86;22155:6;22145:16;;:21;22141:86;;22185:34;22177:42;22224:3;22176:51;22141:86;22247:6;22237:16;;:21;22233:86;;22277:34;22269:42;22316:3;22268:51;22233:86;22339:6;22329:16;;:21;22325:86;;22369:34;22361:42;22408:3;22360:51;22325:86;22431:7;22421:17;;:22;22417:86;;22462:33;22454:41;22500:3;22453:50;22417:86;22523:7;22513:17;;:22;22509:85;;22554:32;22546:40;22591:3;22545:49;22509:85;22614:7;22604:17;;:22;22600:83;;22645:30;22637:38;22680:3;22636:47;22600:83;22703:7;22693:17;;:22;22689:78;;22734:25;22726:33;22764:3;22725:42;22689:78;22786:1;22779:4;:8;;;22775:47;;;22817:5;-1:-1:-1;;22797:25:0;;;;;:::i;:::-;;22789:33;;22775:47;22879:7;22870:5;:17;:22;:30;;22899:1;22870:30;;;22895:1;22870:30;22853:48;;22863:2;22854:5;:11;;22853:48;22830:72;;20788:2120;;20697:2215;;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1714:456::-;1791:6;1799;1807;1860:2;1848:9;1839:7;1835:23;1831:32;1828:52;;;1876:1;1873;1866:12;1828:52;1915:9;1902:23;1934:31;1959:5;1934:31;:::i;:::-;1984:5;-1:-1:-1;2041:2:1;2026:18;;2013:32;2054:33;2013:32;2054:33;:::i;:::-;1714:456;;2106:7;;-1:-1:-1;;;2160:2:1;2145:18;;;;2132:32;;1714:456::o;2364:794::-;2452:6;2460;2468;2476;2529:2;2517:9;2508:7;2504:23;2500:32;2497:52;;;2545:1;2542;2535:12;2497:52;2584:9;2571:23;2603:31;2628:5;2603:31;:::i;:::-;2653:5;-1:-1:-1;2705:2:1;2690:18;;2677:32;;-1:-1:-1;2760:2:1;2745:18;;2732:32;2783:18;2813:14;;;2810:34;;;2840:1;2837;2830:12;2810:34;2878:6;2867:9;2863:22;2853:32;;2923:7;2916:4;2912:2;2908:13;2904:27;2894:55;;2945:1;2942;2935:12;2894:55;2985:2;2972:16;3011:2;3003:6;3000:14;2997:34;;;3027:1;3024;3017:12;2997:34;3072:7;3067:2;3058:6;3054:2;3050:15;3046:24;3043:37;3040:57;;;3093:1;3090;3083:12;3040:57;2364:794;;;;-1:-1:-1;;3124:2:1;3116:11;;-1:-1:-1;;;2364:794:1:o;3163:247::-;3222:6;3275:2;3263:9;3254:7;3250:23;3246:32;3243:52;;;3291:1;3288;3281:12;3243:52;3330:9;3317:23;3349:31;3374:5;3349:31;:::i;:::-;3399:5;3163:247;-1:-1:-1;;;3163:247:1:o;3415:388::-;3483:6;3491;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;3599:9;3586:23;3618:31;3643:5;3618:31;:::i;:::-;3668:5;-1:-1:-1;3725:2:1;3710:18;;3697:32;3738:33;3697:32;3738:33;:::i;:::-;3790:7;3780:17;;;3415:388;;;;;:::o;3808:127::-;3869:10;3864:3;3860:20;3857:1;3850:31;3900:4;3897:1;3890:15;3924:4;3921:1;3914:15;3940:128;4007:9;;;4028:11;;;4025:37;;;4042:18;;:::i;4073:559::-;-1:-1:-1;;;;;4286:32:1;;4268:51;;4350:2;4335:18;;4328:34;;;4398:2;4393;4378:18;;4371:30;;;4417:18;;4410:34;;;4437:6;4487;4481:3;4466:19;;4453:49;4552:1;4522:22;;;4546:3;4518:32;;;4511:43;;;;4615:2;4594:15;;;-1:-1:-1;;4590:29:1;4575:45;4571:55;;4073:559;-1:-1:-1;;;4073:559:1:o;4637:277::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4805:9;4799:16;4858:5;4851:13;4844:21;4837:5;4834:32;4824:60;;4880:1;4877;4870:12;4919:251;4989:6;5042:2;5030:9;5021:7;5017:23;5013:32;5010:52;;;5058:1;5055;5048:12;5010:52;5090:9;5084:16;5109:31;5134:5;5109:31;:::i;5752:245::-;5831:6;5839;5892:2;5880:9;5871:7;5867:23;5863:32;5860:52;;;5908:1;5905;5898:12;5860:52;-1:-1:-1;;5931:16:1;;5987:2;5972:18;;;5966:25;5931:16;;5966:25;;-1:-1:-1;5752:245:1:o;6195:1218::-;6413:13;;-1:-1:-1;;;;;1463:31:1;1451:44;;6381:3;6366:19;;6485:4;6477:6;6473:17;6467:24;6500:54;6548:4;6537:9;6533:20;6519:12;-1:-1:-1;;;;;1463:31:1;1451:44;;1397:104;6500:54;;6603:4;6595:6;6591:17;6585:24;6618:55;6667:4;6656:9;6652:20;6636:14;6078:8;6067:20;6055:33;;6002:92;6618:55;;6722:4;6714:6;6710:17;6704:24;6737:54;6785:4;6774:9;6770:20;6754:14;6174:1;6163:20;6151:33;;6099:91;6737:54;;6840:4;6832:6;6828:17;6822:24;6855:54;6903:4;6892:9;6888:20;6872:14;6174:1;6163:20;6151:33;;6099:91;6855:54;;6965:4;6957:6;6953:17;6947:24;6940:4;6929:9;6925:20;6918:54;7028:4;7020:6;7016:17;7010:24;7003:4;6992:9;6988:20;6981:54;7091:4;7083:6;7079:17;7073:24;7066:4;7055:9;7051:20;7044:54;7117:6;7177:2;7169:6;7165:15;7159:22;7154:2;7143:9;7139:18;7132:50;;7201:6;7256:2;7248:6;7244:15;7238:22;7269:54;7319:2;7308:9;7304:18;7288:14;-1:-1:-1;;;;;1463:31:1;1451:44;;1397:104;7269:54;-1:-1:-1;;7342:6:1;7390:15;;;7384:22;7364:18;;;;7357:50;6195:1218;:::o;7418:489::-;7515:6;7523;7531;7539;7592:3;7580:9;7571:7;7567:23;7563:33;7560:53;;;7609:1;7606;7599:12;7560:53;7638:9;7632:16;7622:26;;7691:2;7680:9;7676:18;7670:25;-1:-1:-1;;;;;7728:5:1;7724:46;7717:5;7714:57;7704:85;;7785:1;7782;7775:12;7704:85;7853:2;7838:18;;7832:25;7897:2;7882:18;;;7876:25;7418:489;;7808:5;;-1:-1:-1;7418:489:1;-1:-1:-1;;;7418:489:1:o;8645:184::-;8715:6;8768:2;8756:9;8747:7;8743:23;8739:32;8736:52;;;8784:1;8781;8774:12;8736:52;-1:-1:-1;8807:16:1;;8645:184;-1:-1:-1;8645:184:1:o;8834:127::-;8895:10;8890:3;8886:20;8883:1;8876:31;8926:4;8923:1;8916:15;8950:4;8947:1;8940:15;8966:120;9006:1;9032;9022:35;;9037:18;;:::i;:::-;-1:-1:-1;9071:9:1;;8966:120::o;9091:168::-;9164:9;;;9195;;9212:15;;;9206:22;;9192:37;9182:71;;9233:18;;:::i;9264:166::-;9294:1;9335;9332;9321:16;9356:3;9346:37;;9363:18;;:::i;:::-;9420:3;9416:1;9413;9402:16;9397:27;9392:32;;;9264:166;;;;:::o;9435:193::-;9533:1;9522:16;;;9504;;;;9500:39;-1:-1:-1;;9554:23:1;;9589:8;9579:19;;9551:48;9548:74;;;9602:18;;:::i

Swarm Source

ipfs://d4996163bb350842839b008fe49e9d1e61a43bef38996ab98d1324871b550481
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.