Contract 0x8C3736e2FE63cc2cD89Ee228D9dBcAb6CE5B767B 8

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1b00886ced7d4332208b66cc43f417d9d6ff9e89fce78f1fd47559318b2a25e2_accept Reserves...22124262022-07-16 19:10:12132 days 18 hrs ago0x5ec869c1cb378bb77bc55bb56129399f6828c8c5 IN  Impermax: Factory0 MOVR0.0022872
0x053d3cc14958f127f02d8f4d17a95dc02daa711867a34abb27dde7a748c7aa3f_accept Admin22124252022-07-16 19:09:36132 days 18 hrs ago0x5ec869c1cb378bb77bc55bb56129399f6828c8c5 IN  Impermax: Factory0 MOVR0.000068508
0x244a848ed148ddc2163156d46013675b240305ee46332c4fdee3a60f78a0e848_set Reserves Pe...22124232022-07-16 19:09:12132 days 18 hrs ago0x052df909ebde5ec8b38cc90734633a906cd3c204 IN  Impermax: Factory0 MOVR0.000141963
0x47bf0de5daeb72a73f4294bceca5ea37e6e358728d2d581ea29cc4a35360b50c_set Reserves Ma...22124222022-07-16 19:09:00132 days 18 hrs ago0x052df909ebde5ec8b38cc90734633a906cd3c204 IN  Impermax: Factory0 MOVR0.000082257
0x2c1f2719d25d44125655bccaf0cc877151e8bbe01e2c1877d8c89102ef538842_set Pending Adm...22124202022-07-16 19:08:30132 days 18 hrs ago0x04825ca4d96064bd08605013d19cb7e108ff03d4 IN  Impermax: Factory0 MOVR0.00014196
0x963398e50cdf372d6cb6ca0771ff2da4b072ad520766be65fae9f49c175db622Initialize Lendi...15693322022-03-08 12:12:06263 days 59 mins ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.00102797
0x88a2d0902ebc72a2d72ebf23008bee6515ac567bd106983136164bc87cbb41ceInitialize Lendi...15693282022-03-08 12:10:36263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.00007383
0xf8dcca4b74731417da3f8917198e9e19f3e0f6192dee396463b576ff81a6fdc3Create Collatera...15693192022-03-08 12:07:54263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.00649568
0x206779fd61f0f61011e46d2caebedd4fd1436d5deaf4280103a910cb58c1a2d2Create Borrowabl...15693192022-03-08 12:07:54263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.007577528
0x461b2f4f570eca9d4a62c12f42fc61c729cca5e394b7439427a140ca27d58c30Create Borrowabl...15693162022-03-08 12:07:00263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.007672356
0x7800023bd0c25fc6cf116a0ee6601c92b3a029007c7478d033e2fced354bad38Initialize Lendi...15693002022-03-08 12:00:42263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.00102797
0x5796bc7202bb9aa3c400c1d7c2bd3df0480a67c1369ed0217dfafb075472ab72Create Collatera...15692982022-03-08 12:00:00263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.00649568
0xb9152fc1b8de454a241aa7135c5db8d2b3bf57f698a780dd7f0daab036d2f7dcCreate Borrowabl...15692982022-03-08 12:00:00263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.007577528
0xaa9391bec5abd83cbdade904dda73ae1fdd3770d8f8ec417921affd6b163603dCreate Borrowabl...15692972022-03-08 11:59:36263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.007672356
0x2b69842963a1be6c3b5d11254314ccec172986dba351b3ff875a6f780d00d6f4Initialize Lendi...15691732022-03-08 11:16:54263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.00102797
0xd8a18a7fde7e733a381cb11fcfcbab92000727d307b5a63fa5263aaa11ba9797Create Collatera...15691722022-03-08 11:15:54263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.00649568
0xacb39494d7e2bcc16fb03c966c4d5befa4fde917c5bc152435d79a56f521dfcdCreate Borrowabl...15691652022-03-08 11:14:00263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.007577528
0xdd7fa43e929a1ab213b3a224a96fb5df16299354e2b36e7b3dc88247555a719dCreate Borrowabl...15691622022-03-08 11:12:24263 days 1 hr ago0x25744247a760dd8c73eaa81307e1ff827e8bcfa3 IN  Impermax: Factory0 MOVR0.007672356
0x1d58efd783c3b23119fdc64433a5db5d876a33618f1aa11463c7a88469d2413fInitialize Lendi...9893012021-11-29 15:13:36361 days 21 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 MOVR0.000463938
0xf9981b362c7e4bb91ac7a2c7dccf01ce25256b1cea983b0d814402a7b37ea0c9Create Collatera...9892902021-11-29 15:11:12361 days 22 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 MOVR0.003236839
0xddcd7bb7407cb6e2278c6cd547debcd4acb310337537e056ac1abde603815197Create Borrowabl...9892902021-11-29 15:11:12361 days 22 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 MOVR0.003770363
0xfcedf4cdf2fc03943336e6821fdf587558c507ee458de9b800fd461c820cf166Create Borrowabl...9892902021-11-29 15:11:12361 days 22 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 MOVR0.003818077
0xe2dee0709bd0646ff85912f03648769821b3abce94ae7a6084ac24a9991a619fInitialize Lendi...9673152021-11-25 20:26:06365 days 16 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 MOVR0.000471585
0x14eeac633f17aee6a5822dfeb2df854154c20b80463d1b049829290843ea734aInitialize Lendi...9673082021-11-25 20:22:36365 days 16 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 MOVR0.000471585
0x85d5d5f68ef1006d6216d55fe0136d97032338682514ddd47847e7597baa7654Create Collatera...9673082021-11-25 20:22:36365 days 16 hrs ago0x9fc5341db9a9cdf8337b4bd286d4cfc03b20ad35 IN  Impermax: Factory0 MOVR0.00323714
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Factory

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonriver.moonscan.io on 2021-11-15
*/

