ETH Price: $1,947.34 (-0.25%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw LOG125840722021-06-06 23:55:111730 days ago1623023711IN
0xe8dC1E09...E159ffB56
0 ETH0.0009676111
Withdraw LP125840382021-06-06 23:48:321730 days ago1623023312IN
0xe8dC1E09...E159ffB56
0 ETH0.0006535411
Withdraw LP120997622021-03-24 5:38:171805 days ago1616564297IN
0xe8dC1E09...E159ffB56
0 ETH0.00586978122
Withdraw LOG120997622021-03-24 5:38:171805 days ago1616564297IN
0xe8dC1E09...E159ffB56
0 ETH0.01616475122
Withdraw LP118661032021-02-16 6:09:481841 days ago1613455788IN
0xe8dC1E09...E159ffB56
0 ETH0.0060254791
Withdraw LP116647292021-01-16 6:41:281872 days ago1610779288IN
0xe8dC1E09...E159ffB56
0 ETH0.002412441.8
Withdraw LOG116646502021-01-16 6:23:521872 days ago1610778232IN
0xe8dC1E09...E159ffB56
0 ETH0.0051645444.00000123
Withdraw LP116646372021-01-16 6:19:481872 days ago1610777988IN
0xe8dC1E09...E159ffB56
0 ETH0.0029139444
Withdraw LP115948582021-01-05 13:42:021882 days ago1609854122IN
0xe8dC1E09...E159ffB56
0 ETH0.0054216481.8807
Withdraw LP114980002020-12-21 16:58:131897 days ago1608569893IN
0xe8dC1E09...E159ffB56
0 ETH0.0045011478
Withdraw LP114931162020-12-20 23:08:351898 days ago1608505715IN
0xe8dC1E09...E159ffB56
0 ETH0.0028856550
Withdraw LOG114907552020-12-20 14:34:421898 days ago1608474882IN
0xe8dC1E09...E159ffB56
0 ETH0.0067689261
Withdraw LOG114609522020-12-16 0:43:521903 days ago1608079432IN
0xe8dC1E09...E159ffB56
0 ETH0.0056393958
Withdraw LOG114344932020-12-11 22:55:121907 days ago1607727312IN
0xe8dC1E09...E159ffB56
0 ETH0.0035391848
Withdraw LP114344182020-12-11 22:36:471907 days ago1607726207IN
0xe8dC1E09...E159ffB56
0 ETH0.0021356550
Withdraw LP114209402020-12-09 20:46:311909 days ago1607546791IN
0xe8dC1E09...E159ffB56
0 ETH0.0015891324
Withdraw LOG114107812020-12-08 7:22:471911 days ago1607412167IN
0xe8dC1E09...E159ffB56
0 ETH0.0027827825.1
Withdraw LP114107772020-12-08 7:22:121911 days ago1607412132IN
0xe8dC1E09...E159ffB56
0 ETH0.0021854533
Withdraw LP114069352020-12-07 17:08:371911 days ago1607360917IN
0xe8dC1E09...E159ffB56
0 ETH0.0012118421
Withdraw LOG114049192020-12-07 9:36:481912 days ago1607333808IN
0xe8dC1E09...E159ffB56
0 ETH0.0044347240
Withdraw LP114049192020-12-07 9:36:481912 days ago1607333808IN
0xe8dC1E09...E159ffB56
0 ETH0.0029796345
Withdraw LP114034862020-12-07 4:29:151912 days ago1607315355IN
0xe8dC1E09...E159ffB56
0 ETH0.0046349870
Withdraw LP114021092020-12-06 23:23:191912 days ago1607296999IN
0xe8dC1E09...E159ffB56
0 ETH0.0013849624
Withdraw LOG113999502020-12-06 15:17:081912 days ago1607267828IN
0xe8dC1E09...E159ffB56
0 ETH0.0017941121.8
Withdraw LOG113953052020-12-05 22:23:321913 days ago1607207012IN
0xe8dC1E09...E159ffB56
0 ETH0.0033924523.00000145
View all transactions

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-113577202020-11-30 3:47:561919 days ago1606708076
0xe8dC1E09...E159ffB56
0.50144515 ETH
-113577202020-11-30 3:47:561919 days ago1606708076
0xe8dC1E09...E159ffB56
0.49855484 ETH
-113574762020-11-30 2:56:441919 days ago1606705004
0xe8dC1E09...E159ffB56
0.12481105 ETH
-113574762020-11-30 2:56:441919 days ago1606705004
0xe8dC1E09...E159ffB56
0.12518894 ETH
-113567052020-11-30 0:01:591919 days ago1606694519
0xe8dC1E09...E159ffB56
0.50058101 ETH
-113567052020-11-30 0:01:591919 days ago1606694519
0xe8dC1E09...E159ffB56
0.49941898 ETH
-113564342020-11-29 23:02:251919 days ago1606690945
0xe8dC1E09...E159ffB56
17.3 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LogVault

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-11-22
*/

pragma solidity >=0.6.2;


///////////////////////////////////////////////////////////////////////
///							   Libraries							///
///////////////////////////////////////////////////////////////////////
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;}

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;}

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {return 0;}
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;}

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;}

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;}
}


library Math {
	function max(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? y : x;
    }
	
	function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}


///////////////////////////////////////////////////////////////////////
///							  Interfaces							///
///////////////////////////////////////////////////////////////////////
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
	
	function addInitialLiquidity() external payable;
}


interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}


interface IUniswapV2Router02 {
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

interface IApprover {
    function viewTotalExpLpBalance() external view returns (uint256);
    function approveStake(address who, uint256 lpAmount) external returns (uint256);
    function doRefund(address who, uint256 refundAmount) external;
}



///////////////////////////////////////////////////////////////////////
///							Vault Contract							///
///////////////////////////////////////////////////////////////////////
contract LogVault {
    using SafeMath for uint256;

	address internal immutable FACTORY;
	address internal immutable UNIROUTER;
    address internal immutable WETH;
	address internal immutable LOG;
	address internal immutable LOGxWETH;
	address internal immutable APPROVER;
	address internal immutable ADMIN_ADDRESS;

    constructor(address _FACTORY, address _UNIROUTER, address _LOG, address _APPROVER, address _LOGxWETH) public {
        FACTORY = _FACTORY;
        UNIROUTER = _UNIROUTER;
        WETH = IUniswapV2Router02(_UNIROUTER).WETH();
        LOG = _LOG;
        APPROVER = _APPROVER;
		LOGxWETH = _LOGxWETH;
		ADMIN_ADDRESS = msg.sender;
    }

	//store values of ln(x) multiplied by 1e6
	uint[26] lnValues = [0, 693147, 1098612, 1386294, 1609437, 1791759, 1945910, 2079441, 2197224, 2302585,
						2397895, 2484906, 2564949, 2639057, 270805, 2772588, 2833213, 2890371, 2944438, 2995732,
						3044522, 3091042, 3135494, 3178053, 3218875, 3258096];



	//initial liquidity info
	uint public constant 	maxContributionETH 		= 	2000000000000000000; 	    //2 ETH
	uint public constant 	initialLiquidityETH 	= 	50000000000000000000; 	    //50 ETH
	uint private constant 	initialLiquidityLOG 	= 	27182000000000000000000; 	//27182 LOG

	uint private 	stakingStartTime 		= 	27182818284;
	bool public 	allowStake 				= 	false;
	bool public 	liquidityAdded 			= 	false;

	//vault reward info
	uint256 private pendingRewards;
	uint256 public rewardAmount;

	uint256[24] public hourlyRewardAmount;
	uint256[24] public hourlyRewardTime;

	uint256 public totalPoints;
	uint256 public logPerPoint;

	//dev fee, 4.5% of rewards
	uint256 private devFee = 45;
	uint256 private pendingDevRewards;

	//user info
	struct UserInfo {
		uint256 timePooled;
		uint256 lockupSeconds;
		uint256 lockupWeeks;

		uint256 ETHContributed;
		uint256 ExpLpContributed;

		uint256 LPTokenBalance;
		uint256 points;
		uint256 logDebt;

		uint256 logReward;
	}
	mapping(address => UserInfo) public userInfo;

	//info about phase 1 ETH stakers
	address[] public ethStaker;
	mapping(address => bool) public stakerInEthList;
    //info about phase 1 EXP LP stakers
	address[] public expStaker;
	mapping(address => bool) public stakerInExpList;

    receive() external payable {
		if(msg.sender != UNIROUTER){
			stakeETH(1);
		}
    }

    event AssignLP(address indexed owner, uint userLogLp);

    event DepositETH(address indexed owner, uint amount, uint lockup, uint lpTokenGot);
    event DepositLP(address indexed owner, uint lockup, uint lpAmount);
    event DepositExpLP(address indexed owner, uint lockup, uint lpAmount);

    event WithdrawLP(address indexed owner, uint amount);
    event WithdrawLOG(address indexed caller, address indexed owner, uint amount);


///////////////////////////////////////////////////////////////////////
///							Admin functions							///
///////////////////////////////////////////////////////////////////////

	//ADMIN-function: allow staking
	function allowStaking() public {
	    require(msg.sender == ADMIN_ADDRESS, "Caller is not admin.");
	    allowStake = true;
	}


	//ADMIN-function: create uniswap pair
    function addInitialLiquidity() public {
		require(!liquidityAdded, "Uniswap pair has already been created.");
		require(msg.sender == ADMIN_ADDRESS, "Caller is not admin.");

		uint256 initialETH = address(this).balance;

		//add liquidity to uniswap pair
        IERC20(LOG).addInitialLiquidity{value: initialETH}();
		liquidityAdded = true;

		//assign LP by staking ETH
		uint256 initialLP = Math.sqrt(initialLiquidityLOG.mul(initialETH)).div(2);
		uint256 eth2logLpTotal = initialLP.mul(85).div(100);

		UserInfo storage userEth;
		uint256 ethLpShare;
		uint256 ethLpTokenGot;
		uint256 i;
		for (i = 0; i < ethStaker.length; i++) {

			//get staker info
			userEth = userInfo[ethStaker[i]];

			ethLpShare = uint(1e12).mul(userEth.ETHContributed).div(initialETH);
			ethLpTokenGot = eth2logLpTotal.mul(ethLpShare).div(1e12);

			if (ethLpTokenGot > 0) {
				updateUser(ethStaker[i], userEth.lockupWeeks, ethLpTokenGot);
				emit AssignLP(ethStaker[i], ethLpTokenGot);
			}
		}

		//assign LP by staking EXP LP
		//get total LP amounts
		uint256 expLpTotal = IApprover(APPROVER).viewTotalExpLpBalance();
		uint256 exp2logLpTotal = initialLP.mul(15).div(100);

		UserInfo storage userExp;
		uint256 expLpShare;
		uint256 expLpTokenGot;
		uint256 j;
		for (j = 0; j < expStaker.length; j++) {

			//get staker info
			userExp = userInfo[expStaker[j]];

			expLpShare = uint(1e12).mul(userExp.ExpLpContributed).div(expLpTotal);
			expLpTokenGot = exp2logLpTotal.mul(expLpShare).div(1e12);

			if (expLpTokenGot > 0) {
				updateUser(expStaker[j], userExp.lockupWeeks, expLpTokenGot);
				emit AssignLP(expStaker[j], expLpTokenGot);
			}
		}

		//set start time and allow stake again
		stakingStartTime = block.timestamp;
		allowStake = true;
    }



///////////////////////////////////////////////////////////////////////
///							Miscellaneous							///
///////////////////////////////////////////////////////////////////////


	//function to send ether
	function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


	//calc optimal fraction of ETH to swap for token based on 0.3% Uniswap fee, 9 decimals precision
	//a amount of ether available to buy
	//b amount of ether in liquidity pool
	function calcEthBuy(uint a, uint b) internal pure returns(uint fraction) {
		uint sqroot = Math.sqrt((a.mul(a).mul(9)).add(b.mul(a).mul(4e6)).add(b.mul(b).mul(4e6)));
		uint x = (sqroot.add(a.mul(3)).sub(b.mul(2000))).mul(1e18).div(a.mul(2000));

		return x.mul(a).div(1e18);
	}


	function calcLockupMulti(uint256 lockupWeeks) internal view returns(uint256 lockupMulti){
		//get lockup multiplier
		lockupMulti = lockupWeeks > 26 ? lnValues[25] : lnValues[lockupWeeks.sub(1)];
		lockupMulti = lockupMulti.add(1e6);
	}


	//claim refund of initial contribution if no uniswap pair is created within 1 week
	function refundInitial() public {
		require(!liquidityAdded, "Uniswap pair created, no refunds possible.");

		//get user info
		UserInfo storage user = userInfo[msg.sender];
		uint refundAmount = user.ETHContributed;

		require(block.timestamp >= user.timePooled + 9  days, "Refund will be possible 9 days after your contribution.");
		require(refundAmount > 0, "You have not contributed anything.");

		//update values
		user.timePooled = 0;
		user.lockupSeconds = 0;
		user.lockupWeeks = 0;
		user.LPTokenBalance = 0;
		user.ETHContributed = 0;
		user.points = 0;

		//send ETH back to staker
		sendValue(msg.sender, refundAmount);
	}

	//claim refund of initial EXP LP contribution if no uniswap pair is created within 1 week
	function refundInitialLP() public {
		require(!liquidityAdded, "Uniswap pair created, no refunds possible.");

		//get user info
		UserInfo storage user = userInfo[msg.sender];
		uint refundAmount = user.ExpLpContributed;

		require(block.timestamp >= user.timePooled + 9 days, "Refund will be possible 9 days after your contribution.");
		require(refundAmount > 0, "You have not contributed anything.");

		//update values
		user.timePooled = 0;
		user.lockupSeconds = 0;
		user.lockupWeeks = 0;
		user.LPTokenBalance = 0;
		user.points = 0;

		user.ExpLpContributed = 0;

		//send LP back to staker
		IApprover(APPROVER).doRefund(msg.sender, refundAmount);
	}



///////////////////////////////////////////////////////////////////////
///							 Vault Logic							///
///////////////////////////////////////////////////////////////////////

	//function to keep track of pending rewards, called on token transfer
    function addRewards() public {
        uint256 diff = IERC20(LOG).balanceOf(address(this)).sub(rewardAmount);
        pendingRewards = pendingRewards.add(diff);
        updateRewards();
    }


	//update pending rewards and current LOG per point
	function updateRewards() internal {

		if (pendingRewards > 0) {
			if (totalPoints != 0) {
			    //update total reward amount
			    rewardAmount = rewardAmount.add(pendingRewards);

			    uint256 logDevFee = pendingRewards.mul(devFee).div(1000);
			    uint256 logReward = pendingRewards.sub(logDevFee);

				//get current hour
				uint256 hour = (block.timestamp.div(1 hours)).mod(24);
				//reset hourly rewards if it is a new day
				if (block.timestamp >= hourlyRewardTime[hour].add(1 days)) {
					hourlyRewardTime[hour] = block.timestamp;
					hourlyRewardAmount[hour] = 0;
				}
				//update hourly rewards
				hourlyRewardAmount[hour] = hourlyRewardAmount[hour].add(logReward);

				pendingDevRewards = pendingDevRewards.add(logDevFee);
				logPerPoint = logPerPoint.add(logReward.mul(1e12).div(totalPoints));

				//reset pending rewards
				pendingRewards = 0;
			}
		}
	}


	//update user information
	function updateUser(address who, uint256 lockup, uint256 lpTokenGot) internal {
		UserInfo storage user = userInfo[who];

		//store time information
        user.timePooled = block.timestamp;

		//if msg.sender is already staking and new lockup time is higher than previous one, replace it
		if (user.lockupSeconds < lockup.mul(1 weeks)) {
			user.lockupSeconds = lockup.mul(1 weeks);
			user.lockupWeeks = lockup;
		}

		//get lockup multiplier
		uint256 lockupMulti = calcLockupMulti(user.lockupWeeks);

		//assign LP tokens
        user.LPTokenBalance = user.LPTokenBalance.add(lpTokenGot);

		//assign points based on LP and lockup time
		uint256 userPointsBefore = user.points;
        user.points = user.LPTokenBalance.mul(lockupMulti).div(1e6);
		totalPoints = totalPoints.add(user.points).sub(userPointsBefore);

		//remember log debt to calculate future rewards
		user.logDebt = user.points.mul(logPerPoint).div(1e12);
	}


	//update pending user rewards
	function updatePending(address who) internal {
		UserInfo storage user = userInfo[who];

		//assign pending log rewards
		uint256 pendingLog = user.points.mul(logPerPoint).div(1e12).sub(user.logDebt);
		user.logReward = user.logReward.add(pendingLog);
	}



///////////////////////////////////////////////////////////////////////
///							Stake functions							///
///////////////////////////////////////////////////////////////////////

	//stake LP tokens
	function stakeLP(uint256 lockup, uint256 amount) public {
		require(lockup >= 1, "You must lock liquidity for at least one week.");
		require(lockup <= 26, "Maximum lockup is 26 weeks.");
		require(amount > 0, "You need to stake at least 1 wei.");

		//if uniswap pair created stake normally
		if (liquidityAdded) {
			updateRewards();
			updatePending(msg.sender);
			stakeLogLP(lockup, amount);
		} else {
			stakeExpLP(lockup, amount);
		}
	}


	//stake EXP LP pre uniswap pair creation
	function stakeExpLP(uint256 lockup, uint256 lpAmount) internal {
		UserInfo storage user = userInfo[msg.sender];

		//call Approver contract to check allowance
		uint256 validAmount = IApprover(APPROVER).approveStake(msg.sender, lpAmount);

		user.ExpLpContributed = user.ExpLpContributed.add(validAmount);

		//remember user if not in expStaker list yet
		if (!stakerInExpList[msg.sender]) {
		    expStaker.push(msg.sender);
		    stakerInExpList[msg.sender] = true;
		}

		//update user variables
		updateUser(msg.sender, lockup, 0);

		emit DepositExpLP(msg.sender, lockup, validAmount);
	}


	//stake LOG LP post uniswap pair creation
	function stakeLogLP(uint256 lockup, uint256 lpAmount) internal {

		//get lp from user - lp tokens need to be approved by user first
		require(IERC20(LOGxWETH).transferFrom(msg.sender, address(this), lpAmount), "Token transfer failed.");

		//update user variables
		updateUser(msg.sender, lockup, lpAmount);

		emit DepositLP(msg.sender, lockup, lpAmount);
	}


	//stake ETH
	function stakeETH(uint256 lockup) public payable {
		require(allowStake, "Staking has not been activated yet.");
		require(lockup >= 1, "You must lock liquidity for at least one week.");
		require(lockup <= 26, "Maximum lockup is 26 weeks.");
		require(msg.value > 1e16, "Minimum staking amount: 0.1 ETH");

		uint lpTokenGot;

		//if uniswap pair created stake normally
		if (liquidityAdded) {
			updateRewards();
			updatePending(msg.sender);
			lpTokenGot = stakeUniswap();
		} else {
			stakeInitial();
		}

		//update user variables
		updateUser(msg.sender, lockup, lpTokenGot);

		emit DepositETH(msg.sender, msg.value, lockup, lpTokenGot);
	}


	//staking pre uniswap pair creation
	function stakeInitial() internal {
		UserInfo storage user = userInfo[msg.sender];
		require(user.ETHContributed < maxContributionETH, "You cannot contribute more than 2 ETH during initial staking.");

		uint currentEthBalance = (address(this).balance).sub(msg.value);
		require(currentEthBalance < initialLiquidityETH, "Initial Liquidity Target reached. Please wait for Uniswap pair creation.");

		uint validAmount;
		//maximum amount to be contributed
		uint maxAmount = Math.min(initialLiquidityETH.sub(currentEthBalance), maxContributionETH.sub(user.ETHContributed));


		//check total contribution
		if (msg.value > maxAmount) {
			validAmount = maxAmount;
			//assign contributed ETH
			user.ETHContributed = user.ETHContributed.add(validAmount);
			//return remaining eth
			sendValue(msg.sender, (msg.value).sub(validAmount));
		} else {
			validAmount = msg.value;
			//assign contributed ETH
			user.ETHContributed = user.ETHContributed.add(validAmount);
		}

		//disable staking if target is reached
		if (address(this).balance >= initialLiquidityETH) {
		    allowStake = false;
		}

		//remember user if not in ethStaker list yet
		if (!stakerInEthList[msg.sender]) {
		    ethStaker.push(msg.sender);
		    stakerInEthList[msg.sender] = true;
		}
	}


	//staking post uniswap pair creation
    function stakeUniswap() internal returns (uint256){

		//get liquidity pool information
        uint ethAmount = IERC20(WETH).balanceOf(LOGxWETH); //WETH in Uniswap

        //get current LOG amount held by vault
        uint logAmountBefore = IERC20(LOG).balanceOf(address(this));

		//calc optimal amount of ETH to
		uint ethBuy = calcEthBuy(address(this).balance, ethAmount);

		//define swap path: ETH->WETH->LOG
		address[] memory path = new address[](2);
		path[0] = WETH;
		path[1] = LOG;
		//swap ETH for LOG
		IUniswapV2Router02(UNIROUTER).swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethBuy}(1, path, address(this), block.timestamp + 30 minutes);

		//get amount of LOG bought
        uint logAmount = IERC20(LOG).balanceOf(address(this)).sub(logAmountBefore);

		//if buy of LOG was successfull, add liquidity
		require(logAmount > 0, "LOG Buy was not successfull.");
		require(IERC20(LOG).approve(UNIROUTER, logAmount), "Approve failed.");

		( , , uint lpTokenGot) = IUniswapV2Router02(UNIROUTER).addLiquidityETH{value: address(this).balance}(LOG, logAmount, 1, 1, address(this), block.timestamp + 15 minutes);

		return lpTokenGot;
    }



///////////////////////////////////////////////////////////////////////
///						Withdraw functions							///
///////////////////////////////////////////////////////////////////////

	//Withdraw LP tokens
    function withdrawLP(uint amount) public {
		UserInfo storage user = userInfo[msg.sender];

        require(Math.max(user.timePooled, stakingStartTime) + user.lockupSeconds <= block.timestamp, "You must wait longer.");
		require(user.LPTokenBalance >= amount, "Amount needs to be less than or equal to what is available.");
		require(amount > 0, "You need to withdraw at least 1 wei.");

		//update vault rewards
		updateRewards();
		//update user rewards
		updatePending(msg.sender);

        //update LPTokenBalance
        user.LPTokenBalance = user.LPTokenBalance.sub(amount);

		// update points
		uint256 lockupMulti = calcLockupMulti(user.lockupWeeks);
		uint256 userPointsBefore = user.points;
        user.points = user.LPTokenBalance.mul(lockupMulti).div(1000000);
		totalPoints = totalPoints.sub(userPointsBefore.sub(user.points));

        //send LP to user
        require(IERC20(LOGxWETH).transfer(msg.sender, amount), "LP Token transfer failed.");

		//update user logDebt and reset lockup time
		user.logDebt = user.points.mul(logPerPoint).div(1e12);
		user.lockupSeconds = 0;

		emit WithdrawLP(msg.sender, amount);
    }


	//Withdraw rewarded LOG, can be called by anyone for anyone to avoid LOG getting stuck in the Vault
    function withdrawLOG(address who) public {
		UserInfo storage user = userInfo[who];

		//update vault rewards
		updateRewards();
		//update user rewards
		updatePending(who);

		uint256 amount = user.logReward;
		require(amount > 0, "Withdraw amount needs to be at least 1 wei.");

		//transfer all LOG rewards to user
		user.logReward = 0;
		rewardAmount = rewardAmount.sub(amount);
		IERC20(LOG).transfer(who, amount);

		//update user logDebt
		user.logDebt = user.points.mul(logPerPoint).div(1e12);

		emit WithdrawLOG(msg.sender, who, amount);
    }


	//Withdraw Dev Reward, can be called by anyone to avoid LOG getting stuck in the Vault
	function withdrawDevReward() public {
		require(pendingDevRewards > 0, "Withdraw amount needs to be at least 1 wei.");

		//transfer all LOG to ADMIN_ADDRESS
		uint256 amount = pendingDevRewards;
		pendingDevRewards = 0;
		rewardAmount = rewardAmount.sub(amount);
		IERC20(LOG).transfer(ADMIN_ADDRESS, amount);
	}



///////////////////////////////////////////////////////////////////////
///							View functions							///
///////////////////////////////////////////////////////////////////////

	//get total value locked (TVL)
    function viewTotalValueLocked() public view returns (uint, uint) {

        uint wethPool = IERC20(WETH).balanceOf(LOGxWETH); //WETH in uniswap pool
        uint logPool = IERC20(LOG).balanceOf(LOGxWETH); //LOG in uniswap pool
		uint lpTokenAmount = IERC20(LOGxWETH).balanceOf(address(this)); //lp token held by contract

		uint wethShare = wethPool.mul(lpTokenAmount).div(IERC20(LOGxWETH).totalSupply());
		uint logShare = logPool.mul(lpTokenAmount).div(IERC20(LOGxWETH).totalSupply());

        return (wethShare, logShare);
    }


	//get ETH/LOG price
	function viewPoolInfo() public view returns (uint, uint) {
		uint wethPool = IERC20(WETH).balanceOf(LOGxWETH); //WETH in uniswap pool
        uint logPool = IERC20(LOG).balanceOf(LOGxWETH); //LOG in uniswap pool

		return (wethPool, logPool);
	}


	//get token release time
	function viewTokenReleaseTime(address who) public view returns (uint) {
		UserInfo storage user = userInfo[who];

		if (user.lockupSeconds == 0) {
		    return 0;
		} else {
		    return (Math.max(user.timePooled, stakingStartTime) + user.lockupSeconds);
		}
	}


	//get user LOG amount
	function viewUserLogAmount(address who) public view returns (uint) {
	    UserInfo storage user = userInfo[who];

		uint256 pendingLog = user.points.mul(logPerPoint).div(1e12).sub(user.logDebt);
		return user.logReward.add(pendingLog);
	}


	//get reward of past 24h
	function view24HourRewards() public view returns (uint) {
		uint256 cumulativeRewards;
		for (uint256 i=0; i < hourlyRewardAmount.length; i++) {
			cumulativeRewards = cumulativeRewards.add(hourlyRewardAmount[i]);
		}
		return cumulativeRewards;
	}