// File: contracts\interfaces\IFactory.sol

pragma solidity >=0.5.0;

interface IFactory {
	event LendingPoolInitialized(address indexed uniswapV2Pair, address indexed token0, address indexed token1,
		address collateral, address borrowable0, address borrowable1, uint lendingPoolId);
	event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);
	event NewAdmin(address oldAdmin, address newAdmin);
	event NewReservesPendingAdmin(address oldReservesPendingAdmin, address newReservesPendingAdmin);
	event NewReservesAdmin(address oldReservesAdmin, address newReservesAdmin);
	event NewReservesManager(address oldReservesManager, address newReservesManager);
	
	function admin() external view returns (address);
	function pendingAdmin() external view returns (address);
	function reservesAdmin() external view returns (address);
	function reservesPendingAdmin() external view returns (address);
	function reservesManager() external view returns (address);

	function getLendingPool(address uniswapV2Pair) external view returns (
		bool initialized, 
		uint24 lendingPoolId, 
		address collateral, 
		address borrowable0, 
		address borrowable1
	);
	function allLendingPools(uint) external view returns (address uniswapV2Pair);
	function allLendingPoolsLength() external view returns (uint);
	
	function bDeployer() external view returns (address);
	function cDeployer() external view returns (address);
	function simpleUniswapOracle() external view returns (address);

	function createCollateral(address uniswapV2Pair) external returns (address collateral);
	function createBorrowable0(address uniswapV2Pair) external returns (address borrowable0);
	function createBorrowable1(address uniswapV2Pair) external returns (address borrowable1);
	function initializeLendingPool(address uniswapV2Pair) external;

	function _setPendingAdmin(address newPendingAdmin) external;
	function _acceptAdmin() external;
	function _setReservesPendingAdmin(address newPendingAdmin) external;
	function _acceptReservesAdmin() external;
	function _setReservesManager(address newReservesManager) external;
}

// File: contracts\interfaces\IBDeployer.sol

pragma solidity >=0.5.0;

interface IBDeployer {
	function deployBorrowable(address uniswapV2Pair, uint8 index) external returns (address borrowable);
}

// File: contracts\interfaces\IBorrowable.sol

pragma solidity >=0.5.0;

interface IBorrowable {

	/*** Impermax ERC20 ***/
	
	event Transfer(address indexed from, address indexed to, uint value);
	event Approval(address indexed owner, address indexed spender, uint value);
	
	function name() external pure returns (string memory);
	function symbol() external pure returns (string memory);
	function decimals() external pure returns (uint8);
	function totalSupply() external view returns (uint);
	function balanceOf(address owner) external view returns (uint);
	function allowance(address owner, address spender) external view returns (uint);
	function approve(address spender, uint value) external returns (bool);
	function transfer(address to, uint value) external returns (bool);
	function transferFrom(address from, address to, uint value) external returns (bool);
	
	function DOMAIN_SEPARATOR() external view returns (bytes32);
	function PERMIT_TYPEHASH() external pure returns (bytes32);
	function nonces(address owner) external view returns (uint);
	function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
	
	/*** Pool Token ***/
	
	event Mint(address indexed sender, address indexed minter, uint mintAmount, uint mintTokens);
	event Redeem(address indexed sender, address indexed redeemer, uint redeemAmount, uint redeemTokens);
	event Sync(uint totalBalance);
	
	function underlying() external view returns (address);
	function factory() external view returns (address);
	function totalBalance() external view returns (uint);
	function MINIMUM_LIQUIDITY() external pure returns (uint);

	function exchangeRate() external returns (uint);
	function mint(address minter) external returns (uint mintTokens);
	function redeem(address redeemer) external returns (uint redeemAmount);
	function skim(address to) external;
	function sync() external;
	
	function _setFactory() external;
	
	/*** Borrowable ***/

	event BorrowApproval(address indexed owner, address indexed spender, uint value);
	event Borrow(address indexed sender, address indexed borrower, address indexed receiver, uint borrowAmount, uint repayAmount, uint accountBorrowsPrior, uint accountBorrows, uint totalBorrows);
	event Liquidate(address indexed sender, address indexed borrower, address indexed liquidator, uint seizeTokens, uint repayAmount, uint accountBorrowsPrior, uint accountBorrows, uint totalBorrows);
	
	function BORROW_FEE() external pure returns (uint);
	function collateral() external view returns (address);
	function reserveFactor() external view returns (uint);
	function exchangeRateLast() external view returns (uint);
	function borrowIndex() external view returns (uint);
	function totalBorrows() external view returns (uint);
	function borrowAllowance(address owner, address spender) external view returns (uint);
	function borrowBalance(address borrower) external view returns (uint);	
	function borrowTracker() external view returns (address);
	
	function BORROW_PERMIT_TYPEHASH() external pure returns (bytes32);
	function borrowApprove(address spender, uint256 value) external returns (bool);
	function borrowPermit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
	function borrow(address borrower, address receiver, uint borrowAmount, bytes calldata data) external;
	function liquidate(address borrower, address liquidator) external returns (uint seizeTokens);
	function trackBorrow(address borrower) external;
	
	/*** Borrowable Interest Rate Model ***/

	event AccrueInterest(uint interestAccumulated, uint borrowIndex, uint totalBorrows);
	event CalculateKink(uint kinkRate);
	event CalculateBorrowRate(uint borrowRate);
	