	//get reward of past 24h
	function getMod(uint256 num, uint256 modNum) public pure returns (uint) {
		return num.mod(modNum);
	}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_FACTORY","type":"address"},{"internalType":"address","name":"_UNIROUTER","type":"address"},{"internalType":"address","name":"_LOG","type":"address"},{"internalType":"address","name":"_APPROVER","type":"address"},{"internalType":"address","name":"_LOGxWETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"userLogLp","type":"uint256"}],"name":"AssignLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockup","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenGot","type":"uint256"}],"name":"DepositETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"lockup","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"DepositExpLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"lockup","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"DepositLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawLOG","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawLP","type":"event"},{"inputs":[],"name":"addInitialLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ethStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"expStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"modNum","type":"uint256"}],"name":"getMod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hourlyRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hourlyRewardTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialLiquidityETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logPerPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxContributionETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundInitial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundInitialLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockup","type":"uint256"}],"name":"stakeETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockup","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerInEthList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerInExpList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"timePooled","type":"uint256"},{"internalType":"uint256","name":"lockupSeconds","type":"uint256"},{"internalType":"uint256","name":"lockupWeeks","type":"uint256"},{"internalType":"uint256","name":"ETHContributed","type":"uint256"},{"internalType":"uint256","name":"ExpLpContributed","type":"uint256"},{"internalType":"uint256","name":"LPTokenBalance","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"logDebt","type":"uint256"},{"internalType":"uint256","name":"logReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"view24HourRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewPoolInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"viewTokenReleaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalValueLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"viewUserLogAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDevReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"withdrawLOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6104a06040526000610160818152620a939b610180526210c3746101a052621527366101c05262188edd6101e052621b570f61020052621db13661022052621fbad161024052622186e8610260526223227961028052622496c76102a0526225eaaa6102c052622723556102e052622844d161030052620421d561032052622a4e6c61034052622b3b3d61036052622c1a8361038052622cedb66103a052622db6146103c052622e74aa6103e052622f2a6261040052622fd8066104205262307e456104405262311dbb610460526231b6f061048052620000e39190601a62000216565b5064065438e3ec601a55601b805461ffff19169055602d6050553480156200010a57600080fd5b506040516200376238038062003762833981810160405260a08110156200013057600080fd5b5080516020808301516040808501516060808701516080978801516001600160601b031988841b81169099529185901b90971660a05282516315ab88c960e31b8152925195969395919490926001600160a01b0387169263ad5c464892600480840193919291829003018186803b158015620001ab57600080fd5b505afa158015620001c0573d6000803e3d6000fd5b505050506040513d6020811015620001d757600080fd5b50516001600160601b0319606091821b811660c05293811b841660e05291821b831661012052811b9091166101005233901b6101405250620002809050565b82601a81019282156200024e579160200282015b828111156200024e578251829062ffffff169055916020019190600101906200022a565b506200025c92915062000260565b5090565b6200027d91905b808211156200025c576000815560010162000267565b90565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6133ed620003756000398061089b5280611cd75280611de3525080610b0352806114055280612ce6525080610ecf5280610f78528061164252806116eb52806117b6528061184c52806118d85280611b9d52806120765280612bac52508061090b5280610d3e5280610fa85280611529528061171b5280611db4528061212d52806122215280612361528061242e5280612553525080610ea05280611613528061204752806121d35250806101e1528061226f528061245d52806125a55250506133ed6000f3fe6080604052600436106101d15760003560e01c80636ecc20da116100f7578063c718692211610095578063e62f981411610064578063e62f981414610636578063f12a15801461064b578063f7b2a7be14610660578063fec354651461067557610212565b8063c71869221461059a578063c9cc637b146105cd578063d9443923146105f7578063e4456ecb1461060c57610212565b806392d3e30f116100d157806392d3e30f146104ec5780639541d5681461051f578063afe7039b14610552578063be8eb8491461056757610212565b80636ecc20da146104a55780636ffb0b26146104c25780637398a221146104d757610212565b80632c6c80fb1161016f5780635a47f22f1161013e5780635a47f22f1461040d57806362b655e01461042257806362e8984a1461044b5780636ce111c31461047b57610212565b80632c6c80fb1461035857806332f37387146103825780634256ee45146103b2578063567142be146103f857610212565b80631959a002116101ab5780631959a002146102865780631c04247b14610300578063277c5e5f146103155780632b38113a1461034357610212565b80630210a83d14610217578063071907311461022c57806314d6aed01461027157610212565b3661021257336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021057610210600161068a565b005b600080fd5b34801561022357600080fd5b50610210610849565b34801561023857600080fd5b5061025f6004803603602081101561024f57600080fd5b50356001600160a01b0316610cbf565b60408051918252519081900360200190f35b34801561027d57600080fd5b50610210610d34565b34801561029257600080fd5b506102b9600480360360208110156102a957600080fd5b50356001600160a01b0316610e0e565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b34801561030c57600080fd5b5061025f610e5c565b34801561032157600080fd5b5061032a610e99565b6040805192835260208301919091528051918290030190f35b34801561034f57600080fd5b50610210611028565b34801561036457600080fd5b5061025f6004803603602081101561037b57600080fd5b503561113b565b34801561038e57600080fd5b50610210600480360360408110156103a557600080fd5b508035906020013561114f565b3480156103be57600080fd5b506103dc600480360360208110156103d557600080fd5b503561125e565b604080516001600160a01b039092168252519081900360200190f35b34801561040457600080fd5b5061025f611285565b34801561041957600080fd5b5061025f61128b565b34801561042e57600080fd5b50610437611297565b604080519115158252519081900360200190f35b34801561045757600080fd5b5061025f6004803603604081101561046e57600080fd5b50803590602001356112a0565b34801561048757600080fd5b5061025f6004803603602081101561049e57600080fd5b50356112bb565b610210600480360360208110156104bb57600080fd5b503561068a565b3480156104ce57600080fd5b5061025f6112c8565b3480156104e357600080fd5b506102106112d5565b3480156104f857600080fd5b506104376004803603602081101561050f57600080fd5b50356001600160a01b0316611464565b34801561052b57600080fd5b506102106004803603602081101561054257600080fd5b50356001600160a01b0316611479565b34801561055e57600080fd5b5061032a61160c565b34801561057357600080fd5b506104376004803603602081101561058a57600080fd5b50356001600160a01b0316611979565b3480156105a657600080fd5b5061025f600480360360208110156105bd57600080fd5b50356001600160a01b031661198e565b3480156105d957600080fd5b506103dc600480360360208110156105f057600080fd5b50356119d7565b34801561060357600080fd5b506104376119e4565b34801561061857600080fd5b506102106004803603602081101561062f57600080fd5b50356119f2565b34801561064257600080fd5b50610210611ccc565b34801561065757600080fd5b50610210611d4f565b34801561066c57600080fd5b5061025f611e81565b34801561068157600080fd5b5061025f611e87565b601b5460ff166106cb5760405162461bcd60e51b815260040180806020018281038252602381526020018061319e6023913960400191505060405180910390fd5b600181101561070b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132f5602e913960400191505060405180910390fd5b601a811115610761576040805162461bcd60e51b815260206004820152601b60248201527f4d6178696d756d206c6f636b7570206973203236207765656b732e0000000000604482015290519081900360640190fd5b662386f26fc1000034116107bc576040805162461bcd60e51b815260206004820152601f60248201527f4d696e696d756d207374616b696e6720616d6f756e743a20302e312045544800604482015290519081900360640190fd5b601b54600090610100900460ff16156107ef576107d7611e8d565b6107e033611fd5565b6107e8612042565b90506107f7565b6107f761262a565b610802338383612818565b6040805134815260208101849052808201839052905133917f49c716aa07d942cf2d54275484ec420c825ff7af20eb388f9ff093847281a4d9919081900360600190a25050565b601b54610100900460ff16156108905760405162461bcd60e51b81526004018080602001828103825260268152602001806131576026913960400191505060405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610904576040805162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba1030b236b4b71760611b604482015290519081900360640190fd5b60004790507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630210a83d826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b5050601b805461ff00191661010017905550600091506109c3905060026109b76109b26905c18a0737977bf800008663ffffffff61291216565b61296b565b9063ffffffff6129bc16565b905060006109dd60646109b784605563ffffffff61291216565b905060008080805b605354811015610aff576052600060538381548110610a0057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190206003810154909450610a489088906109b79064e8d4a510009063ffffffff61291216565b9250610a6364e8d4a510006109b7878663ffffffff61291216565b91508115610af757610a9e60538281548110610a7b57fe5b60009182526020909120015460028601546001600160a01b039091169084612818565b60538181548110610aab57fe5b600091825260209182902001546040805185815290516001600160a01b03909216927f5211b60cf4454a566568d6f3403d736fad0005bcbd0567b823ddaaa09010675d92918290030190a25b6001016109e5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fddf46886040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b505190506000610ba060646109b78a600f63ffffffff61291216565b905060008080805b605554811015610c9f576052600060558381548110610bc357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190206004810154909450610c0b9087906109b79064e8d4a510009063ffffffff61291216565b9250610c2664e8d4a510006109b7878663ffffffff61291216565b91508115610c9757610c3e60558281548110610a7b57fe5b60558181548110610c4b57fe5b600091825260209182902001546040805185815290516001600160a01b03909216927f5211b60cf4454a566568d6f3403d736fad0005bcbd0567b823ddaaa09010675d92918290030190a25b600101610ba8565b505042601a555050601b805460ff19166001179055505050505050505050565b6001600160a01b03811660009081526052602052604081206007810154604f5460068301548492610d12929091610d069164e8d4a51000916109b79163ffffffff61291216565b9063ffffffff6129fe16565b6008830154909150610d2a908263ffffffff612a4016565b925050505b919050565b6000610dea601d547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610db257600080fd5b505afa158015610dc6573d6000803e3d6000fd5b505050506040513d6020811015610ddc57600080fd5b50519063ffffffff6129fe16565b601c54909150610e00908263ffffffff612a4016565b601c55610e0b611e8d565b50565b60526020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b600080805b6018811015610e9357610e89601e8260188110610e7a57fe5b0154839063ffffffff612a4016565b9150600101610e61565b50905090565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d6020811015610f5e57600080fd5b5051604080516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015291519293506000927f0000000000000000000000000000000000000000000000000000000000000000909216916370a0823191602480820192602092909190829003018186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b5051919350909150509091565b601b54610100900460ff161561106f5760405162461bcd60e51b815260040180806020018281038252602a815260200180613232602a913960400191505060405180910390fd5b33600090815260526020526040902060038101548154620bdd80014210156110c85760405162461bcd60e51b81526004018080602001828103825260378152602001806131fb6037913960400191505060405180910390fd5b600081116111075760405162461bcd60e51b81526004018080602001828103825260228152602001806133236022913960400191505060405180910390fd5b60008083556001830181905560028301819055600583018190556003830181905560068301556111373382612a9a565b5050565b6036816018811061114857fe5b0154905081565b600182101561118f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132f5602e913960400191505060405180910390fd5b601a8211156111e5576040805162461bcd60e51b815260206004820152601b60248201527f4d6178696d756d206c6f636b7570206973203236207765656b732e0000000000604482015290519081900360640190fd5b600081116112245760405162461bcd60e51b815260040180806020018281038252602181526020018061317d6021913960400191505060405180910390fd5b601b54610100900460ff16156112545761123c611e8d565b61124533611fd5565b61124f8282612b7f565b611137565b6111378282612cb3565b6055818154811061126b57fe5b6000918252602090912001546001600160a01b0316905081565b604e5481565b671bc16d674ec8000081565b601b5460ff1681565b60006112b2838363ffffffff612e3716565b90505b92915050565b601e816018811061114857fe5b6802b5e3af16b188000081565b601b54610100900460ff161561131c5760405162461bcd60e51b815260040180806020018281038252602a815260200180613232602a913960400191505060405180910390fd5b33600090815260526020526040902060048101548154620bdd80014210156113755760405162461bcd60e51b81526004018080602001828103825260378152602001806131fb6037913960400191505060405180910390fd5b600081116113b45760405162461bcd60e51b81526004018080602001828103825260228152602001806133236022913960400191505060405180910390fd5b600080835560018301819055600283018190556005830181905560068301819055600480840182905560408051632344b5df60e01b8152339281019290925260248201849052516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692632344b5df926044808201939182900301818387803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b505050505050565b60566020526000908152604090205460ff1681565b6001600160a01b0381166000908152605260205260409020611499611e8d565b6114a282611fd5565b6008810154806114e35760405162461bcd60e51b815260040180806020018281038252602b815260200180613345602b913960400191505060405180910390fd5b60006008830155601d546114fd908263ffffffff6129fe16565b601d556040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291517f00000000000000000000000000000000000000000000000000000000000000009092169163a9059cbb916044808201926020929091908290030181600087803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b505050506040513d602081101561159e57600080fd5b5050604f5460068301546115c29164e8d4a51000916109b79163ffffffff61291216565b60078301556040805182815290516001600160a01b0385169133917fdfa15ea1d47f36bbb276c08375bc058f45e2919068b96798649cdfdff8e48ba69181900360200190a3505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156116a757600080fd5b505afa1580156116bb573d6000803e3d6000fd5b505050506040513d60208110156116d157600080fd5b5051604080516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015291519293506000927f0000000000000000000000000000000000000000000000000000000000000000909216916370a0823191602480820192602092909190829003018186803b15801561176457600080fd5b505afa158015611778573d6000803e3d6000fd5b505050506040513d602081101561178e57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156117fc57600080fd5b505afa158015611810573d6000803e3d6000fd5b505050506040513d602081101561182657600080fd5b5051604080516318160ddd60e01b815290519192506000916118cf916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916318160ddd91600480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516109b7868563ffffffff61291216565b9050600061196b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561192f57600080fd5b505afa158015611943573d6000803e3d6000fd5b505050506040513d602081101561195957600080fd5b50516109b7868663ffffffff61291216565b919650909450505050509091565b60546020526000908152604090205460ff1681565b6001600160a01b038116600090815260526020526040812060018101546119b9576000915050610d2f565b80600101546119ce8260000154601a54612e79565b01915050610d2f565b6053818154811061126b57fe5b601b54610100900460ff1681565b33600090815260526020526040902060018101548154601a54429291611a1791612e79565b011115611a63576040805162461bcd60e51b81526020600482015260156024820152742cb7ba9036bab9ba103bb0b4ba103637b733b2b91760591b604482015290519081900360640190fd5b8181600501541015611aa65760405162461bcd60e51b815260040180806020018281038252603b81526020018061327d603b913960400191505060405180910390fd5b60008211611ae55760405162461bcd60e51b81526004018080602001828103825260248152602001806131336024913960400191505060405180910390fd5b611aed611e8d565b611af633611fd5565b6005810154611b0b908363ffffffff6129fe16565b60058201556002810154600090611b2190612e8e565b6006830154600584015491925090611b4890620f4240906109b7908563ffffffff61291216565b60068401819055611b7390611b6490839063ffffffff6129fe16565b604e549063ffffffff6129fe16565b604e556040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb9160448083019260209291908290030181600087803b158015611be557600080fd5b505af1158015611bf9573d6000803e3d6000fd5b505050506040513d6020811015611c0f57600080fd5b5051611c62576040805162461bcd60e51b815260206004820152601960248201527f4c5020546f6b656e207472616e73666572206661696c65642e00000000000000604482015290519081900360640190fd5b611c8464e8d4a510006109b7604f54866006015461291290919063ffffffff16565b60078401556000600184015560408051858152905133917f45ec0244cf2e0c90546c4aff992398e1505d5ce31338249d7f29066169cfdcea919081900360200190a250505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611d40576040805162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba1030b236b4b71760611b604482015290519081900360640190fd5b601b805460ff19166001179055565b600060515411611d905760405162461bcd60e51b815260040180806020018281038252602b815260200180613345602b913960400191505060405180910390fd5b605180546000909155601d54611dac908263ffffffff6129fe16565b601d819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb7f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e5257600080fd5b505af1158015611e66573d6000803e3d6000fd5b505050506040513d6020811015611e7c57600080fd5b505050565b601d5481565b604f5481565b601c5415611fd357604e5415611fd357601c54601d54611eb29163ffffffff612a4016565b601d55605054601c54600091611ed6916103e8916109b7919063ffffffff61291216565b90506000611eef82601c546129fe90919063ffffffff16565b90506000611f166018611f0a42610e1063ffffffff6129bc16565b9063ffffffff612e3716565b9050611f3a6201518060368360188110611f2c57fe5b01549063ffffffff612a4016565b4210611f62574260368260188110611f4e57fe5b01556000601e8260188110611f5f57fe5b01555b611f7382601e8360188110611f2c57fe5b601e8260188110611f8057fe5b0155605154611f95908463ffffffff612a4016565b605155604e54611fc790611fb8906109b78564e8d4a5100063ffffffff61291216565b604f549063ffffffff612a4016565b604f5550506000601c55505b565b6001600160a01b03811660009081526052602052604081206007810154604f54600683015492939261201d9291610d069164e8d4a51000916109b7919063ffffffff61291216565b6008830154909150612035908263ffffffff612a4016565b8260080181905550505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156120db57600080fd5b505afa1580156120ef573d6000803e3d6000fd5b505050506040513d602081101561210557600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b5051905060006121ad4784612ed5565b6040805160028082526060808301845293945090916020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106121ff57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061224d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b6f9de95836001843042610708016040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612319578181015183820152602001612301565b50505050905001955050505050506000604051808303818588803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050505060006123d5847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610db257600080fd5b90506000811161242c576040805162461bcd60e51b815260206004820152601c60248201527f4c4f472042757920776173206e6f74207375636365737366756c6c2e00000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b505050506040513d60208110156124f657600080fd5b505161253b576040805162461bcd60e51b815260206004820152600f60248201526e20b8383937bb32903330b4b632b21760891b604482015290519081900360640190fd5b6040805163f305d71960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490526001604483018190526064830152306084830152426103840160a483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163f305d71991479160c48082019260609290919082900301818588803b1580156125ef57600080fd5b505af1158015612603573d6000803e3d6000fd5b50505050506040513d606081101561261a57600080fd5b5060400151965050505050505090565b3360009081526052602052604090206003810154671bc16d674ec80000116126835760405162461bcd60e51b815260040180806020018281038252603d8152602001806132b8603d913960400191505060405180910390fd5b6000612695473463ffffffff6129fe16565b90506802b5e3af16b188000081106126de5760405162461bcd60e51b81526004018080602001828103825260488152602001806133706048913960600191505060405180910390fd5b6000806127206126fd6802b5e3af16b18800008563ffffffff6129fe16565b600386015461271b90671bc16d674ec800009063ffffffff6129fe16565b612fbe565b90508034111561276757809150612744828560030154612a4090919063ffffffff16565b60038501556127623361275d348563ffffffff6129fe16565b612a9a565b612785565b600384015434925061277f908363ffffffff612a4016565b60038501555b6802b5e3af16b188000047106127a057601b805460ff191690555b3360009081526054602052604090205460ff16612812576053805460018181019092557f4c83efb3982afbd500ab7c66d02b996df5fdc3d20660e61600390aad6d5f7f1e0180546001600160a01b031916339081179091556000908152605460205260409020805460ff191690911790555b50505050565b6001600160a01b03831660009081526052602052604090204281556128468362093a8063ffffffff61291216565b81600101541015612871576128648362093a8063ffffffff61291216565b6001820155600281018390555b60006128808260020154612e8e565b6005830154909150612898908463ffffffff612a4016565b600583018190556006830154906128be90620f4240906109b7908563ffffffff61291216565b60068401819055604e546128dd918391610d069163ffffffff612a4016565b604e55604f5460068401546129029164e8d4a51000916109b79163ffffffff61291216565b8360070181905550505050505050565b600082612921575060006112b5565b8282028284828161292e57fe5b04146112b25760405162461bcd60e51b815260040180806020018281038252602181526020018061325c6021913960400191505060405180910390fd5b600060038211156129ae575080600160028204015b818110156129a85780915060028182858161299757fe5b0401816129a057fe5b049050612980565b50610d2f565b8115610d2f57506001919050565b60006112b283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fd4565b60006112b283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613076565b6000828201838110156112b2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80471015612aef576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b3a576040519150601f19603f3d011682016040523d82523d6000602084013e612b3f565b606091505b5050905080611e7c5760405162461bcd60e51b815260040180806020018281038252603a8152602001806131c1603a913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916323b872dd9160648083019260209291908290030181600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b505050506040513d6020811015612c1e57600080fd5b5051612c6a576040805162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b604482015290519081900360640190fd5b612c75338383612818565b6040805183815260208101839052815133927fabdf5866cb45ed6cb840bd666f95053184f0ae811ba5896df6597dd6495de8be928290030190a25050565b33600081815260526020908152604080832081516355ca931360e11b8152600481019590955260248501869052905190937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263ab9526269260448084019382900301818787803b158015612d3057600080fd5b505af1158015612d44573d6000803e3d6000fd5b505050506040513d6020811015612d5a57600080fd5b50516004830154909150612d74908263ffffffff612a4016565b60048301553360009081526056602052604090205460ff16612deb576055805460018181019092557f71beda120aafdd3bb922b360a066d10b7ce81d7ac2ad9874daac46e2282f6b450180546001600160a01b031916339081179091556000908152605660205260409020805460ff191690911790555b612df733856000612818565b6040805185815260208101839052815133927fce7972b3e121767d31c49305a8990f3954152f0bbf756caa59c8d9a51ef1b548928290030190a250505050565b60006112b283836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506130d0565b6000818310612e8857826112b2565b50919050565b6000601a8211612ebc576000612eab83600163ffffffff6129fe16565b601a8110612eb557fe5b0154612ec0565b6019545b90506112b581620f424063ffffffff612a4016565b600080612f3c6109b2612f01623d0900612ef5878063ffffffff61291216565b9063ffffffff61291216565b612f30612f1b623d0900612ef5898b63ffffffff61291216565b612f306009612ef58b8063ffffffff61291216565b9063ffffffff612a4016565b90506000612f97612f55866107d063ffffffff61291216565b6109b7670de0b6b3a7640000612ef5612f76896107d063ffffffff61291216565b610d06612f8a8c600363ffffffff61291216565b899063ffffffff612a4016565b9050612fb5670de0b6b3a76400006109b7838863ffffffff61291216565b95945050505050565b6000818310612fcd57816112b2565b5090919050565b600081836130605760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561302557818101518382015260200161300d565b50505050905090810190601f1680156130525780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161306c57fe5b0495945050505050565b600081848411156130c85760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561302557818101518382015260200161300d565b505050900390565b6000818361311f5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561302557818101518382015260200161300d565b5082848161312957fe5b0694935050505056fe596f75206e65656420746f207769746864726177206174206c656173742031207765692e556e697377617020706169722068617320616c7265616479206265656e20637265617465642e596f75206e65656420746f207374616b65206174206c656173742031207765692e5374616b696e6720686173206e6f74206265656e20616374697661746564207965742e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526566756e642077696c6c20626520706f737369626c652039206461797320616674657220796f757220636f6e747269627574696f6e2e556e6973776170207061697220637265617465642c206e6f20726566756e647320706f737369626c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416d6f756e74206e6565647320746f206265206c657373207468616e206f7220657175616c20746f207768617420697320617661696c61626c652e596f752063616e6e6f7420636f6e74726962757465206d6f7265207468616e20322045544820647572696e6720696e697469616c207374616b696e672e596f75206d757374206c6f636b206c697175696469747920666f72206174206c65617374206f6e65207765656b2e596f752068617665206e6f7420636f6e747269627574656420616e797468696e672e576974686472617720616d6f756e74206e6565647320746f206265206174206c656173742031207765692e496e697469616c204c69717569646974792054617267657420726561636865642e20506c65617365207761697420666f7220556e69737761702070616972206372656174696f6e2ea26469706673582212200f06b69151ea54f1e7b28e0e5191b70ae71143bdfff7686ac0ee9edcdf89759964736f6c634300060600330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d3862000000000000000000000000151d09f1bee785b1b9235ba432a1855b9a2a8a77000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d8

Deployed Bytecode

0x6080604052600436106101d15760003560e01c80636ecc20da116100f7578063c718692211610095578063e62f981411610064578063e62f981414610636578063f12a15801461064b578063f7b2a7be14610660578063fec354651461067557610212565b8063c71869221461059a578063c9cc637b146105cd578063d9443923146105f7578063e4456ecb1461060c57610212565b806392d3e30f116100d157806392d3e30f146104ec5780639541d5681461051f578063afe7039b14610552578063be8eb8491461056757610212565b80636ecc20da146104a55780636ffb0b26146104c25780637398a221146104d757610212565b80632c6c80fb1161016f5780635a47f22f1161013e5780635a47f22f1461040d57806362b655e01461042257806362e8984a1461044b5780636ce111c31461047b57610212565b80632c6c80fb1461035857806332f37387146103825780634256ee45146103b2578063567142be146103f857610212565b80631959a002116101ab5780631959a002146102865780631c04247b14610300578063277c5e5f146103155780632b38113a1461034357610212565b80630210a83d14610217578063071907311461022c57806314d6aed01461027157610212565b3661021257336001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d161461021057610210600161068a565b005b600080fd5b34801561022357600080fd5b50610210610849565b34801561023857600080fd5b5061025f6004803603602081101561024f57600080fd5b50356001600160a01b0316610cbf565b60408051918252519081900360200190f35b34801561027d57600080fd5b50610210610d34565b34801561029257600080fd5b506102b9600480360360208110156102a957600080fd5b50356001600160a01b0316610e0e565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b34801561030c57600080fd5b5061025f610e5c565b34801561032157600080fd5b5061032a610e99565b6040805192835260208301919091528051918290030190f35b34801561034f57600080fd5b50610210611028565b34801561036457600080fd5b5061025f6004803603602081101561037b57600080fd5b503561113b565b34801561038e57600080fd5b50610210600480360360408110156103a557600080fd5b508035906020013561114f565b3480156103be57600080fd5b506103dc600480360360208110156103d557600080fd5b503561125e565b604080516001600160a01b039092168252519081900360200190f35b34801561040457600080fd5b5061025f611285565b34801561041957600080fd5b5061025f61128b565b34801561042e57600080fd5b50610437611297565b604080519115158252519081900360200190f35b34801561045757600080fd5b5061025f6004803603604081101561046e57600080fd5b50803590602001356112a0565b34801561048757600080fd5b5061025f6004803603602081101561049e57600080fd5b50356112bb565b610210600480360360208110156104bb57600080fd5b503561068a565b3480156104ce57600080fd5b5061025f6112c8565b3480156104e357600080fd5b506102106112d5565b3480156104f857600080fd5b506104376004803603602081101561050f57600080fd5b50356001600160a01b0316611464565b34801561052b57600080fd5b506102106004803603602081101561054257600080fd5b50356001600160a01b0316611479565b34801561055e57600080fd5b5061032a61160c565b34801561057357600080fd5b506104376004803603602081101561058a57600080fd5b50356001600160a01b0316611979565b3480156105a657600080fd5b5061025f600480360360208110156105bd57600080fd5b50356001600160a01b031661198e565b3480156105d957600080fd5b506103dc600480360360208110156105f057600080fd5b50356119d7565b34801561060357600080fd5b506104376119e4565b34801561061857600080fd5b506102106004803603602081101561062f57600080fd5b50356119f2565b34801561064257600080fd5b50610210611ccc565b34801561065757600080fd5b50610210611d4f565b34801561066c57600080fd5b5061025f611e81565b34801561068157600080fd5b5061025f611e87565b601b5460ff166106cb5760405162461bcd60e51b815260040180806020018281038252602381526020018061319e6023913960400191505060405180910390fd5b600181101561070b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132f5602e913960400191505060405180910390fd5b601a811115610761576040805162461bcd60e51b815260206004820152601b60248201527f4d6178696d756d206c6f636b7570206973203236207765656b732e0000000000604482015290519081900360640190fd5b662386f26fc1000034116107bc576040805162461bcd60e51b815260206004820152601f60248201527f4d696e696d756d207374616b696e6720616d6f756e743a20302e312045544800604482015290519081900360640190fd5b601b54600090610100900460ff16156107ef576107d7611e8d565b6107e033611fd5565b6107e8612042565b90506107f7565b6107f761262a565b610802338383612818565b6040805134815260208101849052808201839052905133917f49c716aa07d942cf2d54275484ec420c825ff7af20eb388f9ff093847281a4d9919081900360600190a25050565b601b54610100900460ff16156108905760405162461bcd60e51b81526004018080602001828103825260268152602001806131576026913960400191505060405180910390fd5b336001600160a01b037f000000000000000000000000a3bd825b31266eeb12dad7306472da1660a81dab1614610904576040805162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba1030b236b4b71760611b604482015290519081900360640190fd5b60004790507f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d38626001600160a01b0316630210a83d826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b5050601b805461ff00191661010017905550600091506109c3905060026109b76109b26905c18a0737977bf800008663ffffffff61291216565b61296b565b9063ffffffff6129bc16565b905060006109dd60646109b784605563ffffffff61291216565b905060008080805b605354811015610aff576052600060538381548110610a0057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190206003810154909450610a489088906109b79064e8d4a510009063ffffffff61291216565b9250610a6364e8d4a510006109b7878663ffffffff61291216565b91508115610af757610a9e60538281548110610a7b57fe5b60009182526020909120015460028601546001600160a01b039091169084612818565b60538181548110610aab57fe5b600091825260209182902001546040805185815290516001600160a01b03909216927f5211b60cf4454a566568d6f3403d736fad0005bcbd0567b823ddaaa09010675d92918290030190a25b6001016109e5565b60007f000000000000000000000000151d09f1bee785b1b9235ba432a1855b9a2a8a776001600160a01b031663fddf46886040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d6020811015610b8457600080fd5b505190506000610ba060646109b78a600f63ffffffff61291216565b905060008080805b605554811015610c9f576052600060558381548110610bc357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190206004810154909450610c0b9087906109b79064e8d4a510009063ffffffff61291216565b9250610c2664e8d4a510006109b7878663ffffffff61291216565b91508115610c9757610c3e60558281548110610a7b57fe5b60558181548110610c4b57fe5b600091825260209182902001546040805185815290516001600160a01b03909216927f5211b60cf4454a566568d6f3403d736fad0005bcbd0567b823ddaaa09010675d92918290030190a25b600101610ba8565b505042601a555050601b805460ff19166001179055505050505050505050565b6001600160a01b03811660009081526052602052604081206007810154604f5460068301548492610d12929091610d069164e8d4a51000916109b79163ffffffff61291216565b9063ffffffff6129fe16565b6008830154909150610d2a908263ffffffff612a4016565b925050505b919050565b6000610dea601d547f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d38626001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610db257600080fd5b505afa158015610dc6573d6000803e3d6000fd5b505050506040513d6020811015610ddc57600080fd5b50519063ffffffff6129fe16565b601c54909150610e00908263ffffffff612a4016565b601c55610e0b611e8d565b50565b60526020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b600080805b6018811015610e9357610e89601e8260188110610e7a57fe5b0154839063ffffffff612a4016565b9150600101610e61565b50905090565b60008060007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a082317f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d86040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d6020811015610f5e57600080fd5b5051604080516370a0823160e01b81526001600160a01b037f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d88116600483015291519293506000927f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d3862909216916370a0823191602480820192602092909190829003018186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b5051919350909150509091565b601b54610100900460ff161561106f5760405162461bcd60e51b815260040180806020018281038252602a815260200180613232602a913960400191505060405180910390fd5b33600090815260526020526040902060038101548154620bdd80014210156110c85760405162461bcd60e51b81526004018080602001828103825260378152602001806131fb6037913960400191505060405180910390fd5b600081116111075760405162461bcd60e51b81526004018080602001828103825260228152602001806133236022913960400191505060405180910390fd5b60008083556001830181905560028301819055600583018190556003830181905560068301556111373382612a9a565b5050565b6036816018811061114857fe5b0154905081565b600182101561118f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132f5602e913960400191505060405180910390fd5b601a8211156111e5576040805162461bcd60e51b815260206004820152601b60248201527f4d6178696d756d206c6f636b7570206973203236207765656b732e0000000000604482015290519081900360640190fd5b600081116112245760405162461bcd60e51b815260040180806020018281038252602181526020018061317d6021913960400191505060405180910390fd5b601b54610100900460ff16156112545761123c611e8d565b61124533611fd5565b61124f8282612b7f565b611137565b6111378282612cb3565b6055818154811061126b57fe5b6000918252602090912001546001600160a01b0316905081565b604e5481565b671bc16d674ec8000081565b601b5460ff1681565b60006112b2838363ffffffff612e3716565b90505b92915050565b601e816018811061114857fe5b6802b5e3af16b188000081565b601b54610100900460ff161561131c5760405162461bcd60e51b815260040180806020018281038252602a815260200180613232602a913960400191505060405180910390fd5b33600090815260526020526040902060048101548154620bdd80014210156113755760405162461bcd60e51b81526004018080602001828103825260378152602001806131fb6037913960400191505060405180910390fd5b600081116113b45760405162461bcd60e51b81526004018080602001828103825260228152602001806133236022913960400191505060405180910390fd5b600080835560018301819055600283018190556005830181905560068301819055600480840182905560408051632344b5df60e01b8152339281019290925260248201849052516001600160a01b037f000000000000000000000000151d09f1bee785b1b9235ba432a1855b9a2a8a771692632344b5df926044808201939182900301818387803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b505050505050565b60566020526000908152604090205460ff1681565b6001600160a01b0381166000908152605260205260409020611499611e8d565b6114a282611fd5565b6008810154806114e35760405162461bcd60e51b815260040180806020018281038252602b815260200180613345602b913960400191505060405180910390fd5b60006008830155601d546114fd908263ffffffff6129fe16565b601d556040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291517f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d38629092169163a9059cbb916044808201926020929091908290030181600087803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b505050506040513d602081101561159e57600080fd5b5050604f5460068301546115c29164e8d4a51000916109b79163ffffffff61291216565b60078301556040805182815290516001600160a01b0385169133917fdfa15ea1d47f36bbb276c08375bc058f45e2919068b96798649cdfdff8e48ba69181900360200190a3505050565b60008060007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a082317f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d86040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156116a757600080fd5b505afa1580156116bb573d6000803e3d6000fd5b505050506040513d60208110156116d157600080fd5b5051604080516370a0823160e01b81526001600160a01b037f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d88116600483015291519293506000927f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d3862909216916370a0823191602480820192602092909190829003018186803b15801561176457600080fd5b505afa158015611778573d6000803e3d6000fd5b505050506040513d602081101561178e57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b037f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d816916370a08231916024808301926020929190829003018186803b1580156117fc57600080fd5b505afa158015611810573d6000803e3d6000fd5b505050506040513d602081101561182657600080fd5b5051604080516318160ddd60e01b815290519192506000916118cf916001600160a01b037f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d816916318160ddd91600480820192602092909190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b50516109b7868563ffffffff61291216565b9050600061196b7f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d86001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561192f57600080fd5b505afa158015611943573d6000803e3d6000fd5b505050506040513d602081101561195957600080fd5b50516109b7868663ffffffff61291216565b919650909450505050509091565b60546020526000908152604090205460ff1681565b6001600160a01b038116600090815260526020526040812060018101546119b9576000915050610d2f565b80600101546119ce8260000154601a54612e79565b01915050610d2f565b6053818154811061126b57fe5b601b54610100900460ff1681565b33600090815260526020526040902060018101548154601a54429291611a1791612e79565b011115611a63576040805162461bcd60e51b81526020600482015260156024820152742cb7ba9036bab9ba103bb0b4ba103637b733b2b91760591b604482015290519081900360640190fd5b8181600501541015611aa65760405162461bcd60e51b815260040180806020018281038252603b81526020018061327d603b913960400191505060405180910390fd5b60008211611ae55760405162461bcd60e51b81526004018080602001828103825260248152602001806131336024913960400191505060405180910390fd5b611aed611e8d565b611af633611fd5565b6005810154611b0b908363ffffffff6129fe16565b60058201556002810154600090611b2190612e8e565b6006830154600584015491925090611b4890620f4240906109b7908563ffffffff61291216565b60068401819055611b7390611b6490839063ffffffff6129fe16565b604e549063ffffffff6129fe16565b604e556040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b037f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d8169163a9059cbb9160448083019260209291908290030181600087803b158015611be557600080fd5b505af1158015611bf9573d6000803e3d6000fd5b505050506040513d6020811015611c0f57600080fd5b5051611c62576040805162461bcd60e51b815260206004820152601960248201527f4c5020546f6b656e207472616e73666572206661696c65642e00000000000000604482015290519081900360640190fd5b611c8464e8d4a510006109b7604f54866006015461291290919063ffffffff16565b60078401556000600184015560408051858152905133917f45ec0244cf2e0c90546c4aff992398e1505d5ce31338249d7f29066169cfdcea919081900360200190a250505050565b336001600160a01b037f000000000000000000000000a3bd825b31266eeb12dad7306472da1660a81dab1614611d40576040805162461bcd60e51b815260206004820152601460248201527321b0b63632b91034b9903737ba1030b236b4b71760611b604482015290519081900360640190fd5b601b805460ff19166001179055565b600060515411611d905760405162461bcd60e51b815260040180806020018281038252602b815260200180613345602b913960400191505060405180910390fd5b605180546000909155601d54611dac908263ffffffff6129fe16565b601d819055507f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d38626001600160a01b031663a9059cbb7f000000000000000000000000a3bd825b31266eeb12dad7306472da1660a81dab836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e5257600080fd5b505af1158015611e66573d6000803e3d6000fd5b505050506040513d6020811015611e7c57600080fd5b505050565b601d5481565b604f5481565b601c5415611fd357604e5415611fd357601c54601d54611eb29163ffffffff612a4016565b601d55605054601c54600091611ed6916103e8916109b7919063ffffffff61291216565b90506000611eef82601c546129fe90919063ffffffff16565b90506000611f166018611f0a42610e1063ffffffff6129bc16565b9063ffffffff612e3716565b9050611f3a6201518060368360188110611f2c57fe5b01549063ffffffff612a4016565b4210611f62574260368260188110611f4e57fe5b01556000601e8260188110611f5f57fe5b01555b611f7382601e8360188110611f2c57fe5b601e8260188110611f8057fe5b0155605154611f95908463ffffffff612a4016565b605155604e54611fc790611fb8906109b78564e8d4a5100063ffffffff61291216565b604f549063ffffffff612a4016565b604f5550506000601c55505b565b6001600160a01b03811660009081526052602052604081206007810154604f54600683015492939261201d9291610d069164e8d4a51000916109b7919063ffffffff61291216565b6008830154909150612035908263ffffffff612a4016565b8260080181905550505050565b6000807f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a082317f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d86040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156120db57600080fd5b505afa1580156120ef573d6000803e3d6000fd5b505050506040513d602081101561210557600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b037f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d386216916370a08231916024808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b5051905060006121ad4784612ed5565b6040805160028082526060808301845293945090916020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816000815181106121ff57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d38628160018151811061224d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663b6f9de95836001843042610708016040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612319578181015183820152602001612301565b50505050905001955050505050506000604051808303818588803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050505060006123d5847f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d38626001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610db257600080fd5b90506000811161242c576040805162461bcd60e51b815260206004820152601c60248201527f4c4f472042757920776173206e6f74207375636365737366756c6c2e00000000604482015290519081900360640190fd5b7f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d38626001600160a01b031663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b505050506040513d60208110156124f657600080fd5b505161253b576040805162461bcd60e51b815260206004820152600f60248201526e20b8383937bb32903330b4b632b21760891b604482015290519081900360640190fd5b6040805163f305d71960e01b81526001600160a01b037f000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d386281166004830152602482018490526001604483018190526064830152306084830152426103840160a483015291516000927f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169163f305d71991479160c48082019260609290919082900301818588803b1580156125ef57600080fd5b505af1158015612603573d6000803e3d6000fd5b50505050506040513d606081101561261a57600080fd5b5060400151965050505050505090565b3360009081526052602052604090206003810154671bc16d674ec80000116126835760405162461bcd60e51b815260040180806020018281038252603d8152602001806132b8603d913960400191505060405180910390fd5b6000612695473463ffffffff6129fe16565b90506802b5e3af16b188000081106126de5760405162461bcd60e51b81526004018080602001828103825260488152602001806133706048913960600191505060405180910390fd5b6000806127206126fd6802b5e3af16b18800008563ffffffff6129fe16565b600386015461271b90671bc16d674ec800009063ffffffff6129fe16565b612fbe565b90508034111561276757809150612744828560030154612a4090919063ffffffff16565b60038501556127623361275d348563ffffffff6129fe16565b612a9a565b612785565b600384015434925061277f908363ffffffff612a4016565b60038501555b6802b5e3af16b188000047106127a057601b805460ff191690555b3360009081526054602052604090205460ff16612812576053805460018181019092557f4c83efb3982afbd500ab7c66d02b996df5fdc3d20660e61600390aad6d5f7f1e0180546001600160a01b031916339081179091556000908152605460205260409020805460ff191690911790555b50505050565b6001600160a01b03831660009081526052602052604090204281556128468362093a8063ffffffff61291216565b81600101541015612871576128648362093a8063ffffffff61291216565b6001820155600281018390555b60006128808260020154612e8e565b6005830154909150612898908463ffffffff612a4016565b600583018190556006830154906128be90620f4240906109b7908563ffffffff61291216565b60068401819055604e546128dd918391610d069163ffffffff612a4016565b604e55604f5460068401546129029164e8d4a51000916109b79163ffffffff61291216565b8360070181905550505050505050565b600082612921575060006112b5565b8282028284828161292e57fe5b04146112b25760405162461bcd60e51b815260040180806020018281038252602181526020018061325c6021913960400191505060405180910390fd5b600060038211156129ae575080600160028204015b818110156129a85780915060028182858161299757fe5b0401816129a057fe5b049050612980565b50610d2f565b8115610d2f57506001919050565b60006112b283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fd4565b60006112b283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613076565b6000828201838110156112b2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80471015612aef576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b3a576040519150601f19603f3d011682016040523d82523d6000602084013e612b3f565b606091505b5050905080611e7c5760405162461bcd60e51b815260040180806020018281038252603a8152602001806131c1603a913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b037f000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d816916323b872dd9160648083019260209291908290030181600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b505050506040513d6020811015612c1e57600080fd5b5051612c6a576040805162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b604482015290519081900360640190fd5b612c75338383612818565b6040805183815260208101839052815133927fabdf5866cb45ed6cb840bd666f95053184f0ae811ba5896df6597dd6495de8be928290030190a25050565b33600081815260526020908152604080832081516355ca931360e11b8152600481019590955260248501869052905190937f000000000000000000000000151d09f1bee785b1b9235ba432a1855b9a2a8a776001600160a01b03169263ab9526269260448084019382900301818787803b158015612d3057600080fd5b505af1158015612d44573d6000803e3d6000fd5b505050506040513d6020811015612d5a57600080fd5b50516004830154909150612d74908263ffffffff612a4016565b60048301553360009081526056602052604090205460ff16612deb576055805460018181019092557f71beda120aafdd3bb922b360a066d10b7ce81d7ac2ad9874daac46e2282f6b450180546001600160a01b031916339081179091556000908152605660205260409020805460ff191690911790555b612df733856000612818565b6040805185815260208101839052815133927fce7972b3e121767d31c49305a8990f3954152f0bbf756caa59c8d9a51ef1b548928290030190a250505050565b60006112b283836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506130d0565b6000818310612e8857826112b2565b50919050565b6000601a8211612ebc576000612eab83600163ffffffff6129fe16565b601a8110612eb557fe5b0154612ec0565b6019545b90506112b581620f424063ffffffff612a4016565b600080612f3c6109b2612f01623d0900612ef5878063ffffffff61291216565b9063ffffffff61291216565b612f30612f1b623d0900612ef5898b63ffffffff61291216565b612f306009612ef58b8063ffffffff61291216565b9063ffffffff612a4016565b90506000612f97612f55866107d063ffffffff61291216565b6109b7670de0b6b3a7640000612ef5612f76896107d063ffffffff61291216565b610d06612f8a8c600363ffffffff61291216565b899063ffffffff612a4016565b9050612fb5670de0b6b3a76400006109b7838863ffffffff61291216565b95945050505050565b6000818310612fcd57816112b2565b5090919050565b600081836130605760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561302557818101518382015260200161300d565b50505050905090810190601f1680156130525780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161306c57fe5b0495945050505050565b600081848411156130c85760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561302557818101518382015260200161300d565b505050900390565b6000818361311f5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561302557818101518382015260200161300d565b5082848161312957fe5b0694935050505056fe596f75206e65656420746f207769746864726177206174206c656173742031207765692e556e697377617020706169722068617320616c7265616479206265656e20637265617465642e596f75206e65656420746f207374616b65206174206c656173742031207765692e5374616b696e6720686173206e6f74206265656e20616374697661746564207965742e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526566756e642077696c6c20626520706f737369626c652039206461797320616674657220796f757220636f6e747269627574696f6e2e556e6973776170207061697220637265617465642c206e6f20726566756e647320706f737369626c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416d6f756e74206e6565647320746f206265206c657373207468616e206f7220657175616c20746f207768617420697320617661696c61626c652e596f752063616e6e6f7420636f6e74726962757465206d6f7265207468616e20322045544820647572696e6720696e697469616c207374616b696e672e596f75206d757374206c6f636b206c697175696469747920666f72206174206c65617374206f6e65207765656b2e596f752068617665206e6f7420636f6e747269627574656420616e797468696e672e576974686472617720616d6f756e74206e6565647320746f206265206174206c656173742031207765692e496e697469616c204c69717569646974792054617267657420726561636865642e20506c65617365207761697420666f7220556e69737761702070616972206372656174696f6e2ea26469706673582212200f06b69151ea54f1e7b28e0e5191b70ae71143bdfff7686ac0ee9edcdf89759964736f6c63430006060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d3862000000000000000000000000151d09f1bee785b1b9235ba432a1855b9a2a8a77000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d8

-----Decoded View---------------
Arg [0] : _FACTORY (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : _UNIROUTER (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : _LOG (address): 0xAe0948D463f7F88d154c587D9f30B4c1A36D3862
Arg [3] : _APPROVER (address): 0x151D09F1BeE785b1B9235Ba432A1855b9A2A8a77
Arg [4] : _LOGxWETH (address): 0xDf8d63bA1227B3ceF95Df534fe6F153f571619d8

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 000000000000000000000000ae0948d463f7f88d154c587d9f30b4c1a36d3862
Arg [3] : 000000000000000000000000151d09f1bee785b1b9235ba432a1855b9a2a8a77
Arg [4] : 000000000000000000000000df8d63ba1227b3cef95df534fe6f153f571619d8


Deployed Bytecode Sourcemap

4429:20207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6763:10;-1:-1:-1;;;;;6777:9:0;6763:23;;6760:50;;6793:11;6802:1;6793:8;:11::i;:::-;4429:20207;;12:1:-1;9;2:12;7669:1806:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7669:1806:0;;;:::i;23964:243::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23964:243:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23964:243:0;-1:-1:-1;;;;;23964:243:0;;:::i;:::-;;;;;;;;;;;;;;;;12602:195;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12602:195:0;;;:::i;6435:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6435:44:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6435:44:0;-1:-1:-1;;;;;6435:44:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24241:254;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24241:254:0;;;:::i;23380:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23380:250:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10900:657;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10900:657:0;;;:::i;5972:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5972:35:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5972:35:0;;:::i;15273:458::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15273:458:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15273:458:0;;;;;;;:::i;6642:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6642:26:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6642:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;6642:26:0;;;;;;;;;;;;;;6013;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6013:26:0;;;:::i;5451:65::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5451:65:0;;;:::i;5757:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5757:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;24529:104;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24529:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24529:104:0;;;;;;;:::i;5931:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5931:37:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5931:37:0;;:::i;16834:670::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16834:670:0;;:::i;5533:66::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5533:66:0;;;:::i;11654:682::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11654:682:0;;;:::i;6672:47::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6672:47:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6672:47:0;-1:-1:-1;;;;;6672:47:0;;:::i;21589:574::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21589:574:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21589:574:0;-1:-1:-1;;;;;21589:574:0;;:::i;22809:542::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22809:542:0;;;:::i;6550:47::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6550:47:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6550:47:0;-1:-1:-1;;;;;6550:47:0;;:::i;23664:269::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23664:269:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23664:269:0;-1:-1:-1;;;;;23664:269:0;;:::i;6520:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6520:26:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6520:26:0;;:::i;5797:39::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5797:39:0;;;:::i;20311:1166::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20311:1166:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20311:1166:0;;:::i;7490:129::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7490:129:0;;;:::i;22259:321::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22259:321:0;;;:::i;5898:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5898:27:0;;;:::i;6043:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6043:26:0;;;:::i;16834:670::-;16896:10;;;;16888:58;;;;-1:-1:-1;;;16888:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16969:1;16959:6;:11;;16951:70;;;;-1:-1:-1;;;16951:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17044:2;17034:6;:12;;17026:52;;;;;-1:-1:-1;;;17026:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17103:4;17091:9;:16;17083:60;;;;;-1:-1:-1;;;17083:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17220:14;;17150:15;;17220:14;;;;;17216:143;;;17242:15;:13;:15::i;:::-;17263:25;17277:10;17263:13;:25::i;:::-;17307:14;:12;:14::i;:::-;17294:27;;17216:143;;;17339:14;:12;:14::i;:::-;17392:42;17403:10;17415:6;17423:10;17392;:42::i;:::-;17446:53;;;17469:9;17446:53;;;;;;;;;;;;;;;;17457:10;;17446:53;;;;;;;;;;16834:670;;:::o;7669:1806::-;7721:14;;;;;;;7720:15;7712:66;;;;-1:-1:-1;;;7712:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7791:10;-1:-1:-1;;;;;7805:13:0;7791:27;;7783:60;;;;;-1:-1:-1;;;7783:60:0;;;;;;;;;;;;-1:-1:-1;;;7783:60:0;;;;;;;;;;;;;;;7850:18;7871:21;7850:42;;7947:3;-1:-1:-1;;;;;7940:31:0;;7979:10;7940:52;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7940:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;7997:14:0;:21;;-1:-1:-1;;7997:21:0;;;;;-1:-1:-1;7997:21:0;;-1:-1:-1;8075:53:0;;-1:-1:-1;8126:1:0;8075:46;8085:35;5664:23;8109:10;8085:35;:23;:35;:::i;:::-;8075:9;:46::i;:::-;:50;:53;:50;:53;:::i;:::-;8055:73;-1:-1:-1;8133:22:0;8158:26;8180:3;8158:17;8055:73;8172:2;8158:17;:13;:17;:::i;:26::-;8133:51;-1:-1:-1;8191:24:0;;;;8283:397;8299:9;:16;8295:20;;8283:397;;;8362:8;:22;8371:9;8381:1;8371:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8371:12:0;8362:22;;;;;;;;;;;;8420;;;;8362;;-1:-1:-1;8405:54:0;;8448:10;;8405:38;;8410:4;;8405:38;:14;:38;:::i;:54::-;8392:67;-1:-1:-1;8481:40:0;8516:4;8481:30;:14;8392:67;8481:30;:18;:30;:::i;:40::-;8465:56;-1:-1:-1;8533:17:0;;8529:146;;8559:60;8570:9;8580:1;8570:12;;;;;;;;;;;;;;;;;;8584:19;;;;-1:-1:-1;;;;;8570:12:0;;;;8605:13;8559:10;:60::i;:::-;8640:9;8650:1;8640:12;;;;;;;;;;;;;;;;;;;8631:37;;;;;;;;-1:-1:-1;;;;;8640:12:0;;;;8631:37;;;;;;;;;8529:146;8317:3;;8283:397;;;8745:18;8776:8;-1:-1:-1;;;;;8766:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8766:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8766:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8766:43:0;;-1:-1:-1;8814:22:0;8839:26;8861:3;8839:17;:9;8853:2;8839:17;:13;:17;:::i;:26::-;8814:51;-1:-1:-1;8872:24:0;;;;8964:399;8980:9;:16;8976:20;;8964:399;;;9043:8;:22;9052:9;9062:1;9052:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9052:12:0;9043:22;;;;;;;;;;;;9101:24;;;;9043:22;;-1:-1:-1;9086:56:0;;9131:10;;9086:40;;9091:4;;9086:40;:14;:40;:::i;:56::-;9073:69;-1:-1:-1;9164:40:0;9199:4;9164:30;:14;9073:69;9164:30;:18;:30;:::i;:40::-;9148:56;-1:-1:-1;9216:17:0;;9212:146;;9242:60;9253:9;9263:1;9253:12;;;;;;;9242:60;9323:9;9333:1;9323:12;;;;;;;;;;;;;;;;;;;9314:37;;;;;;;;-1:-1:-1;;;;;9323:12:0;;;;9314:37;;;;;;;;;9212:146;8998:3;;8964:399;;;-1:-1:-1;;9430:15:0;9411:16;:34;-1:-1:-1;;9450:10:0;:17;;-1:-1:-1;;9450:17:0;9463:4;9450:17;;;-1:-1:-1;;;;;;;;;7669:1806:0:o;23964:243::-;-1:-1:-1;;;;;24063:13:0;;24025:4;24063:13;;;:8;:13;;;;;24147:12;;;;24120:11;;24104;;;;24025:4;;24104:56;;24147:12;;24104:38;;24137:4;;24104:28;;;:15;:28;:::i;:38::-;:42;:56;:42;:56;:::i;:::-;24172:14;;;;24083:77;;-1:-1:-1;24172:30:0;;24083:77;24172:30;:18;:30;:::i;:::-;24165:37;;;;23964:243;;;;:::o;12602:195::-;12642:12;12657:54;12698:12;;12664:3;-1:-1:-1;;;;;12657:21:0;;12687:4;12657:36;;;;;;;;;;;;;-1:-1:-1;;;;;12657:36:0;-1:-1:-1;;;;;12657:36:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12657:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12657:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12657:36:0;;:54;:40;:54;:::i;:::-;12739:14;;12642:69;;-1:-1:-1;12739:24:0;;12642:69;12739:24;:18;:24;:::i;:::-;12722:14;:41;12774:15;:13;:15::i;:::-;12602:195;:::o;6435:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24241:254::-;24291:4;;;24332:130;24354:25;24350:1;:29;24332:130;;;24412:44;24434:18;24453:1;24434:21;;;;;;;;;24412:17;;:44;:21;:44;:::i;:::-;24392:64;-1:-1:-1;24381:3:0;;24332:130;;;-1:-1:-1;24473:17:0;-1:-1:-1;24241:254:0;:::o;23380:250::-;23425:4;23431;23442:13;23465:4;-1:-1:-1;;;;;23458:22:0;;23481:8;23458:32;;;;;;;;;;;;;-1:-1:-1;;;;;23458:32:0;-1:-1:-1;;;;;23458:32:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23458:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23458:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23458:32:0;23539:31;;;-1:-1:-1;;;23539:31:0;;-1:-1:-1;;;;;23561:8:0;23539:31;;;;;;;;23458:32;;-1:-1:-1;;;23546:3:0;23539:21;;;;;;:31;;;;;23458:32;;23539:31;;;;;;;;:21;:31;;;2:2:-1;;;;27:1;24;17:12;2:2;23539:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23539:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23539:31:0;23607:8;;-1:-1:-1;23539:31:0;;-1:-1:-1;;23380:250:0;;:::o;10900:657::-;10946:14;;;;;;;10945:15;10937:70;;;;-1:-1:-1;;;10937:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11066:10;11033:21;11057:20;;;:8;:20;;;;;11102:19;;;;11155:15;;11173:7;11155:25;11136:15;:44;;11128:112;;;;-1:-1:-1;;;11128:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11268:1;11253:12;:16;11245:63;;;;-1:-1:-1;;;11245:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11352:1;11334:19;;;11358:18;;;:22;;;11385:16;;;:20;;;11410:19;;;:23;;;11438:19;;;:23;;;11466:11;;;:15;11517:35;11527:10;11539:12;11517:9;:35::i;:::-;10900:657;;:::o;5972:35::-;;;;;;;;;;;;;-1:-1:-1;5972:35:0;:::o;15273:458::-;15352:1;15342:6;:11;;15334:70;;;;-1:-1:-1;;;15334:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15427:2;15417:6;:12;;15409:52;;;;;-1:-1:-1;;;15409:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15483:1;15474:6;:10;15466:56;;;;-1:-1:-1;;;15466:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15577:14;;;;;;;15573:154;;;15599:15;:13;:15::i;:::-;15620:25;15634:10;15620:13;:25::i;:::-;15651:26;15662:6;15670;15651:10;:26::i;:::-;15573:154;;;15695:26;15706:6;15714;15695:10;:26::i;6642:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6642:26:0;;-1:-1:-1;6642:26:0;:::o;6013:::-;;;;:::o;5451:65::-;5497:19;5451:65;:::o;5757:36::-;;;;;;:::o;24529:104::-;24595:4;24613:15;:3;24621:6;24613:15;:7;:15;:::i;:::-;24606:22;;24529:104;;;;;:::o;5931:37::-;;;;;;;;;5533:66;5579:20;5533:66;:::o;11654:682::-;11702:14;;;;;;;11701:15;11693:70;;;;-1:-1:-1;;;11693:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:10;11789:21;11813:20;;;:8;:20;;;;;11858:21;;;;11913:15;;11931:6;11913:24;11894:15;:43;;11886:111;;;;-1:-1:-1;;;11886:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12025:1;12010:12;:16;12002:63;;;;-1:-1:-1;;;12002:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12109:1;12091:19;;;12115:18;;;:22;;;12142:16;;;:20;;;12167:19;;;:23;;;12195:11;;;:15;;;12217:21;;;;:25;;;12277:54;;;-1:-1:-1;;;12277:54:0;;12306:10;12277:54;;;;;;;;;;;;;;-1:-1:-1;;;;;12287:8:0;12277:28;;;;:54;;;;;;;;;;;12109:1;12277:28;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;12277:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12277:54:0;;;;11654:682;;:::o;6672:47::-;;;;;;;;;;;;;;;:::o;21589:574::-;-1:-1:-1;;;;;21659:13:0;;21635:21;21659:13;;;:8;:13;;;;;21705:15;:13;:15::i;:::-;21750:18;21764:3;21750:13;:18::i;:::-;21792:14;;;;21819:10;21811:66;;;;-1:-1:-1;;;21811:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21939:1;21922:14;;;:18;21960:12;;:24;;21977:6;21960:24;:16;:24;:::i;:::-;21945:12;:39;21989:33;;;-1:-1:-1;;;21989:33:0;;-1:-1:-1;;;;;21989:33:0;;;;;;;;;;;;;;;21996:3;21989:20;;;;;;:33;;;;;;;;;;;;;;;-1:-1:-1;21989:20:0;:33;;;2:2:-1;;;;27:1;24;17:12;2:2;21989:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21989:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;22085:11:0;;22069;;;;:38;;22102:4;;22069:28;;;:15;:28;:::i;:38::-;22054:12;;;:53;22119:36;;;;;;;;-1:-1:-1;;;;;22119:36:0;;;22131:10;;22119:36;;;;;;;;;21589:574;;;:::o;22809:542::-;22862:4;22868;22887:13;22910:4;-1:-1:-1;;;;;22903:22:0;;22926:8;22903:32;;;;;;;;;;;;;-1:-1:-1;;;;;22903:32:0;-1:-1:-1;;;;;22903:32:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22903:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22903:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22903:32:0;22984:31;;;-1:-1:-1;;;22984:31:0;;-1:-1:-1;;;;;23006:8:0;22984:31;;;;;;;;22903:32;;-1:-1:-1;;;22991:3:0;22984:21;;;;;;:31;;;;;22903:32;;22984:31;;;;;;;;:21;:31;;;2:2:-1;;;;27:1;24;17:12;2:2;22984:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22984:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22984:31:0;23063:41;;;-1:-1:-1;;;23063:41:0;;23098:4;23063:41;;;;;;22984:31;;-1:-1:-1;23042:18:0;;-1:-1:-1;;;;;23070:8:0;23063:26;;;;:41;;;;;22984:31;;23063:41;;;;;;;:26;:41;;;2:2:-1;;;;27:1;24;17:12;2:2;23063:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23063:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23063:41:0;23188:30;;;-1:-1:-1;;;23188:30:0;;;;23063:41;;-1:-1:-1;23139:14:0;;23156:63;;-1:-1:-1;;;;;23195:8:0;23188:28;;;;:30;;;;;23063:41;;23188:30;;;;;;;;:28;:30;;;2:2:-1;;;;27:1;24;17:12;2:2;23188:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23188:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23188:30:0;23156:27;:8;23169:13;23156:27;:12;:27;:::i;:63::-;23139:80;;23224:13;23240:62;23278:8;-1:-1:-1;;;;;23271:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23271:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23271:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23271:30:0;23240:26;:7;23252:13;23240:26;:11;:26;:::i;:62::-;23323:9;;-1:-1:-1;23224:78:0;;-1:-1:-1;;;;;22809:542:0;;:::o;6550:47::-;;;;;;;;;;;;;;;:::o;23664:269::-;-1:-1:-1;;;;;23763:13:0;;23728:4;23763:13;;;:8;:13;;;;;23787:18;;;;23783:146;;23828:1;23821:8;;;;;23783:146;23904:4;:18;;;23858:43;23867:4;:15;;;23884:16;;23858:8;:43::i;:::-;:64;23850:73;;;;;6520:26;;;;;;;;;;5797:39;;;;;;;;;:::o;20311:1166::-;20389:10;20356:21;20380:20;;;:8;:20;;;;;20467:18;;;;20430:15;;20447:16;;20489:15;;20467:18;20421:43;;:8;:43::i;:::-;:64;:83;;20413:117;;;;;-1:-1:-1;;;20413:117:0;;;;;;;;;;;;-1:-1:-1;;;20413:117:0;;;;;;;;;;;;;;;20566:6;20543:4;:19;;;:29;;20535:101;;;;-1:-1:-1;;;20535:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20658:1;20649:6;:10;20641:59;;;;-1:-1:-1;;;20641:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20733:15;:13;:15::i;:::-;20778:25;20792:10;20778:13;:25::i;:::-;20871:19;;;;:31;;20895:6;20871:31;:23;:31;:::i;:::-;20849:19;;;:53;20967:16;;;;20929:19;;20951:33;;:15;:33::i;:::-;21016:11;;;;21052:19;;;;20929:55;;-1:-1:-1;21016:11:0;21052:49;;21093:7;;21052:36;;20929:55;21052:36;:23;:36;:::i;:49::-;21038:11;;;:63;;;21120:50;;21136:33;;:16;;:33;:20;:33;:::i;:::-;21120:11;;;:50;:15;:50;:::i;:::-;21106:11;:64;21218:45;;;-1:-1:-1;;;21218:45:0;;21244:10;21218:45;;;;;;;;;;;;-1:-1:-1;;;;;21225:8:0;21218:25;;;;:45;;;;;;;;;;;;;;-1:-1:-1;21218:25:0;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;21218:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21218:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21218:45:0;21210:83;;;;;-1:-1:-1;;;21210:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21362:38;21395:4;21362:28;21378:11;;21362:4;:11;;;:15;;:28;;;;:::i;:38::-;21347:12;;;:53;21426:1;21405:18;;;:22;21439:30;;;;;;;;21450:10;;21439:30;;;;;;;;;;20311:1166;;;;:::o;7490:129::-;7537:10;-1:-1:-1;;;;;7551:13:0;7537:27;;7529:60;;;;;-1:-1:-1;;;7529:60:0;;;;;;;;;;;;-1:-1:-1;;;7529:60:0;;;;;;;;;;;;;;;7597:10;:17;;-1:-1:-1;;7597:17:0;7610:4;7597:17;;;7490:129::o;22259:321::-;22328:1;22308:17;;:21;22300:77;;;;-1:-1:-1;;;22300:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22440:17;;;22423:14;22462:21;;;22503:12;;:24;;22440:17;22503:24;:16;:24;:::i;:::-;22488:12;:39;;;;22539:3;-1:-1:-1;;;;;22532:20:0;;22553:13;22568:6;22532:43;;;;;;;;;;;;;-1:-1:-1;;;;;22532:43:0;-1:-1:-1;;;;;22532:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22532:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22532:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;22259:321:0:o;5898:27::-;;;;:::o;6043:26::-;;;;:::o;12857:913::-;12902:14;;:18;12898:868;;12932:11;;:16;12928:833;;13029:14;;13012:12;;:32;;;:16;:32;:::i;:::-;12997:12;:47;13095:6;;13076:14;;13056:17;;13076:36;;13107:4;;13076:26;;:14;:26;:18;:26;:::i;:36::-;13056:56;;13122:17;13142:29;13161:9;13142:14;;:18;;:29;;;;:::i;:::-;13122:49;-1:-1:-1;13204:12:0;13219:38;13254:2;13220:28;:15;13240:7;13220:28;:19;:28;:::i;:::-;13219:34;:38;:34;:38;:::i;:::-;13204:53;;13334:34;13361:6;13334:16;13351:4;13334:22;;;;;;;;;;:34;:26;:34;:::i;:::-;13315:15;:53;13311:151;;13403:15;13378:16;13395:4;13378:22;;;;;;;;:40;13453:1;13426:18;13445:4;13426:24;;;;;;;;:28;13311:151;13524:39;13553:9;13524:18;13543:4;13524:24;;;;;;:39;13497:18;13516:4;13497:24;;;;;;;;:66;13592:17;;:32;;13614:9;13592:32;:21;:32;:::i;:::-;13572:17;:52;13685:11;;13645:53;;13661:36;;:19;:9;13675:4;13661:19;:13;:19;:::i;:36::-;13645:11;;;:53;:15;:53;:::i;:::-;13631:11;:67;-1:-1:-1;;13753:1:0;13736:14;:18;-1:-1:-1;12928:833:0;12857:913::o;14799:260::-;-1:-1:-1;;;;;14873:13:0;;14849:21;14873:13;;;:8;:13;;;;;14989:12;;;;14962:11;;14946;;;;14873:13;;14849:21;14946:56;;14989:12;14946:38;;14979:4;;14946:28;;:11;:28;:15;:28;:::i;:56::-;15024:14;;;;14925:77;;-1:-1:-1;15024:30:0;;14925:77;15024:30;:18;:30;:::i;:::-;15007:4;:14;;:47;;;;14799:260;;;:::o;18897:1192::-;18939:7;18996:14;19020:4;-1:-1:-1;;;;;19013:22:0;;19036:8;19013:32;;;;;;;;;;;;;-1:-1:-1;;;;;19013:32:0;-1:-1:-1;;;;;19013:32:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19013:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19013:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19013:32:0;19147:36;;;-1:-1:-1;;;19147:36:0;;19177:4;19147:36;;;;;;19013:32;;-1:-1:-1;19124:20:0;;-1:-1:-1;;;;;19154:3:0;19147:21;;;;:36;;;;;19013:32;;19147:36;;;;;;;:21;:36;;;2:2:-1;;;;27:1;24;17:12;2:2;19147:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19147:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19147:36:0;;-1:-1:-1;19225:11:0;19239:44;19250:21;19273:9;19239:10;:44::i;:::-;19352:16;;;19366:1;19352:16;;;19328:21;19352:16;;;;;19225:58;;-1:-1:-1;19352:16:0;;;;;;;109:14:-1;19352:16:0;88:42:-1;144:17;;-1:-1;19352:16:0;19328:40;;19383:4;19373;19378:1;19373:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;19373:14:0;;;-1:-1:-1;;;;;19373:14:0;;;;;19402:3;19392:4;19397:1;19392:7;;;;;;;;;;;;;:13;-1:-1:-1;;;;;19392:13:0;;;-1:-1:-1;;;;;19392:13:0;;;;;19451:9;-1:-1:-1;;;;;19432:80:0;;19520:6;19528:1;19531:4;19545;19552:15;19570:10;19552:28;19432:149;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19432:149:0;-1:-1:-1;;;;;19432:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19432:149:0;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19432:149:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19432:149:0;;;;;19624:14;19641:57;19682:15;19648:3;-1:-1:-1;;;;;19641:21:0;;19671:4;19641:36;;;;;;;;;;;;;-1:-1:-1;;;;;19641:36:0;-1:-1:-1;;;;;19641:36:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;19641:57:0;19624:74;;19775:1;19763:9;:13;19755:54;;;;;-1:-1:-1;;;19755:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19829:3;-1:-1:-1;;;;;19822:19:0;;19842:9;19853;19822:41;;;;;;;;;;;;;-1:-1:-1;;;;;19822:41:0;-1:-1:-1;;;;;19822:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19822:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19822:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19822:41:0;19814:69;;;;;-1:-1:-1;;;19814:69:0;;;;;;;;;;;;-1:-1:-1;;;19814:69:0;;;;;;;;;;;;;;;19915:142;;;-1:-1:-1;;;19915:142:0;;-1:-1:-1;;;;;19991:3:0;19915:142;;;;;;;;;;;;20007:1;19915:142;;;;;;;;;;20021:4;19915:142;;;;20028:15;20046:10;20028:28;19915:142;;;;;;-1:-1:-1;;19934:9:0;19915:45;;;;19968:21;;19915:142;;;;;;;;;;;;;;;19968:21;19915:45;:142;;;2:2:-1;;;;27:1;24;17:12;2:2;19915:142:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19915:142:0;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19915:142:0;;;;-1:-1:-1;;;;;;;18897:1192:0;:::o;17549:1299::-;17620:10;17587:21;17611:20;;;:8;:20;;;;;17644:19;;;;5497;-1:-1:-1;17636:114:0;;;;-1:-1:-1;;;17636:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17757:22;17782:38;17783:21;17810:9;17782:38;:27;:38;:::i;:::-;17757:63;;5579:20;17833:17;:39;17825:124;;;;-1:-1:-1;;;17825:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17956:16;;18032:97;18041:42;5579:20;18065:17;18041:42;:23;:42;:::i;:::-;18108:19;;;;18085:43;;5497:19;;18085:43;:22;:43;:::i;:::-;18032:8;:97::i;:::-;18015:114;;18184:9;18172;:21;18168:373;;;18215:9;18201:23;;18281:36;18305:11;18281:4;:19;;;:23;;:36;;;;:::i;:::-;18259:19;;;:58;18350:51;18360:10;18372:28;18373:9;18388:11;18372:28;:15;:28;:::i;:::-;18350:9;:51::i;:::-;18168:373;;;18499:19;;;;18433:9;;-1:-1:-1;18499:36:0;;18433:9;18499:36;:23;:36;:::i;:::-;18477:19;;;:58;18168:373;5579:20;18593:21;:44;18589:83;;18648:10;:18;;-1:-1:-1;;18648:18:0;;;18589:83;18747:10;18731:27;;;;:15;:27;;;;;;;;18726:118;;18769:9;27:10:-1;;39:1;23:18;;;45:23;;;18769:26:0;;;;-1:-1:-1;;;;;;18769:26:0;18784:10;18769:26;;;;;;-1:-1:-1;18804:27:0;;;:15;18769:26;18804:27;;;;:34;;-1:-1:-1;;18804:34:0;;;;;;18726:118;17549:1299;;;;:::o;13805:955::-;-1:-1:-1;;;;;13912:13:0;;13888:21;13912:13;;;:8;:13;;;;;13984:15;13966:33;;14129:19;:6;14140:7;14129:19;:10;:19;:::i;:::-;14108:4;:18;;;:40;14104:129;;;14177:19;:6;14188:7;14177:19;:10;:19;:::i;:::-;14156:18;;;:40;14202:16;;;:25;;;14104:129;14266:19;14288:33;14304:4;:16;;;14288:15;:33::i;:::-;14378:19;;;;14266:55;;-1:-1:-1;14378:35:0;;14402:10;14378:35;:23;:35;:::i;:::-;14356:19;;;:57;;;14494:11;;;;;14530:45;;14571:3;;14530:36;;14554:11;14530:36;:23;:36;:::i;:45::-;14516:11;;;:59;;;14594:11;;:50;;14627:16;;14594:28;;;:15;:28;:::i;:50::-;14580:11;:64;14733:11;;14717;;;;:38;;14750:4;;14717:28;;;:15;:28;:::i;:38::-;14702:4;:12;;:53;;;;13805:955;;;;;;:::o;750:216::-;808:7;832:6;828:23;;-1:-1:-1;848:1:0;841:8;;828:23;873:5;;;877:1;873;:5;:1;897:5;;;;;:10;889:56;;;;-1:-1:-1;;;889:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1933:303;1978:6;2005:1;2001;:5;1997:232;;;-1:-1:-1;2027:1:0;2060;2056;2052:5;;:9;2076:92;2087:1;2083;:5;2076:92;;;2113:1;2109:5;;2151:1;2146;2142;2138;:5;;;;;;:9;2137:15;;;;;;2133:19;;2076:92;;;1997:232;;;;2189:6;;2185:44;;-1:-1:-1;2216:1:0;1933:303;;;:::o;974:126::-;1032:7;1059:39;1063:1;1066;1059:39;;;;;;;;;;;;;;;;;:3;:39::i;420:130::-;478:7;505:43;509:1;512;505:43;;;;;;;;;;;;;;;;;:3;:43::i;239:173::-;297:7;329:5;;;353:6;;;;345:46;;;;;-1:-1:-1;;;345:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9696:397;9811:6;9786:21;:31;;9778:73;;;;;-1:-1:-1;;;9778:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9961:35;;9943:12;;-1:-1:-1;;;;;9961:14:0;;;9984:6;;9943:12;9961:35;9943:12;9961:35;9984:6;9961:14;:35;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;9942:54:0;;;10015:7;10007:78;;;;-1:-1:-1;;;10007:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16444:369;16590:66;;;-1:-1:-1;;;16590:66:0;;16620:10;16590:66;;;;16640:4;16590:66;;;;;;;;;;;;-1:-1:-1;;;;;16597:8:0;16590:29;;;;:66;;;;;;;;;;;;;;-1:-1:-1;16590:29:0;:66;;;2:2:-1;;;;27:1;24;17:12;2:2;16590:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16590:66:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16590:66:0;16582:101;;;;;-1:-1:-1;;;16582:101:0;;;;;;;;;;;;-1:-1:-1;;;16582:101:0;;;;;;;;;;;;;;;16717:40;16728:10;16740:6;16748:8;16717:10;:40::i;:::-;16769:39;;;;;;;;;;;;;;16779:10;;16769:39;;;;;;;;16444:369;;:::o;15781:612::-;15882:10;15849:21;15873:20;;;:8;:20;;;;;;;;15969:54;;-1:-1:-1;;;15969:54:0;;;;;;;;;;;;;;;;;15873:20;;15979:8;-1:-1:-1;;;;;15969:32:0;;;;:54;;;;;;;;;;15849:21;15969:32;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;15969:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15969:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15969:54:0;16054:21;;;;15969:54;;-1:-1:-1;16054:38:0;;15969:54;16054:38;:25;:38;:::i;:::-;16030:21;;;:62;16168:10;16152:27;;;;:15;:27;;;;;;;;16147:118;;16190:9;27:10:-1;;39:1;23:18;;;45:23;;;16190:26:0;;;;-1:-1:-1;;;;;;16190:26:0;16205:10;16190:26;;;;;;-1:-1:-1;16225:27:0;;;:15;16190:26;16225:27;;;;:34;;-1:-1:-1;;16225:34:0;;;;;;16147:118;16298:33;16309:10;16321:6;16329:1;16298:10;:33::i;:::-;16343:45;;;;;;;;;;;;;;16356:10;;16343:45;;;;;;;;15781:612;;;;:::o;1299:124::-;1357:7;1384:37;1388:1;1391;1384:37;;;;;;;;;;;;;;;;;:3;:37::i;1617:96::-;1669:6;1696:1;1692;:5;:13;;1704:1;1692:13;;;-1:-1:-1;1700:1:0;1688:17;-1:-1:-1;1617:96:0:o;10568:240::-;10636:19;10716:2;10702:11;:16;:62;;10736:8;10745:18;:11;10761:1;10745:18;:15;:18;:::i;:::-;10736:28;;;;;;;;;10702:62;;;10730:2;10721:12;10702:62;10688:76;-1:-1:-1;10783:20:0;10688:76;10799:3;10783:20;:15;:20;:::i;10278:283::-;10336:13;;10370:74;10380:63;10425:17;10438:3;10425:8;10431:1;;10425:8;:5;:8;:::i;:::-;:12;:17;:12;:17;:::i;:::-;10380:40;10402:17;10415:3;10402:8;:1;10408;10402:8;:5;:8;:::i;:17::-;10381:15;10394:1;10381:8;10387:1;;10381:8;:5;:8;:::i;:15::-;10380:21;:40;:21;:40;:::i;10370:74::-;10356:88;-1:-1:-1;10449:6:0;10458:66;10512:11;:1;10518:4;10512:11;:5;:11;:::i;:::-;10458:49;10502:4;10459:37;10484:11;:1;10490:4;10484:11;:5;:11;:::i;:::-;10459:20;10470:8;:1;10476;10470:8;:5;:8;:::i;:::-;10459:6;;:20;:10;:20;:::i;10458:66::-;10449:75;-1:-1:-1;10538:18:0;10551:4;10538:8;10449:75;10544:1;10538:8;:5;:8;:::i;:18::-;10531:25;10278:283;-1:-1:-1;;;;;10278:283:0:o;1719:96::-;1771:6;1798:1;1794;:5;:13;;1806:1;1794:13;;;-1:-1:-1;1802:1:0;;1790:17;-1:-1:-1;1719:96:0:o;1108:183::-;1194:7;1229:12;1222:5;1214:28;;;;-1:-1:-1;;;1214:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1214:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1253:9;1269:1;1265;:5;;;;;;;1108:183;-1:-1:-1;;;;;1108:183:0:o;558:184::-;644:7;680:12;672:6;;;;664:29;;;;-1:-1:-1;;;664:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;664:29:0;-1:-1:-1;;;716:5:0;;;558:184::o;1431:160::-;1517:7;1553:12;1545:6;1537:29;;;;-1:-1:-1;;;1537:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1537:29:0;;1588:1;1584;:5;;;;;;;1431:160;-1:-1:-1;;;;1431:160:0:o

Swarm Source

ipfs://0f06b69151ea54f1e7b28e0e5191b70ae71143bdfff7686ac0ee9edcdf897599

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.