	function KINK_BORROW_RATE_MAX() external pure returns (uint);
	function KINK_BORROW_RATE_MIN() external pure returns (uint);
	function KINK_MULTIPLIER() external pure returns (uint);
	function borrowRate() external view returns (uint);
	function kinkBorrowRate() external view returns (uint);
	function kinkUtilizationRate() external view returns (uint);
	function adjustSpeed() external view returns (uint);
	function rateUpdateTimestamp() external view returns (uint32);
	function accrualTimestamp() external view returns (uint32);
	
	function accrueInterest() external;
	
	/*** Borrowable Setter ***/

	event NewReserveFactor(uint newReserveFactor);
	event NewKinkUtilizationRate(uint newKinkUtilizationRate);
	event NewAdjustSpeed(uint newAdjustSpeed);
	event NewBorrowTracker(address newBorrowTracker);

	function RESERVE_FACTOR_MAX() external pure returns (uint);
	function KINK_UR_MIN() external pure returns (uint);
	function KINK_UR_MAX() external pure returns (uint);
	function ADJUST_SPEED_MIN() external pure returns (uint);
	function ADJUST_SPEED_MAX() external pure returns (uint);
	
	function _initialize (
		string calldata _name, 
		string calldata _symbol,
		address _underlying, 
		address _collateral
	) external;
	function _setReserveFactor(uint newReserveFactor) external;
	function _setKinkUtilizationRate(uint newKinkUtilizationRate) external;
	function _setAdjustSpeed(uint newAdjustSpeed) external;
	function _setBorrowTracker(address newBorrowTracker) external;
}

// File: contracts\interfaces\ICDeployer.sol

pragma solidity >=0.5.0;

interface ICDeployer {
	function deployCollateral(address uniswapV2Pair) external returns (address collateral);
}

// File: contracts\interfaces\ICollateral.sol

pragma solidity >=0.5.0;

interface ICollateral {

	/*** Impermax ERC20 ***/
	
	event Transfer(address indexed from, address indexed to, uint value);
	event Approval(address indexed owner, address indexed spender, uint value);
	
	function name() external pure returns (string memory);
	function symbol() external pure returns (string memory);
	function decimals() external pure returns (uint8);
	function totalSupply() external view returns (uint);
	function balanceOf(address owner) external view returns (uint);
	function allowance(address owner, address spender) external view returns (uint);
	function approve(address spender, uint value) external returns (bool);
	function transfer(address to, uint value) external returns (bool);
	function transferFrom(address from, address to, uint value) external returns (bool);
	
	function DOMAIN_SEPARATOR() external view returns (bytes32);
	function PERMIT_TYPEHASH() external pure returns (bytes32);
	function nonces(address owner) external view returns (uint);
	function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
	
	/*** Pool Token ***/
	
	event Mint(address indexed sender, address indexed minter, uint mintAmount, uint mintTokens);
	event Redeem(address indexed sender, address indexed redeemer, uint redeemAmount, uint redeemTokens);
	event Sync(uint totalBalance);
	
	function underlying() external view returns (address);
	function factory() external view returns (address);
	function totalBalance() external view returns (uint);
	function MINIMUM_LIQUIDITY() external pure returns (uint);

	function exchangeRate() external returns (uint);
	function mint(address minter) external returns (uint mintTokens);
	function redeem(address redeemer) external returns (uint redeemAmount);
	function skim(address to) external;
	function sync() external;
	
	function _setFactory() external;
	
	/*** Collateral ***/
	
	function borrowable0() external view returns (address);
	function borrowable1() external view returns (address);
	function simpleUniswapOracle() external view returns (address);
	function safetyMarginSqrt() external view returns (uint);
	function liquidationIncentive() external view returns (uint);
	
	function getPrices() external returns (uint price0, uint price1);
	function tokensUnlocked(address from, uint value) external returns (bool);
	function accountLiquidityAmounts(address account, uint amount0, uint amount1) external returns (uint liquidity, uint shortfall);
	function accountLiquidity(address account) external returns (uint liquidity, uint shortfall);
	function canBorrow(address account, address borrowable, uint accountBorrows) external returns (bool);
	function seize(address liquidator, address borrower, uint repayAmount) external returns (uint seizeTokens);
	function flashRedeem(address redeemer, uint redeemAmount, bytes calldata data) external;
	
	/*** Collateral Setter ***/
	
	event NewSafetyMargin(uint newSafetyMarginSqrt);
	event NewLiquidationIncentive(uint newLiquidationIncentive);

	function SAFETY_MARGIN_SQRT_MIN() external pure returns (uint);
	function SAFETY_MARGIN_SQRT_MAX() external pure returns (uint);
	function LIQUIDATION_INCENTIVE_MIN() external pure returns (uint);
	function LIQUIDATION_INCENTIVE_MAX() external pure returns (uint);
	
	function _initialize (
		string calldata _name, 
		string calldata _symbol,
		address _underlying, 
		address _borrowable0, 
		address _borrowable1
	) external;
	function _setSafetyMarginSqrt(uint newSafetyMarginSqrt) external;
	function _setLiquidationIncentive(uint newLiquidationIncentive) external;
}

// File: contracts\interfaces\IERC20.sol

pragma solidity >=0.5.0;

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);
}

// File: contracts\interfaces\IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

    function name() external 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 token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);
}

// File: contracts\interfaces\ISimpleUniswapOracle.sol

pragma solidity >=0.5.0;

interface ISimpleUniswapOracle {
	event PriceUpdate(address indexed pair, uint256 priceCumulative, uint32 blockTimestamp, bool lastIsA);
	function MIN_T() external pure returns (uint32);
	function getBlockTimestamp() external view returns (uint32);
	function getPair(address uniswapV2Pair) external view returns (
		uint256 priceCumulativeA,
		uint256 priceCumulativeB,
		uint32 updateA,
		uint32 updateB,
		bool lastIsA,
		bool initialized
	);
	function initialize(address uniswapV2Pair) external;
	function getResult(address uniswapV2Pair) external returns (uint224 price, uint32 T);
}

// File: contracts\Factory.sol

pragma solidity =0.5.16;









contract Factory is IFactory {
	address public admin;
	address public pendingAdmin;
	address public reservesAdmin;
	address public reservesPendingAdmin;
	address public reservesManager;
		
	struct LendingPool {
		bool initialized;
		uint24 lendingPoolId;
		address collateral;
		address borrowable0;
		address borrowable1;
	}
	mapping(address => LendingPool) public getLendingPool; // get by UniswapV2Pair
	address[] public allLendingPools; // address of the UniswapV2Pair
	function allLendingPoolsLength() external view returns (uint) {
		return allLendingPools.length;
	}
	
	IBDeployer public bDeployer;
	ICDeployer public cDeployer;
	ISimpleUniswapOracle public simpleUniswapOracle;
	
	event LendingPoolInitialized(address indexed uniswapV2Pair, address indexed token0, address indexed token1,
		address collateral, address borrowable0, address borrowable1, uint lendingPoolId);
	event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);
	event NewAdmin(address oldAdmin, address newAdmin);
	event NewReservesPendingAdmin(address oldReservesPendingAdmin, address newReservesPendingAdmin);
	event NewReservesAdmin(address oldReservesAdmin, address newReservesAdmin);
	event NewReservesManager(address oldReservesManager, address newReservesManager);
	
	constructor(address _admin, address _reservesAdmin, IBDeployer _bDeployer, ICDeployer _cDeployer, ISimpleUniswapOracle _simpleUniswapOracle) public {
		admin = _admin;
		reservesAdmin = _reservesAdmin;
		bDeployer = _bDeployer;
		cDeployer = _cDeployer;
		simpleUniswapOracle = _simpleUniswapOracle;
		emit NewAdmin(address(0), _admin);
		emit NewReservesAdmin(address(0), _reservesAdmin);
	}
	
	function _getTokens(address uniswapV2Pair) private view returns (address token0, address token1) {
		token0 = IUniswapV2Pair(uniswapV2Pair).token0();
		token1 = IUniswapV2Pair(uniswapV2Pair).token1();
	}
	
	function _createLendingPool(address uniswapV2Pair) private {
		if (getLendingPool[uniswapV2Pair].lendingPoolId != 0) return;
		allLendingPools.push(uniswapV2Pair);		
		getLendingPool[uniswapV2Pair] = LendingPool(false, uint24(allLendingPools.length), address(0), address(0), address(0));
	}
	
	function createCollateral(address uniswapV2Pair) external returns (address collateral) {
		_getTokens(uniswapV2Pair);
		require(getLendingPool[uniswapV2Pair].collateral == address(0), "Impermax: ALREADY_EXISTS");		
		collateral = cDeployer.deployCollateral(uniswapV2Pair);
		ICollateral(collateral)._setFactory();
		_createLendingPool(uniswapV2Pair);
		getLendingPool[uniswapV2Pair].collateral = collateral;
	}
	
	function createBorrowable0(address uniswapV2Pair) external returns (address borrowable0) {
		_getTokens(uniswapV2Pair);
		require(getLendingPool[uniswapV2Pair].borrowable0 == address(0), "Impermax: ALREADY_EXISTS");		
		borrowable0 = bDeployer.deployBorrowable(uniswapV2Pair, 0);
		IBorrowable(borrowable0)._setFactory();
		_createLendingPool(uniswapV2Pair);
		getLendingPool[uniswapV2Pair].borrowable0 = borrowable0;
	}
	
	function createBorrowable1(address uniswapV2Pair) external returns (address borrowable1) {
		_getTokens(uniswapV2Pair);
		require(getLendingPool[uniswapV2Pair].borrowable1 == address(0), "Impermax: ALREADY_EXISTS");		
		borrowable1 = bDeployer.deployBorrowable(uniswapV2Pair, 1);
		IBorrowable(borrowable1)._setFactory();
		_createLendingPool(uniswapV2Pair);
		getLendingPool[uniswapV2Pair].borrowable1 = borrowable1;
	}
	
	function initializeLendingPool(address uniswapV2Pair) external {
		(address token0, address token1) = _getTokens(uniswapV2Pair);
		LendingPool memory lPool = getLendingPool[uniswapV2Pair];
		require(!lPool.initialized, "Impermax: ALREADY_INITIALIZED");
		
		require(lPool.collateral != address(0), "Impermax: COLLATERALIZABLE_NOT_CREATED");
		require(lPool.borrowable0 != address(0), "Impermax: BORROWABLE0_NOT_CREATED");
		require(lPool.borrowable1 != address(0), "Impermax: BORROWABLE1_NOT_CREATED");
		
		(,,,,,bool oracleInitialized) = simpleUniswapOracle.getPair(uniswapV2Pair);
		if (!oracleInitialized) simpleUniswapOracle.initialize(uniswapV2Pair);
		
		ICollateral(lPool.collateral)._initialize("Impermax Collateral", "imxC", uniswapV2Pair, lPool.borrowable0, lPool.borrowable1);
		IBorrowable(lPool.borrowable0)._initialize("Impermax Borrowable", "imxB", token0, lPool.collateral);
		IBorrowable(lPool.borrowable1)._initialize("Impermax Borrowable", "imxB", token1, lPool.collateral);
		
		getLendingPool[uniswapV2Pair].initialized = true;
		emit LendingPoolInitialized(uniswapV2Pair, token0, token1, lPool.collateral, lPool.borrowable0, lPool.borrowable1, lPool.lendingPoolId);
	}
	
	function _setPendingAdmin(address newPendingAdmin) external {
		require(msg.sender == admin, "Impermax: UNAUTHORIZED");
		address oldPendingAdmin = pendingAdmin;
		pendingAdmin = newPendingAdmin;
		emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);
	}

	function _acceptAdmin() external {
		require(msg.sender == pendingAdmin, "Impermax: UNAUTHORIZED");
		address oldAdmin = admin;
		address oldPendingAdmin = pendingAdmin;
		admin = pendingAdmin;
		pendingAdmin = address(0);
		emit NewAdmin(oldAdmin, admin);
		emit NewPendingAdmin(oldPendingAdmin, address(0));
	}
	
	function _setReservesPendingAdmin(address newReservesPendingAdmin) external {
		require(msg.sender == reservesAdmin, "Impermax: UNAUTHORIZED");
		address oldReservesPendingAdmin = reservesPendingAdmin;
		reservesPendingAdmin = newReservesPendingAdmin;
		emit NewReservesPendingAdmin(oldReservesPendingAdmin, newReservesPendingAdmin);
	}

	function _acceptReservesAdmin() external {
		require(msg.sender == reservesPendingAdmin, "Impermax: UNAUTHORIZED");
		address oldReservesAdmin = reservesAdmin;
		address oldReservesPendingAdmin = reservesPendingAdmin;
		reservesAdmin = reservesPendingAdmin;
		reservesPendingAdmin = address(0);
		emit NewReservesAdmin(oldReservesAdmin, reservesAdmin);
		emit NewReservesPendingAdmin(oldReservesPendingAdmin, address(0));
	}

	function _setReservesManager(address newReservesManager) external {
		require(msg.sender == reservesAdmin, "Impermax: UNAUTHORIZED");
		address oldReservesManager = reservesManager;
		reservesManager = newReservesManager;
		emit NewReservesManager(oldReservesManager, newReservesManager);
	}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_reservesAdmin","type":"address"},{"internalType":"contract IBDeployer","name":"_bDeployer","type":"address"},{"internalType":"contract ICDeployer","name":"_cDeployer","type":"address"},{"internalType":"contract ISimpleUniswapOracle","name":"_simpleUniswapOracle","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"uniswapV2Pair","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"collateral","type":"address"},{"indexed":false,"internalType":"address","name":"borrowable0","type":"address"},{"indexed":false,"internalType":"address","name":"borrowable1","type":"address"},{"indexed":false,"internalType":"uint256","name":"lendingPoolId","type":"uint256"}],"name":"LendingPoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesAdmin","type":"address"}],"name":"NewReservesAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesManager","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesManager","type":"address"}],"name":"NewReservesManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesPendingAdmin","type":"address"}],"name":"NewReservesPendingAdmin","type":"event"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_acceptReservesAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newReservesManager","type":"address"}],"name":"_setReservesManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newReservesPendingAdmin","type":"address"}],"name":"_setReservesPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allLendingPools","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allLendingPoolsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bDeployer","outputs":[{"internalType":"contract IBDeployer","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cDeployer","outputs":[{"internalType":"contract ICDeployer","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createBorrowable0","outputs":[{"internalType":"address","name":"borrowable0","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createBorrowable1","outputs":[{"internalType":"address","name":"borrowable1","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createCollateral","outputs":[{"internalType":"address","name":"collateral","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getLendingPool","outputs":[{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"uint24","name":"lendingPoolId","type":"uint24"},{"internalType":"address","name":"collateral","type":"address"},{"internalType":"address","name":"borrowable0","type":"address"},{"internalType":"address","name":"borrowable1","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"initializeLendingPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesManager","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesPendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"simpleUniswapOracle","outputs":[{"internalType":"contract ISimpleUniswapOracle","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50604051611e30380380611e30833981810160405260a081101561003357600080fd5b5080516020808301516040808501516060860151608090960151600080546001600160a01b03199081166001600160a01b03808a169182178455600280548416828a16179055600780548416828816179055600880548416828d161790556009805490931690851617909155845191825295810195909552825195969395919490927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92918290030190a160408051600081526001600160a01b038616602082015281517fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae7929181900390910190a15050505050611cfa806101366000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80639e1348e3116100cd578063d407112711610081578063e9c714f211610066578063e9c714f2146103c2578063eb5ab75f146103ca578063f851a440146103fd5761016c565b8063d40711271461039d578063db5a2690146103ba5761016c565b8063b658ca75116100b2578063b658ca7514610304578063b71d1a0c14610337578063cbed6d711461036a5761016c565b80639e1348e3146102c9578063b1ccc03e146102d15761016c565b8063714c0206116101245780637c6674b5116101095780637c6674b5146102af578063822d73b2146102b7578063998c077d146102bf5761016c565b8063714c02061461028d5780637a4660d5146102a75761016c565b80632678224711610155578063267822471461024a578063345ef9411461025257806349a788381461025a5761016c565b80630572bf5f1461017157806323c6145d146101ee575b600080fd5b6101a46004803603602081101561018757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610405565b60408051951515865262ffffff909416602086015273ffffffffffffffffffffffffffffffffffffffff928316858501529082166060850152166080830152519081900360a00190f35b6102216004803603602081101561020457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610459565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61022161068f565b6102216106ab565b6102216004803603602081101561027057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106c7565b6102956108fb565b60408051918252519081900360200190f35b610221610901565b61022161091d565b610221610939565b6102c7610955565b005b610221610ac0565b6102c7600480360360208110156102e757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610adc565b6102c76004803603602081101561031a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bea565b6102c76004803603602081101561034d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661134c565b6102216004803603602081101561038057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661145a565b610221600480360360208110156103b357600080fd5b503561168c565b6102216116c0565b6102c76116dc565b6102c7600480360360208110156103e057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611847565b610221611955565b60056020526000908152604090208054600182015460029092015460ff82169262ffffff6101008404169273ffffffffffffffffffffffffffffffffffffffff640100000000909104811692918116911685565b600061046482611971565b505073ffffffffffffffffffffffffffffffffffffffff8281166000908152600560205260409020546401000000009004161561050257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496d7065726d61783a20414c52454144595f4558495354530000000000000000604482015290519081900360640190fd5b600854604080517f7924fedd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519190921691637924fedd9160248083019260209291908290030181600087803b15801561057757600080fd5b505af115801561058b573d6000803e3d6000fd5b505050506040513d60208110156105a157600080fd5b5051604080517f4a5d316c000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff831691634a5d316c9160048082019260009290919082900301818387803b15801561060e57600080fd5b505af1158015610622573d6000803e3d6000fd5b5050505061062f82611a84565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526005602052604090208054928216640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9093169290921790915590565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60006106d282611971565b505073ffffffffffffffffffffffffffffffffffffffff828116600090815260056020526040902060010154161561076b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496d7065726d61783a20414c52454144595f4558495354530000000000000000604482015290519081900360640190fd5b600754604080517f54bcd7ad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260006024830181905292519316926354bcd7ad92604480840193602093929083900390910190829087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050506040513d602081101561081357600080fd5b5051604080517f4a5d316c000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff831691634a5d316c9160048082019260009290919082900301818387803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b505050506108a182611a84565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020526040902060010180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169282169290921790915590565b60065490565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b600280546003805473ffffffffffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffff000000000000000000000000000000000000000080861682179687905590921690925560408051938316808552949092166020840152815190927fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae792908290030190a16040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff163314610b6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b600080610bf683611971565b91509150610c02611c2f565b5073ffffffffffffffffffffffffffffffffffffffff808416600090815260056020908152604091829020825160a081018452815460ff8116158015835262ffffff61010083041694830194909452640100000000900485169381019390935260018101548416606084015260020154909216608082015290610ce657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496d7065726d61783a20414c52454144595f494e495449414c495a4544000000604482015290519081900360640190fd5b604081015173ffffffffffffffffffffffffffffffffffffffff16610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611c7f6026913960400191505060405180910390fd5b606081015173ffffffffffffffffffffffffffffffffffffffff16610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611ca56021913960400191505060405180910390fd5b608081015173ffffffffffffffffffffffffffffffffffffffff16610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c5e6021913960400191505060405180910390fd5b600954604080517f1a788a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291516000939290921691631a788a029160248082019260c092909190829003018186803b158015610ead57600080fd5b505afa158015610ec1573d6000803e3d6000fd5b505050506040513d60c0811015610ed757600080fd5b5060a00151905080610f7057600954604080517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529151919092169163c4d66de891602480830192600092919082900301818387803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b505050505b6040808301516060840151608085015183517fc548e3c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660448301529283166064820152908216608482015260a0600480830191909152601360a48301527f496d7065726d617820436f6c6c61746572616c0000000000000000000000000060c483015260e0602483015260e48201527f696d784300000000000000000000000000000000000000000000000000000000610104820152925191169163c548e3c59161012480830192600092919082900301818387803b15801561106957600080fd5b505af115801561107d573d6000803e3d6000fd5b505050606083015160408085015181517f6a030c1100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116604483015291821660648201526080600480830191909152601360848301527f496d7065726d617820426f72726f7761626c650000000000000000000000000060a483015260c0602483015260c48201527f696d78420000000000000000000000000000000000000000000000000000000060e4820152915192169250636a030c119161010480830192600092919082900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b5050505060808281015160408085015181517f6a030c1100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660448301529182166064820152600480820195909552601360848201527f496d7065726d617820426f72726f7761626c650000000000000000000000000060a482015260c0602482015260c48101949094527f696d78420000000000000000000000000000000000000000000000000000000060e48501529051911691636a030c119161010480830192600092919082900301818387803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff80871660008181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055868201516060808901516080808b01518b8601518751958a168652928916958501959095529387168386015262ffffff169082015291518885169550938916937f4c3ab495dc8ebd1b2f3232d7632e54411bc7e4d111475e7fbbd5547d9a28c4959281900390910190a45050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b600061146582611971565b505073ffffffffffffffffffffffffffffffffffffffff82811660009081526005602052604090206002015416156114fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496d7065726d61783a20414c52454144595f4558495354530000000000000000604482015290519081900360640190fd5b600754604080517f54bcd7ad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260016024830152915191909216916354bcd7ad9160448083019260209291908290030181600087803b15801561157a57600080fd5b505af115801561158e573d6000803e3d6000fd5b505050506040513d60208110156115a457600080fd5b5051604080517f4a5d316c000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff831691634a5d316c9160048082019260009290919082900301818387803b15801561161157600080fd5b505af1158015611625573d6000803e3d6000fd5b5050505061163282611a84565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020526040902060020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169282169290921790915590565b6006818154811061169957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461176257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b600080546001805473ffffffffffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffff000000000000000000000000000000000000000080861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a16040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146118cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496d7065726d61783a20554e415554484f52495a454400000000000000000000604482015290519081900360640190fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f324bacfad26225895fcf55780481bec4ce49013c92500fa1c25626ff43fbf661929181900390910190a15050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ba57600080fd5b505afa1580156119ce573d6000803e3d6000fd5b505050506040513d60208110156119e457600080fd5b5051604080517fd21220a7000000000000000000000000000000000000000000000000000000008152905191935073ffffffffffffffffffffffffffffffffffffffff85169163d21220a791600480820192602092909190829003018186803b158015611a5057600080fd5b505afa158015611a64573d6000803e3d6000fd5b505050506040513d6020811015611a7a57600080fd5b5051919391925050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020526040902054610100900462ffffff1615611abe57611c2c565b60068054600181810183557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831681179093556040805160a0810182526000808252965462ffffff90811660208381019182528385018a8152606085018b8152608086018c8152998c5260059092529490992092518354915194518616640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff95909316610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff9115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009093169290921716179290921691909117815594519385018054948216948316949094179093559051600290930180549390921692169190911790555b50565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091529056fe496d7065726d61783a20424f52524f5741424c45315f4e4f545f43524541544544496d7065726d61783a20434f4c4c41544552414c495a41424c455f4e4f545f43524541544544496d7065726d61783a20424f52524f5741424c45305f4e4f545f43524541544544a265627a7a723158205807900bcc8fa6f1ffa1c3e9e973b6883771749e476b79e288be00753ca8dcf164736f6c6343000510003200000000000000000000000004825ca4d96064bd08605013d19cb7e108ff03d4000000000000000000000000052df909ebde5ec8b38cc90734633a906cd3c20400000000000000000000000031864bc58a47a4fc8782b4135873788e876de9eb000000000000000000000000c12e00de204d58ead5b5ce9054e94aee7747fb6c0000000000000000000000005671b249391ca5e6a8fe28ceb1e85dc41c12ba7d

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

00000000000000000000000004825ca4d96064bd08605013d19cb7e108ff03d4000000000000000000000000052df909ebde5ec8b38cc90734633a906cd3c20400000000000000000000000031864bc58a47a4fc8782b4135873788e876de9eb000000000000000000000000c12e00de204d58ead5b5ce9054e94aee7747fb6c0000000000000000000000005671b249391ca5e6a8fe28ceb1e85dc41c12ba7d

-----Decoded View---------------
Arg [0] : _admin (address): 0x04825ca4d96064bd08605013d19cb7e108ff03d4
Arg [1] : _reservesAdmin (address): 0x052df909ebde5ec8b38cc90734633a906cd3c204
Arg [2] : _bDeployer (address): 0x31864bc58a47a4fc8782b4135873788e876de9eb
Arg [3] : _cDeployer (address): 0xc12e00de204d58ead5b5ce9054e94aee7747fb6c
Arg [4] : _simpleUniswapOracle (address): 0x5671b249391ca5e6a8fe28ceb1e85dc41c12ba7d

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000004825ca4d96064bd08605013d19cb7e108ff03d4
Arg [1] : 000000000000000000000000052df909ebde5ec8b38cc90734633a906cd3c204
Arg [2] : 00000000000000000000000031864bc58a47a4fc8782b4135873788e876de9eb
Arg [3] : 000000000000000000000000c12e00de204d58ead5b5ce9054e94aee7747fb6c
Arg [4] : 0000000000000000000000005671b249391ca5e6a8fe28ceb1e85dc41c12ba7d


Deployed ByteCode Sourcemap

14492:6398:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14492:6398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14833:53;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14833:53:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16712:417;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16712:417:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14549:27;;;:::i;14651:30::-;;;:::i;17135:427::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17135:427:0;;;;:::i;14982:101::-;;;:::i;:::-;;;;;;;;;;;;;;;;15120:27;;;:::i;15151:47::-;;;:::i;14580:28::-;;;:::i;20154:432::-;;;:::i;:::-;;14612:35;;;:::i;19808:341::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19808:341:0;;;;:::i;18001:1209::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18001:1209:0;;;;:::i;19216:261::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19216:261:0;;;;:::i;17568:427::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17568:427:0;;;;:::i;14914:32::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14914:32:0;;:::i;15089:27::-;;;:::i;19482:320::-;;;:::i;20591:296::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20591:296:0;;;;:::i;14525:20::-;;;:::i;14833:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16712:417::-;16779:18;16804:25;16815:13;16804:10;:25::i;:::-;-1:-1:-1;;16842:54:0;:29;;;16894:1;16842:29;;;:14;:29;;;;;:40;;;;;:54;16834:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16945:9;;:41;;;;;;:9;:41;;;;;;;;;:9;;;;;:26;;:41;;;;;;;;;;;;;;:9;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;16945:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16945:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16945:41:0;16991:37;;;;;;;;16945:41;;-1:-1:-1;16991:35:0;;;;;;:37;;;;;;;;;;;;;;;;:35;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;16991:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16991:37:0;;;;17033:33;17052:13;17033:18;:33::i;:::-;17071:29;;;;;;;;:14;:29;;;;;:53;;;;;;;;;;;;;;;;;;17114:10;16712:417::o;14549:27::-;;;;;;:::o;14651:30::-;;;;;;:::o;17135:427::-;17203:19;17229:25;17240:13;17229:10;:25::i;:::-;-1:-1:-1;;17267:55:0;:29;;;17320:1;17267:29;;;:14;:29;;;;;:41;;;;:55;17259:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17372:9;;:44;;;;;;:9;:44;;;;;;;:9;:44;;;;;;;;:9;;;:26;;:44;;;;;;;;;;;;;;;;;;:9;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17372:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17372:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17372:44:0;17421:38;;;;;;;;17372:44;;-1:-1:-1;17421:36:0;;;;;;:38;;;;;;;;;;;;;;;;:36;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;17421:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17421:38:0;;;;17464:33;17483:13;17464:18;:33::i;:::-;17502:29;;;;;;;;:14;:29;;;;;:41;;:55;;;;;;;;;;;;;;;17135:427::o;14982:101::-;15056:15;:22;14982:101;:::o;15120:27::-;;;;;;:::o;15151:47::-;;;;;;:::o;14580:28::-;;;;;;:::o;20154:432::-;20222:20;;;;20208:10;:34;20200:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20301:13;;;20353:20;;;20301:13;20353:20;;;20378:36;;;;;;;;;;20419:33;;;;;;20462:49;;;20301:13;;;20462:49;;;20497:13;;;;20462:49;;;;;;20353:20;;20462:49;;;;;;;;;20521:60;;;;;;;;20578:1;20521:60;;;;;;;;;;;;;;;;;20154:432;;:::o;14612:35::-;;;;;;:::o;19808:341::-;19911:13;;;;19897:10;:27;19889:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19990:20;;;;20015:46;;;;;;;;;;;20071:73;;;19990:20;;;;20071:73;;;;;;;;;;;;;;;;;;;;;;;19808:341;;:::o;18001:1209::-;18070:14;18086;18104:25;18115:13;18104:10;:25::i;:::-;18069:60;;;;18134:24;;:::i;:::-;-1:-1:-1;18161:29:0;;;;;;;;:14;:29;;;;;;;;;18134:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18195:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18272:16;;;;:30;;18264:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18358:17;;;;:31;;18350:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18440:17;;;;:31;;18432:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18550:19;;:42;;;;;;:19;:42;;;;;;;;;18524:22;;18550:19;;;;;:27;;:42;;;;;;;;;;;;;;;:19;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;18550:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18550:42:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;18550:42:0;;;;-1:-1:-1;18550:42:0;18597:69;;18621:19;;:45;;;;;;:19;:45;;;;;;;;;:19;;;;;:30;;:45;;;;;:19;;:45;;;;;;;:19;;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;18621:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18621:45:0;;;;18597:69;18687:16;;;;;18763:17;;;;18782;;;;18675:125;;;;;:41;:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;:125;;;;;-1:-1:-1;;18675:125:0;;;;;;;-1:-1:-1;18675:41:0;:125;;;5:2:-1;;;;30:1;27;20:12;5:2;18675:125:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;18817:17:0;;;;18887:16;;;;;18805:99;;;;;:42;:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;-1:-1:-1;18805:42:0;;:99;;;;;-1:-1:-1;;18805:99:0;;;;;;;-1:-1:-1;18805:42:0;:99;;;5:2:-1;;;;30:1;27;20:12;5:2;18805:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;18921:17:0;;;;;18991:16;;;;;18909:99;;;;;:42;:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;:99;;;;;-1:-1:-1;;18909:99:0;;;;;;;-1:-1:-1;18909:42:0;:99;;;5:2:-1;;;;30:1;27;20:12;5:2;18909:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;19017:29:0;;;;;;;;:14;:29;;;;;;;;;:48;;;;19061:4;19017:48;;;19129:16;;;;19147:17;;;;;19166;;;;;19185:19;;;;19075:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19075:130:0;;;;;;;;;;;;;;18001:1209;;;;;:::o;19216:261::-;19303:5;;;;19289:10;:19;19281:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19366:12;;;;19383:30;;;;;;;;;;;19423:49;;;19366:12;;;;19423:49;;;;;;;;;;;;;;;;;;;;;;;19216:261;;:::o;17568:427::-;17636:19;17662:25;17673:13;17662:10;:25::i;:::-;-1:-1:-1;;17700:55:0;:29;;;17753:1;17700:29;;;:14;:29;;;;;:41;;;;:55;17692:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17805:9;;:44;;;;;;:9;:44;;;;;;;:9;:44;;;;;;:9;;;;;:26;;:44;;;;;;;;;;;;;;:9;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17805:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17805:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17805:44:0;17854:38;;;;;;;;17805:44;;-1:-1:-1;17854:36:0;;;;;;:38;;;;;;;;;;;;;;;;:36;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;17854:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17854:38:0;;;;17897:33;17916:13;17897:18;:33::i;:::-;17935:29;;;;;;;;:14;:29;;;;;:41;;:55;;;;;;;;;;;;;;;17568:427::o;14914:32::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14914:32:0;:::o;15089:27::-;;;;;;:::o;19482:320::-;19542:12;;;;19528:10;:26;19520:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19586:16;19605:5;;;19641:12;;19605:5;19641:12;;;19658:20;;;;;;;;;;19683:25;;;;;;19718;;;19605:5;;;19718:25;;;19737:5;;;;19718:25;;;;;;19641:12;;19718:25;;;;;;;;;19753:44;;;;;;;;19794:1;19753:44;;;;;;;;;;;;;;;;;19482:320;;:::o;20591:296::-;20684:13;;;;20670:10;:27;20662:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20758:15;;;;20778:36;;;;;;;;;;;20824:58;;;20758:15;;;;20824:58;;;;;;;;;;;;;;;;;;;;;;;20591:296;;:::o;14525:20::-;;;;;;:::o;16200:206::-;16265:14;16281;16326:13;16311:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16311:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16311:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16311:38:0;16363;;;;;;;;16311;;-1:-1:-1;16363:36:0;;;;;;:38;;;;;16311;;16363;;;;;;;;:36;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;16363:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16363:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16363:38:0;16200:206;;16363:38;;-1:-1:-1;;16200:206:0:o;16412:294::-;16480:29;;;;;;;:14;:29;;;;;:43;;;;;;:48;16476:61;;16530:7;;16476:61;16541:15;27:10:-1;;39:1;23:18;;;45:23;;16541:35:0;;;;;;;;;;;;;;;;;;;16615:86;;;;;;;;-1:-1:-1;16615:86:0;;;16641:22;;16615:86;;;;16541:35;16615:86;;;;;;;;;;;;;;;;;;;;;;;;16583:29;;;:14;:29;;;;;;;:118;;;;;;;;;;;;;;;;;16541:35;16583:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16412:294;;:::o;14492:6398::-;;;;;;;;;-1:-1:-1;14492:6398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://5807900bcc8fa6f1ffa1c3e9e973b6883771749e476b79e288be00753ca8dcf1
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.