More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 86,053 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 36536068 | 291 days ago | IN | 0 BNB | 0.00033216 | ||||
Swap Exact Token... | 36138234 | 305 days ago | IN | 0 BNB | 0.0005136 | ||||
Swap Exact Token... | 32246797 | 440 days ago | IN | 0 BNB | 0.00052092 | ||||
Swap Exact Token... | 32246753 | 440 days ago | IN | 0 BNB | 0.00052092 | ||||
Swap Exact Token... | 32246691 | 440 days ago | IN | 0 BNB | 0.00042654 | ||||
Swap Exact Token... | 31690573 | 459 days ago | IN | 0 BNB | 0.00052092 | ||||
Swap Exact Token... | 31666654 | 460 days ago | IN | 0 BNB | 0.00047784 | ||||
Swap Exact Token... | 31611406 | 462 days ago | IN | 0 BNB | 0.00046962 | ||||
Swap Exact Token... | 31611226 | 462 days ago | IN | 0 BNB | 0.00042654 | ||||
Swap Exact Token... | 31611189 | 462 days ago | IN | 0 BNB | 0.00047776 | ||||
Remove Liquidity | 30849313 | 489 days ago | IN | 0 BNB | 0.00045555 | ||||
Swap Exact Token... | 30212370 | 511 days ago | IN | 0 BNB | 0.00041692 | ||||
Swap Exact Token... | 30088168 | 515 days ago | IN | 0 BNB | 0.00041692 | ||||
Swap Exact Token... | 30088011 | 515 days ago | IN | 0 BNB | 0.00011786 | ||||
Swap Exact Token... | 30078882 | 516 days ago | IN | 0 BNB | 0.00043082 | ||||
Swap Exact Token... | 30078839 | 516 days ago | IN | 0 BNB | 0.00043085 | ||||
Swap Exact Token... | 30078704 | 516 days ago | IN | 0 BNB | 0.00043078 | ||||
Swap Exact Token... | 30078248 | 516 days ago | IN | 0 BNB | 0.00016574 | ||||
Swap Exact Token... | 30078087 | 516 days ago | IN | 0 BNB | 0.00016574 | ||||
Swap Exact Token... | 30077735 | 516 days ago | IN | 0 BNB | 0.00016574 | ||||
Swap Exact Token... | 30077285 | 516 days ago | IN | 0 BNB | 0.00016574 | ||||
Swap Exact Token... | 30077141 | 516 days ago | IN | 0 BNB | 0.00007317 | ||||
Swap Exact Token... | 30077087 | 516 days ago | IN | 0 BNB | 0.00007317 | ||||
Swap Exact Token... | 30076361 | 516 days ago | IN | 0 BNB | 0.00037199 | ||||
Remove Liquidity | 29812619 | 525 days ago | IN | 0 BNB | 0.00038004 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
43063639 | 63 days ago | 0.00000073 BNB | ||||
43063639 | 63 days ago | 0.00000073 BNB | ||||
43062112 | 64 days ago | 0.00000266 BNB | ||||
43062112 | 64 days ago | 0.00000266 BNB | ||||
41502001 | 118 days ago | 0.00001134 BNB | ||||
41502001 | 118 days ago | 0.00001134 BNB | ||||
41408894 | 121 days ago | 0.00000301 BNB | ||||
41408894 | 121 days ago | 0.00000301 BNB | ||||
38847543 | 210 days ago | 0.0041904 BNB | ||||
38847543 | 210 days ago | 0.0041904 BNB | ||||
36536068 | 291 days ago | 1.76867531 BNB | ||||
36536068 | 291 days ago | 1.76867531 BNB | ||||
35595638 | 323 days ago | 0.000175 BNB | ||||
35595638 | 323 days ago | 0.000175 BNB | ||||
32246715 | 440 days ago | 0.00012865 BNB | ||||
32246715 | 440 days ago | 0.00012865 BNB | ||||
31611297 | 462 days ago | 0.00010991 BNB | ||||
31611297 | 462 days ago | 0.00010991 BNB | ||||
30212370 | 511 days ago | 0.20619982 BNB | ||||
30212370 | 511 days ago | 0.20619982 BNB | ||||
30088168 | 515 days ago | 0.20740113 BNB | ||||
30088168 | 515 days ago | 0.20740113 BNB | ||||
30078882 | 516 days ago | 0.03107683 BNB | ||||
30078882 | 516 days ago | 0.03107683 BNB | ||||
30078839 | 516 days ago | 0.22196655 BNB |
Loading...
Loading
Contract Name:
OrbitalRouter
Compiler Version
v0.6.6+commit.6c089d02
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity =0.6.6; import '@uniswap/lib/contracts/libraries/TransferHelper.sol'; import "./interfaces/IOrbitalRouter02.sol"; import "./interfaces/IOrbitalFactory.sol"; import "./libraries/OrbitalLibrary.sol"; import "./libraries/SafeMath.sol"; import "./interfaces/IERC20.sol"; import "./interfaces/IWETH.sol"; contract OrbitalRouter is IOrbitalRouter02 { using SafeMath for uint256; address public immutable override factory; address public immutable override WETH; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "OrbitalRouter: EXPIRED"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn't exist yet if (IOrbitalFactory(factory).getPair(tokenA, tokenB) == address(0)) { IOrbitalFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = OrbitalLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = OrbitalLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, "OrbitalRouter: INSUFFICIENT_B_AMOUNT"); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = OrbitalLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, "OrbitalRouter: INSUFFICIENT_A_AMOUNT"); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual override ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = OrbitalLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IOrbitalPair(pair).mint(to); } function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = OrbitalLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IOrbitalPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) { address pair = OrbitalLibrary.pairFor(factory, tokenA, tokenB); IOrbitalPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IOrbitalPair(pair).burn(to); (address token0, ) = OrbitalLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "OrbitalRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "OrbitalRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountA, uint256 amountB) { address pair = OrbitalLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-1) : liquidity; IOrbitalPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountToken, uint256 amountETH) { address pair = OrbitalLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IOrbitalPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountETH) { (, amountETH) = removeLiquidity(token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountETH) { address pair = OrbitalLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IOrbitalPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap( uint256[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = OrbitalLibrary.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? OrbitalLibrary.pairFor(factory, output, path[i + 2]) : _to; IOrbitalPair(OrbitalLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = OrbitalLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, "OrbitalRouter: INSUFFICIENT_OUTPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, OrbitalLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = OrbitalLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "OrbitalRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, OrbitalLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "OrbitalRouter: INVALID_PATH"); amounts = OrbitalLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, "OrbitalRouter: INSUFFICIENT_OUTPUT_AMOUNT"); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(OrbitalLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "OrbitalRouter: INVALID_PATH"); amounts = OrbitalLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "OrbitalRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, OrbitalLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "OrbitalRouter: INVALID_PATH"); amounts = OrbitalLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, "OrbitalRouter: INSUFFICIENT_OUTPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, OrbitalLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "OrbitalRouter: INVALID_PATH"); amounts = OrbitalLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "OrbitalRouter: EXCESSIVE_INPUT_AMOUNT"); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(OrbitalLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = OrbitalLibrary.sortTokens(input, output); IOrbitalPair pair = IOrbitalPair(OrbitalLibrary.pairFor(factory, input, output)); uint256 amountInput; uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); uint256 pairFee = pair.feeAmount().add(pair.controllerFeeShare()); amountOutput = OrbitalLibrary.getAmountOut(amountInput, reserveInput, reserveOutput, pairFee); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? OrbitalLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, OrbitalLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "OrbitalRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "OrbitalRouter: INVALID_PATH"); uint256 amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(OrbitalLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "OrbitalRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "OrbitalRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, OrbitalLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, "OrbitalRouter: INSUFFICIENT_OUTPUT_AMOUNT"); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual override returns (uint256 amountB) { return OrbitalLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint256 feeAmount ) public pure virtual override returns (uint256 amountOut) { return OrbitalLibrary.getAmountOut(amountIn, reserveIn, reserveOut, feeAmount); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 feeAmount ) public pure virtual override returns (uint256 amountIn) { return OrbitalLibrary.getAmountIn(amountOut, reserveIn, reserveOut, feeAmount); } function getAmountsOut(uint256 amountIn, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return OrbitalLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return OrbitalLibrary.getAmountsIn(factory, amountOut, path); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.6.2; import "./IOrbitalRouter01.sol"; interface IOrbitalRouter02 is IOrbitalRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IOrbitalFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function INIT_CODE_PAIR_HASH() external view returns (bytes32); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; import "./SafeMath.sol"; import "../interfaces/IOrbitalFactory.sol"; import "../interfaces/IOrbitalPair.sol"; library OrbitalLibrary { using SafeMath for uint256; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "OrbitalLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "OrbitalLibrary: ZERO_ADDRESS"); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint256( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"544dd6f8fac0cc42ace7377041b5cbfc9d7f243c8f31e28da71fac250f396e34" // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = IOrbitalPair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // fetched and sorts the reserves and fee amount for a pair function getReservesAndFeeAmount( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB, uint256 feeAmount) { (address token0, ) = sortTokens(tokenA, tokenB); IOrbitalPair pair = IOrbitalPair(pairFor(factory, tokenA, tokenB)); (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); feeAmount = pair.feeAmount().add(pair.controllerFeeShare()); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "OrbitalLibrary: INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "OrbitalLibrary: INSUFFICIENT_LIQUIDITY"); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint256 feeAmount ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "OrbitalLibrary: INSUFFICIENT_INPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "OrbitalLibrary: INSUFFICIENT_LIQUIDITY"); uint256 amountInWithFee = amountIn.mul(10000 - feeAmount); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 feeAmount ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "OrbitalLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "OrbitalLibrary: INSUFFICIENT_LIQUIDITY"); uint256 numerator = reserveIn.mul(amountOut).mul(10000); uint256 denominator = reserveOut.sub(amountOut).mul(10000 - feeAmount); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "OrbitalLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut, uint256 feeAmount) = getReservesAndFeeAmount( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, feeAmount); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "OrbitalLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut, uint256 feeAmount) = getReservesAndFeeAmount( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, feeAmount); } } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0 <0.7.0; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.6.2; interface IOrbitalRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint256 feeamount ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint256 feeamount ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IOrbitalPair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function feeAmount() external view returns (uint256); function controllerFeeShare() external view returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405162004a2538038062004a258339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6148a0620001856000398061015f5280610cf05280610d2b5280610e0d528061102b52806113b5528061154052806119075280611a015280611ab75280611b855280611ccb5280611d535280611f8b528061200e52806120bd5280612189528061221e528061229252806127905280612a035280612a595280612a8d5280612b015280612ca15280612de45280612e6c525080610e9b5280610f7252806110f1528061112a52806112655280611443528061151e528061168e5280611c185280611d855280611edb52806122c4528061251d5280612715528061273e528061276e52806128db5280612a375280612d345280612e9e528061364552806136885280613b595280613dbe52806140fe52806141ac528061422c52506148a06000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a1c578063d06ca61f14610a31578063ded9382a14610ae6578063e8e3370014610b59578063f305d71914610bd9578063fb3bdb4114610c1f57610188565b80638803dbee146107eb578063ad5c464814610881578063ad615dec146108b2578063af2979eb146108e8578063b6f9de951461093b578063baa2abde146109bf57610188565b806352707d8c1161010857806352707d8c1461053e578063571fd0121461058c5780635b0d5984146105c85780635c11d7951461063b578063791ac947146106d15780637ff36ab51461076757610188565b806302751cec1461018d57806318cbafe5146101f95780631f00ca74146102df5780632195995c1461039457806338ed1739146104125780634a25d94a146104a857610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ca3565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061028f600480360360a081101561021c57600080fd5b813591602081013591810190606081016040820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b91935091506001600160a01b038135169060200135610dbd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102cb5781810151838201526020016102b3565b505050509050019250505060405180910390f35b3480156102eb57600080fd5b5061028f6004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110ea945050505050565b3480156103a057600080fd5b506101e060048036036101608110156103b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611120565b34801561041e57600080fd5b5061028f600480360360a081101561043557600080fd5b813591602081013591810190606081016040820135600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460208302840111600160201b8311171561048e57600080fd5b91935091506001600160a01b03813516906020013561121a565b3480156104b457600080fd5b5061028f600480360360a08110156104cb57600080fd5b813591602081013591810190606081016040820135600160201b8111156104f157600080fd5b82018360208201111561050357600080fd5b803590602001918460208302840111600160201b8311171561052457600080fd5b91935091506001600160a01b038135169060200135611365565b34801561054a57600080fd5b5061057a6004803603608081101561056157600080fd5b50803590602081013590604081013590606001356114f1565b60408051918252519081900360200190f35b34801561059857600080fd5b5061057a600480360360808110156105af57600080fd5b5080359060208101359060408101359060600135611508565b3480156105d457600080fd5b5061057a60048036036101408110156105ec57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611516565b34801561064757600080fd5b50610186600480360360a081101561065e57600080fd5b813591602081013591810190606081016040820135600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460208302840111600160201b831117156106b757600080fd5b91935091506001600160a01b038135169060200135611624565b3480156106dd57600080fd5b50610186600480360360a08110156106f457600080fd5b813591602081013591810190606081016040820135600160201b81111561071a57600080fd5b82018360208201111561072c57600080fd5b803590602001918460208302840111600160201b8311171561074d57600080fd5b91935091506001600160a01b0381351690602001356118b9565b61028f6004803603608081101561077d57600080fd5b81359190810190604081016020820135600160201b81111561079e57600080fd5b8201836020820111156107b057600080fd5b803590602001918460208302840111600160201b831117156107d157600080fd5b91935091506001600160a01b038135169060200135611b3d565b3480156107f757600080fd5b5061028f600480360360a081101561080e57600080fd5b813591602081013591810190606081016040820135600160201b81111561083457600080fd5b82018360208201111561084657600080fd5b803590602001918460208302840111600160201b8311171561086757600080fd5b91935091506001600160a01b038135169060200135611e90565b34801561088d57600080fd5b50610896611f89565b604080516001600160a01b039092168252519081900360200190f35b3480156108be57600080fd5b5061057a600480360360608110156108d557600080fd5b5080359060208101359060400135611fad565b3480156108f457600080fd5b5061057a600480360360c081101561090b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fc2565b6101866004803603608081101561095157600080fd5b81359190810190604081016020820135600160201b81111561097257600080fd5b82018360208201111561098457600080fd5b803590602001918460208302840111600160201b831117156109a557600080fd5b91935091506001600160a01b038135169060200135612143565b3480156109cb57600080fd5b506101e0600480360360e08110156109e257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124cf565b348015610a2857600080fd5b50610896612713565b348015610a3d57600080fd5b5061028f60048036036040811015610a5457600080fd5b81359190810190604081016020820135600160201b811115610a7557600080fd5b820183602082011115610a8757600080fd5b803590602001918460208302840111600160201b83111715610aa857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612737945050505050565b348015610af257600080fd5b506101e06004803603610140811015610b0a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612764565b348015610b6557600080fd5b50610bbb6004803603610100811015610b7d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612878565b60408051938452602084019290925282820152519081900360600190f35b610bbb600480360360c0811015610bef57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129b4565b61028f60048036036080811015610c3557600080fd5b81359190810190604081016020820135600160201b811115610c5657600080fd5b820183602082011115610c6857600080fd5b803590602001918460208302840111600160201b83111715610c8957600080fd5b91935091506001600160a01b038135169060200135612c59565b6000808242811015610cea576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b610d19897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124cf565b9093509150610d29898685612fdb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b50505050610db1858361312f565b50965096945050505050565b60608142811015610e03576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e3d57fe5b905060200201356001600160a01b03166001600160a01b031614610e96576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b610ef47f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061322792505050565b91508682600184510381518110610f0757fe5b60200260200101511015610f4c5760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b610fea86866000818110610f5c57fe5b905060200201356001600160a01b031633610fd07f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610f9e57fe5b905060200201356001600160a01b03168b8b6001818110610fbb57fe5b905060200201356001600160a01b0316613379565b85600081518110610fdd57fe5b6020026020010151613439565b61102982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613596915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061106857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050506110df84836001855103815181106110d257fe5b602002602001015161312f565b509695505050505050565b60606111177f000000000000000000000000000000000000000000000000000000000000000084846137dc565b90505b92915050565b60008060006111507f00000000000000000000000000000000000000000000000000000000000000008f8f613379565b905060008761115f578c611163565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b505050506112008f8f8f8f8f8f8f6124cf565b809450819550505050509b509b9950505050505050505050565b60608142811015611260576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6112be7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061322792505050565b915086826001845103815181106112d157fe5b602002602001015110156113165760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b61132686866000818110610f5c57fe5b6110df82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613596915050565b606081428110156113ab576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113e557fe5b905060200201356001600160a01b03166001600160a01b03161461143e576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b61149c7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137dc92505050565b915086826000815181106114ac57fe5b60200260200101511115610f4c5760405162461bcd60e51b81526004018080602001828103825260258152602001806146646025913960400191505060405180910390fd5b60006114ff8585858561391a565b95945050505050565b60006114ff85858585613a0e565b6000806115647f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613379565b9050600086611573578b611577565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b505050506116138d8d8d8d8d8d611fc2565b9d9c50505050505050505050505050565b8042811015611668576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6116dd8585600081811061167857fe5b905060200201356001600160a01b0316336116d77f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b905060200201356001600160a01b03168a8a6001818110610fbb57fe5b8a613439565b6000858560001981018181106116ef57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d602081101561177e57600080fd5b505160408051602088810282810182019093528882529293506117c0929091899189918291850190849080828437600092019190915250889250613b02915050565b8661187282888860001981018181106117d557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b505afa15801561184e573d6000803e3d6000fd5b505050506040513d602081101561186457600080fd5b50519063ffffffff613ef316565b10156118af5760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b5050505050505050565b80428110156118fd576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061193757fe5b905060200201356001600160a01b03166001600160a01b031614611990576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b6119a08585600081811061167857fe5b6119de858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b02915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a4857600080fd5b505afa158015611a5c573d6000803e3d6000fd5b505050506040513d6020811015611a7257600080fd5b5051905086811015611ab55760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b1b57600080fd5b505af1158015611b2f573d6000803e3d6000fd5b505050506118af848261312f565b60608142811015611b83576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611bba57fe5b905060200201356001600160a01b03166001600160a01b031614611c13576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b611c717f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061322792505050565b91508682600184510381518110611c8457fe5b60200260200101511015611cc95760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d0557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611db17f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b84600081518110611dbe57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e1557600080fd5b505af1158015611e29573d6000803e3d6000fd5b505050506040513d6020811015611e3f57600080fd5b5051611e4757fe5b611e8682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613596915050565b5095945050505050565b60608142811015611ed6576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b611f347f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137dc92505050565b91508682600081518110611f4457fe5b602002602001015111156113165760405162461bcd60e51b81526004018080602001828103825260258152602001806146646025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611fba848484613f43565b949350505050565b60008142811015612008576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b612037887f000000000000000000000000000000000000000000000000000000000000000089898930896124cf565b604080516370a0823160e01b815230600482015290519194506120bb92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561208a57600080fd5b505afa15801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051612fdb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561212157600080fd5b505af1158015612135573d6000803e3d6000fd5b505050506110df848361312f565b8042811015612187576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121be57fe5b905060200201356001600160a01b03166001600160a01b031614612217576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122f07f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050506040513d602081101561236a57600080fd5b505161237257fe5b60008686600019810181811061238457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123e957600080fd5b505afa1580156123fd573d6000803e3d6000fd5b505050506040513d602081101561241357600080fd5b505160408051602089810282810182019093528982529293506124559290918a918a918291850190849080828437600092019190915250899250613b02915050565b87611872828989600019810181811061246a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b6000808242811015612516576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b60006125437f00000000000000000000000000000000000000000000000000000000000000008c8c613379565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b505050506040513d60208110156125c857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561261557600080fd5b505af1158015612629573d6000803e3d6000fd5b505050506040513d604081101561263f57600080fd5b508051602090910151909250905060006126598e8e613fef565b509050806001600160a01b03168e6001600160a01b03161461267c57818361267f565b82825b90975095508a8710156126c35760405162461bcd60e51b81526004018080602001828103825260248152602001806146f96024913960400191505060405180910390fd5b898610156127025760405162461bcd60e51b81526004018080602001828103825260248152602001806146d56024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111177f00000000000000000000000000000000000000000000000000000000000000008484613227565b60008060006127b47f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613379565b90506000876127c3578c6127c7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561283d57600080fd5b505af1158015612851573d6000803e3d6000fd5b505050506128638e8e8e8e8e8e610ca3565b909f909e509c50505050505050505050505050565b600080600083428110156128c1576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6128cf8c8c8c8c8c8c6140cd565b909450925060006129017f00000000000000000000000000000000000000000000000000000000000000008e8e613379565b905061290f8d338388613439565b61291b8c338387613439565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561297357600080fd5b505af1158015612987573d6000803e3d6000fd5b505050506040513d602081101561299d57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129fd576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b612a2b8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140cd565b90945092506000612a7d7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613379565b9050612a8b8b338388613439565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ae657600080fd5b505af1158015612afa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b7f57600080fd5b505af1158015612b93573d6000803e3d6000fd5b505050506040513d6020811015612ba957600080fd5b5051612bb157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b5051925034841015612c4b57612c4b3385340361312f565b505096509650969350505050565b60608142811015612c9f576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cd657fe5b905060200201356001600160a01b03166001600160a01b031614612d2f576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b612d8d7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137dc92505050565b91503482600081518110612d9d57fe5b60200260200101511115612de25760405162461bcd60e51b81526004018080602001828103825260258152602001806146646025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e1e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eca7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b84600081518110612ed757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f2e57600080fd5b505af1158015612f42573d6000803e3d6000fd5b505050506040513d6020811015612f5857600080fd5b5051612f6057fe5b612f9f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613596915050565b81600081518110612fac57fe5b6020026020010151341115611e8657611e863383600081518110612fcc57fe5b6020026020010151340361312f565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130585780518252601f199092019160209182019101613039565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130ba576040519150601f19603f3d011682016040523d82523d6000602084013e6130bf565b606091505b50915091508180156130ed5750805115806130ed57508080602001905160208110156130ea57600080fd5b50515b6131285760405162461bcd60e51b815260040180806020018281038252602d81526020018061483e602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317b5780518252601f19909201916020918201910161315c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dd576040519150601f19603f3d011682016040523d82523d6000602084013e6131e2565b606091505b50509050806132225760405162461bcd60e51b815260040180806020018281038252603481526020018061474e6034913960400191505060405180910390fd5b505050565b6060600282511015613280576040805162461bcd60e51b815260206004820152601c60248201527f4f72626974616c4c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561329857600080fd5b506040519080825280602002602001820160405280156132c2578160200160208202803683370190505b50905082816000815181106132d357fe5b60200260200101818152505060005b60018351038110156133715760008060006133278887868151811061330357fe5b602002602001015188876001018151811061331a57fe5b6020026020010151614341565b92509250925061334c85858151811061333c57fe5b602002602001015184848461391a565b85856001018151811061335b57fe5b60209081029190910101525050506001016132e2565b509392505050565b60008060006133888585613fef565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f544dd6f8fac0cc42ace7377041b5cbfc9d7f243c8f31e28da71fac250f396e34609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106134be5780518252601f19909201916020918201910161349f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613520576040519150601f19603f3d011682016040523d82523d6000602084013e613525565b606091505b5091509150818015613553575080511580613553575080806020019051602081101561355057600080fd5b50515b61358e5760405162461bcd60e51b815260040180806020018281038252603181526020018061471d6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156137d6576000808483815181106135b457fe5b60200260200101518584600101815181106135cb57fe5b60200260200101519150915060006135e38383613fef565b50905060008785600101815181106135f757fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461362557826000613629565b6000835b91509150600060028a510388106136405788613681565b6136817f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061367457fe5b6020026020010151613379565b90506136ae7f00000000000000000000000000000000000000000000000000000000000000008888613379565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156136eb576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561375c578181015183820152602001613744565b50505050905090810190601f1680156137895780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156137ab57600080fd5b505af11580156137bf573d6000803e3d6000fd5b505060019099019850613599975050505050505050565b50505050565b6060600282511015613835576040805162461bcd60e51b815260206004820152601c60248201527f4f72626974616c4c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561384d57600080fd5b50604051908082528060200260200182016040528015613877578160200160208202803683370190505b509050828160018351038151811061388b57fe5b60209081029190910101528151600019015b80156133715760008060006138cf888760018703815181106138bb57fe5b602002602001015188878151811061331a57fe5b9250925092506138f48585815181106138e457fe5b6020026020010151848484613a0e565b85600186038151811061390357fe5b60209081029190910101525050506000190161389d565b600080851161395a5760405162461bcd60e51b81526004018080602001828103825260298152602001806146896029913960400191505060405180910390fd5b60008411801561396a5750600083115b6139a55760405162461bcd60e51b81526004018080602001828103825260268152602001806147a56026913960400191505060405180910390fd5b60006139bc8661271085900363ffffffff6144ca16565b905060006139d0828663ffffffff6144ca16565b905060006139f6836139ea8961271063ffffffff6144ca16565b9063ffffffff61452d16565b9050808281613a0157fe5b0498975050505050505050565b6000808511613a4e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806147cb602a913960400191505060405180910390fd5b600084118015613a5e5750600083115b613a995760405162461bcd60e51b81526004018080602001828103825260268152602001806147a56026913960400191505060405180910390fd5b6000613abd612710613ab1878963ffffffff6144ca16565b9063ffffffff6144ca16565b90506000613ada612710859003613ab1878a63ffffffff613ef316565b9050613af76001828481613aea57fe5b049063ffffffff61452d16565b979650505050505050565b60005b600183510381101561322257600080848381518110613b2057fe5b6020026020010151858460010181518110613b3757fe5b6020026020010151915091506000613b4f8383613fef565b5090506000613b7f7f00000000000000000000000000000000000000000000000000000000000000008585613379565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bc057600080fd5b505afa158015613bd4573d6000803e3d6000fd5b505050506040513d6060811015613bea57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613c20578284613c23565b83835b91509150613c81828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b95506000613d65886001600160a01b031663e332f3066040518163ffffffff1660e01b815260040160206040518083038186803b158015613cc157600080fd5b505afa158015613cd5573d6000803e3d6000fd5b505050506040513d6020811015613ceb57600080fd5b505160408051631a78550160e21b815290516001600160a01b038c16916369e15404916004808301926020929190829003018186803b158015613d2d57600080fd5b505afa158015613d41573d6000803e3d6000fd5b505050506040513d6020811015613d5757600080fd5b50519063ffffffff61452d16565b9050613d738784848461391a565b95505050505050600080856001600160a01b0316886001600160a01b031614613d9e57826000613da2565b6000835b91509150600060028c51038a10613db9578a613ded565b613ded7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061367457fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e77578181015183820152602001613e5f565b50505050905090810190601f168015613ea45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ec657600080fd5b505af1158015613eda573d6000803e3d6000fd5b50506001909b019a50613b059950505050505050505050565b8082038281111561111a576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613f835760405162461bcd60e51b81526004018080602001828103825260238152602001806146b26023913960400191505060405180910390fd5b600083118015613f935750600082115b613fce5760405162461bcd60e51b81526004018080602001828103825260268152602001806147a56026913960400191505060405180910390fd5b82613fdf858463ffffffff6144ca16565b81613fe657fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140435760405162461bcd60e51b81526004018080602001828103825260238152602001806147826023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614063578284614066565b83835b90925090506001600160a01b0382166140c6576040805162461bcd60e51b815260206004820152601c60248201527f4f72626974616c4c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561414757600080fd5b505afa15801561415b573d6000803e3d6000fd5b505050506040513d602081101561417157600080fd5b50516001600160a01b0316141561422457604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141f757600080fd5b505af115801561420b573d6000803e3d6000fd5b505050506040513d602081101561422157600080fd5b50505b6000806142527f00000000000000000000000000000000000000000000000000000000000000008b8b61457c565b91509150816000148015614264575080155b1561427457879350869250614334565b6000614281898484613f43565b90508781116142d457858110156142c95760405162461bcd60e51b81526004018080602001828103825260248152602001806146d56024913960400191505060405180910390fd5b889450925082614332565b60006142e1898486613f43565b9050898111156142ed57fe5b8781101561432c5760405162461bcd60e51b81526004018080602001828103825260248152602001806146f96024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000806000806143518686613fef565b5090506000614361888888613379565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561439f57600080fd5b505afa1580156143b3573d6000803e3d6000fd5b505050506040513d60608110156143c957600080fd5b50805160209182015160408051637199798360e11b815290516001600160701b039384169650929091169350614492926001600160a01b0387169263e332f306926004808201939291829003018186803b15801561442657600080fd5b505afa15801561443a573d6000803e3d6000fd5b505050506040513d602081101561445057600080fd5b505160408051631a78550160e21b815290516001600160a01b038716916369e15404916004808301926020929190829003018186803b158015613d2d57600080fd5b9450836001600160a01b0316896001600160a01b0316146144b45780826144b7565b81815b909b909a50949850939650505050505050565b60008115806144e5575050808202828282816144e257fe5b04145b61111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b8082018281101561111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061458b8585613fef565b50905060008061459c888888613379565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145d457600080fd5b505afa1580156145e8573d6000803e3d6000fd5b505050506040513d60608110156145fe57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614631578082614634565b81815b9099909850965050505050505056fe4f72626974616c526f757465723a2045585049524544000000000000000000004f72626974616c526f757465723a204558434553534956455f494e5055545f414d4f554e544f72626974616c4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544f72626974616c4c6962726172793a20494e53554646494349454e545f414d4f554e544f72626974616c526f757465723a20494e53554646494349454e545f425f414d4f554e544f72626974616c526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644f72626974616c4c6962726172793a204944454e544943414c5f4144445245535345534f72626974616c4c6962726172793a20494e53554646494349454e545f4c49515549444954594f72626974616c4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544f72626974616c526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544f72626974616c526f757465723a20494e56414c49445f5041544800000000005472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220151e91a6a3f2a4c648d46af24b56e3ef051af9cafe07f3a5a5f641ab08a680a464736f6c634300060600330000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a1c578063d06ca61f14610a31578063ded9382a14610ae6578063e8e3370014610b59578063f305d71914610bd9578063fb3bdb4114610c1f57610188565b80638803dbee146107eb578063ad5c464814610881578063ad615dec146108b2578063af2979eb146108e8578063b6f9de951461093b578063baa2abde146109bf57610188565b806352707d8c1161010857806352707d8c1461053e578063571fd0121461058c5780635b0d5984146105c85780635c11d7951461063b578063791ac947146106d15780637ff36ab51461076757610188565b806302751cec1461018d57806318cbafe5146101f95780631f00ca74146102df5780632195995c1461039457806338ed1739146104125780634a25d94a146104a857610188565b3661018857336001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ca3565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061028f600480360360a081101561021c57600080fd5b813591602081013591810190606081016040820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b91935091506001600160a01b038135169060200135610dbd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102cb5781810151838201526020016102b3565b505050509050019250505060405180910390f35b3480156102eb57600080fd5b5061028f6004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110ea945050505050565b3480156103a057600080fd5b506101e060048036036101608110156103b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611120565b34801561041e57600080fd5b5061028f600480360360a081101561043557600080fd5b813591602081013591810190606081016040820135600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460208302840111600160201b8311171561048e57600080fd5b91935091506001600160a01b03813516906020013561121a565b3480156104b457600080fd5b5061028f600480360360a08110156104cb57600080fd5b813591602081013591810190606081016040820135600160201b8111156104f157600080fd5b82018360208201111561050357600080fd5b803590602001918460208302840111600160201b8311171561052457600080fd5b91935091506001600160a01b038135169060200135611365565b34801561054a57600080fd5b5061057a6004803603608081101561056157600080fd5b50803590602081013590604081013590606001356114f1565b60408051918252519081900360200190f35b34801561059857600080fd5b5061057a600480360360808110156105af57600080fd5b5080359060208101359060408101359060600135611508565b3480156105d457600080fd5b5061057a60048036036101408110156105ec57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611516565b34801561064757600080fd5b50610186600480360360a081101561065e57600080fd5b813591602081013591810190606081016040820135600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460208302840111600160201b831117156106b757600080fd5b91935091506001600160a01b038135169060200135611624565b3480156106dd57600080fd5b50610186600480360360a08110156106f457600080fd5b813591602081013591810190606081016040820135600160201b81111561071a57600080fd5b82018360208201111561072c57600080fd5b803590602001918460208302840111600160201b8311171561074d57600080fd5b91935091506001600160a01b0381351690602001356118b9565b61028f6004803603608081101561077d57600080fd5b81359190810190604081016020820135600160201b81111561079e57600080fd5b8201836020820111156107b057600080fd5b803590602001918460208302840111600160201b831117156107d157600080fd5b91935091506001600160a01b038135169060200135611b3d565b3480156107f757600080fd5b5061028f600480360360a081101561080e57600080fd5b813591602081013591810190606081016040820135600160201b81111561083457600080fd5b82018360208201111561084657600080fd5b803590602001918460208302840111600160201b8311171561086757600080fd5b91935091506001600160a01b038135169060200135611e90565b34801561088d57600080fd5b50610896611f89565b604080516001600160a01b039092168252519081900360200190f35b3480156108be57600080fd5b5061057a600480360360608110156108d557600080fd5b5080359060208101359060400135611fad565b3480156108f457600080fd5b5061057a600480360360c081101561090b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fc2565b6101866004803603608081101561095157600080fd5b81359190810190604081016020820135600160201b81111561097257600080fd5b82018360208201111561098457600080fd5b803590602001918460208302840111600160201b831117156109a557600080fd5b91935091506001600160a01b038135169060200135612143565b3480156109cb57600080fd5b506101e0600480360360e08110156109e257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124cf565b348015610a2857600080fd5b50610896612713565b348015610a3d57600080fd5b5061028f60048036036040811015610a5457600080fd5b81359190810190604081016020820135600160201b811115610a7557600080fd5b820183602082011115610a8757600080fd5b803590602001918460208302840111600160201b83111715610aa857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612737945050505050565b348015610af257600080fd5b506101e06004803603610140811015610b0a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612764565b348015610b6557600080fd5b50610bbb6004803603610100811015610b7d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612878565b60408051938452602084019290925282820152519081900360600190f35b610bbb600480360360c0811015610bef57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129b4565b61028f60048036036080811015610c3557600080fd5b81359190810190604081016020820135600160201b811115610c5657600080fd5b820183602082011115610c6857600080fd5b803590602001918460208302840111600160201b83111715610c8957600080fd5b91935091506001600160a01b038135169060200135612c59565b6000808242811015610cea576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b610d19897f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8a8a8a308a6124cf565b9093509150610d29898685612fdb565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b50505050610db1858361312f565b50965096945050505050565b60608142811015610e03576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1686866000198101818110610e3d57fe5b905060200201356001600160a01b03166001600160a01b031614610e96576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b610ef47f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061322792505050565b91508682600184510381518110610f0757fe5b60200260200101511015610f4c5760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b610fea86866000818110610f5c57fe5b905060200201356001600160a01b031633610fd07f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8a8a6000818110610f9e57fe5b905060200201356001600160a01b03168b8b6001818110610fbb57fe5b905060200201356001600160a01b0316613379565b85600081518110610fdd57fe5b6020026020010151613439565b61102982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613596915050565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d8360018551038151811061106857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050506110df84836001855103815181106110d257fe5b602002602001015161312f565b509695505050505050565b60606111177f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb84846137dc565b90505b92915050565b60008060006111507f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8f8f613379565b905060008761115f578c611163565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b505050506112008f8f8f8f8f8f8f6124cf565b809450819550505050509b509b9950505050505050505050565b60608142811015611260576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6112be7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061322792505050565b915086826001845103815181106112d157fe5b602002602001015110156113165760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b61132686866000818110610f5c57fe5b6110df82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613596915050565b606081428110156113ab576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16868660001981018181106113e557fe5b905060200201356001600160a01b03166001600160a01b03161461143e576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b61149c7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137dc92505050565b915086826000815181106114ac57fe5b60200260200101511115610f4c5760405162461bcd60e51b81526004018080602001828103825260258152602001806146646025913960400191505060405180910390fd5b60006114ff8585858561391a565b95945050505050565b60006114ff85858585613a0e565b6000806115647f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8d7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c613379565b9050600086611573578b611577565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b505050506116138d8d8d8d8d8d611fc2565b9d9c50505050505050505050505050565b8042811015611668576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6116dd8585600081811061167857fe5b905060200201356001600160a01b0316336116d77f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb898960008181106116ba57fe5b905060200201356001600160a01b03168a8a6001818110610fbb57fe5b8a613439565b6000858560001981018181106116ef57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d602081101561177e57600080fd5b505160408051602088810282810182019093528882529293506117c0929091899189918291850190849080828437600092019190915250889250613b02915050565b8661187282888860001981018181106117d557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b505afa15801561184e573d6000803e3d6000fd5b505050506040513d602081101561186457600080fd5b50519063ffffffff613ef316565b10156118af5760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b5050505050505050565b80428110156118fd576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c168585600019810181811061193757fe5b905060200201356001600160a01b03166001600160a01b031614611990576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b6119a08585600081811061167857fe5b6119de858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b02915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16916370a0823191602480820192602092909190829003018186803b158015611a4857600080fd5b505afa158015611a5c573d6000803e3d6000fd5b505050506040513d6020811015611a7257600080fd5b5051905086811015611ab55760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b1b57600080fd5b505af1158015611b2f573d6000803e3d6000fd5b505050506118af848261312f565b60608142811015611b83576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031686866000818110611bba57fe5b905060200201356001600160a01b03166001600160a01b031614611c13576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b611c717f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb3488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061322792505050565b91508682600184510381518110611c8457fe5b60200260200101511015611cc95760405162461bcd60e51b81526004018080602001828103825260298152602001806147f56029913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db083600081518110611d0557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb611db17f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb898960008181106116ba57fe5b84600081518110611dbe57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e1557600080fd5b505af1158015611e29573d6000803e3d6000fd5b505050506040513d6020811015611e3f57600080fd5b5051611e4757fe5b611e8682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613596915050565b5095945050505050565b60608142811015611ed6576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b611f347f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137dc92505050565b91508682600081518110611f4457fe5b602002602001015111156113165760405162461bcd60e51b81526004018080602001828103825260258152602001806146646025913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b6000611fba848484613f43565b949350505050565b60008142811015612008576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b612037887f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c89898930896124cf565b604080516370a0823160e01b815230600482015290519194506120bb92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561208a57600080fd5b505afa15801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051612fdb565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561212157600080fd5b505af1158015612135573d6000803e3d6000fd5b505050506110df848361312f565b8042811015612187576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316858560008181106121be57fe5b905060200201356001600160a01b03166001600160a01b031614612217576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb6122f07f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb898960008181106116ba57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050506040513d602081101561236a57600080fd5b505161237257fe5b60008686600019810181811061238457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123e957600080fd5b505afa1580156123fd573d6000803e3d6000fd5b505050506040513d602081101561241357600080fd5b505160408051602089810282810182019093528982529293506124559290918a918a918291850190849080828437600092019190915250899250613b02915050565b87611872828989600019810181811061246a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b6000808242811015612516576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b60006125437f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8c8c613379565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b505050506040513d60208110156125c857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561261557600080fd5b505af1158015612629573d6000803e3d6000fd5b505050506040513d604081101561263f57600080fd5b508051602090910151909250905060006126598e8e613fef565b509050806001600160a01b03168e6001600160a01b03161461267c57818361267f565b82825b90975095508a8710156126c35760405162461bcd60e51b81526004018080602001828103825260248152602001806146f96024913960400191505060405180910390fd5b898610156127025760405162461bcd60e51b81526004018080602001828103825260248152602001806146d56024913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb81565b60606111177f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8484613227565b60008060006127b47f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8e7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c613379565b90506000876127c3578c6127c7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561283d57600080fd5b505af1158015612851573d6000803e3d6000fd5b505050506128638e8e8e8e8e8e610ca3565b909f909e509c50505050505050505050505050565b600080600083428110156128c1576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b6128cf8c8c8c8c8c8c6140cd565b909450925060006129017f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8e8e613379565b905061290f8d338388613439565b61291b8c338387613439565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561297357600080fd5b505af1158015612987573d6000803e3d6000fd5b505050506040513d602081101561299d57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129fd576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b612a2b8a7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8b348c8c6140cd565b90945092506000612a7d7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8c7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c613379565b9050612a8b8b338388613439565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ae657600080fd5b505af1158015612afa573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b7f57600080fd5b505af1158015612b93573d6000803e3d6000fd5b505050506040513d6020811015612ba957600080fd5b5051612bb157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b5051925034841015612c4b57612c4b3385340361312f565b505096509650969350505050565b60608142811015612c9f576040805162461bcd60e51b81526020600482015260166024820152600080516020614644833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031686866000818110612cd657fe5b905060200201356001600160a01b03166001600160a01b031614612d2f576040805162461bcd60e51b815260206004820152601b602482015260008051602061481e833981519152604482015290519081900360640190fd5b612d8d7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137dc92505050565b91503482600081518110612d9d57fe5b60200260200101511115612de25760405162461bcd60e51b81526004018080602001828103825260258152602001806146646025913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db083600081518110612e1e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb612eca7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb898960008181106116ba57fe5b84600081518110612ed757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f2e57600080fd5b505af1158015612f42573d6000803e3d6000fd5b505050506040513d6020811015612f5857600080fd5b5051612f6057fe5b612f9f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613596915050565b81600081518110612fac57fe5b6020026020010151341115611e8657611e863383600081518110612fcc57fe5b6020026020010151340361312f565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130585780518252601f199092019160209182019101613039565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130ba576040519150601f19603f3d011682016040523d82523d6000602084013e6130bf565b606091505b50915091508180156130ed5750805115806130ed57508080602001905160208110156130ea57600080fd5b50515b6131285760405162461bcd60e51b815260040180806020018281038252602d81526020018061483e602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317b5780518252601f19909201916020918201910161315c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dd576040519150601f19603f3d011682016040523d82523d6000602084013e6131e2565b606091505b50509050806132225760405162461bcd60e51b815260040180806020018281038252603481526020018061474e6034913960400191505060405180910390fd5b505050565b6060600282511015613280576040805162461bcd60e51b815260206004820152601c60248201527f4f72626974616c4c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561329857600080fd5b506040519080825280602002602001820160405280156132c2578160200160208202803683370190505b50905082816000815181106132d357fe5b60200260200101818152505060005b60018351038110156133715760008060006133278887868151811061330357fe5b602002602001015188876001018151811061331a57fe5b6020026020010151614341565b92509250925061334c85858151811061333c57fe5b602002602001015184848461391a565b85856001018151811061335b57fe5b60209081029190910101525050506001016132e2565b509392505050565b60008060006133888585613fef565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f544dd6f8fac0cc42ace7377041b5cbfc9d7f243c8f31e28da71fac250f396e34609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106134be5780518252601f19909201916020918201910161349f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613520576040519150601f19603f3d011682016040523d82523d6000602084013e613525565b606091505b5091509150818015613553575080511580613553575080806020019051602081101561355057600080fd5b50515b61358e5760405162461bcd60e51b815260040180806020018281038252603181526020018061471d6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156137d6576000808483815181106135b457fe5b60200260200101518584600101815181106135cb57fe5b60200260200101519150915060006135e38383613fef565b50905060008785600101815181106135f757fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461362557826000613629565b6000835b91509150600060028a510388106136405788613681565b6136817f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb878c8b6002018151811061367457fe5b6020026020010151613379565b90506136ae7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8888613379565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156136eb576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561375c578181015183820152602001613744565b50505050905090810190601f1680156137895780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156137ab57600080fd5b505af11580156137bf573d6000803e3d6000fd5b505060019099019850613599975050505050505050565b50505050565b6060600282511015613835576040805162461bcd60e51b815260206004820152601c60248201527f4f72626974616c4c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561384d57600080fd5b50604051908082528060200260200182016040528015613877578160200160208202803683370190505b509050828160018351038151811061388b57fe5b60209081029190910101528151600019015b80156133715760008060006138cf888760018703815181106138bb57fe5b602002602001015188878151811061331a57fe5b9250925092506138f48585815181106138e457fe5b6020026020010151848484613a0e565b85600186038151811061390357fe5b60209081029190910101525050506000190161389d565b600080851161395a5760405162461bcd60e51b81526004018080602001828103825260298152602001806146896029913960400191505060405180910390fd5b60008411801561396a5750600083115b6139a55760405162461bcd60e51b81526004018080602001828103825260268152602001806147a56026913960400191505060405180910390fd5b60006139bc8661271085900363ffffffff6144ca16565b905060006139d0828663ffffffff6144ca16565b905060006139f6836139ea8961271063ffffffff6144ca16565b9063ffffffff61452d16565b9050808281613a0157fe5b0498975050505050505050565b6000808511613a4e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806147cb602a913960400191505060405180910390fd5b600084118015613a5e5750600083115b613a995760405162461bcd60e51b81526004018080602001828103825260268152602001806147a56026913960400191505060405180910390fd5b6000613abd612710613ab1878963ffffffff6144ca16565b9063ffffffff6144ca16565b90506000613ada612710859003613ab1878a63ffffffff613ef316565b9050613af76001828481613aea57fe5b049063ffffffff61452d16565b979650505050505050565b60005b600183510381101561322257600080848381518110613b2057fe5b6020026020010151858460010181518110613b3757fe5b6020026020010151915091506000613b4f8383613fef565b5090506000613b7f7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8585613379565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bc057600080fd5b505afa158015613bd4573d6000803e3d6000fd5b505050506040513d6060811015613bea57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613c20578284613c23565b83835b91509150613c81828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b95506000613d65886001600160a01b031663e332f3066040518163ffffffff1660e01b815260040160206040518083038186803b158015613cc157600080fd5b505afa158015613cd5573d6000803e3d6000fd5b505050506040513d6020811015613ceb57600080fd5b505160408051631a78550160e21b815290516001600160a01b038c16916369e15404916004808301926020929190829003018186803b158015613d2d57600080fd5b505afa158015613d41573d6000803e3d6000fd5b505050506040513d6020811015613d5757600080fd5b50519063ffffffff61452d16565b9050613d738784848461391a565b95505050505050600080856001600160a01b0316886001600160a01b031614613d9e57826000613da2565b6000835b91509150600060028c51038a10613db9578a613ded565b613ded7f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb898e8d6002018151811061367457fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e77578181015183820152602001613e5f565b50505050905090810190601f168015613ea45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ec657600080fd5b505af1158015613eda573d6000803e3d6000fd5b50506001909b019a50613b059950505050505050505050565b8082038281111561111a576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613f835760405162461bcd60e51b81526004018080602001828103825260238152602001806146b26023913960400191505060405180910390fd5b600083118015613f935750600082115b613fce5760405162461bcd60e51b81526004018080602001828103825260268152602001806147a56026913960400191505060405180910390fd5b82613fdf858463ffffffff6144ca16565b81613fe657fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140435760405162461bcd60e51b81526004018080602001828103825260238152602001806147826023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614063578284614066565b83835b90925090506001600160a01b0382166140c6576040805162461bcd60e51b815260206004820152601c60248201527f4f72626974616c4c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb9092169163e6a4390591604480820192602092909190829003018186803b15801561414757600080fd5b505afa15801561415b573d6000803e3d6000fd5b505050506040513d602081101561417157600080fd5b50516001600160a01b0316141561422457604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb9092169163c9c65396916044808201926020929091908290030181600087803b1580156141f757600080fd5b505af115801561420b573d6000803e3d6000fd5b505050506040513d602081101561422157600080fd5b50505b6000806142527f0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb8b8b61457c565b91509150816000148015614264575080155b1561427457879350869250614334565b6000614281898484613f43565b90508781116142d457858110156142c95760405162461bcd60e51b81526004018080602001828103825260248152602001806146d56024913960400191505060405180910390fd5b889450925082614332565b60006142e1898486613f43565b9050898111156142ed57fe5b8781101561432c5760405162461bcd60e51b81526004018080602001828103825260248152602001806146f96024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000806000806143518686613fef565b5090506000614361888888613379565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561439f57600080fd5b505afa1580156143b3573d6000803e3d6000fd5b505050506040513d60608110156143c957600080fd5b50805160209182015160408051637199798360e11b815290516001600160701b039384169650929091169350614492926001600160a01b0387169263e332f306926004808201939291829003018186803b15801561442657600080fd5b505afa15801561443a573d6000803e3d6000fd5b505050506040513d602081101561445057600080fd5b505160408051631a78550160e21b815290516001600160a01b038716916369e15404916004808301926020929190829003018186803b158015613d2d57600080fd5b9450836001600160a01b0316896001600160a01b0316146144b45780826144b7565b81815b909b909a50949850939650505050505050565b60008115806144e5575050808202828282816144e257fe5b04145b61111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b8082018281101561111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061458b8585613fef565b50905060008061459c888888613379565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145d457600080fd5b505afa1580156145e8573d6000803e3d6000fd5b505050506040513d60608110156145fe57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614631578082614634565b81815b9099909850965050505050505056fe4f72626974616c526f757465723a2045585049524544000000000000000000004f72626974616c526f757465723a204558434553534956455f494e5055545f414d4f554e544f72626974616c4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544f72626974616c4c6962726172793a20494e53554646494349454e545f414d4f554e544f72626974616c526f757465723a20494e53554646494349454e545f425f414d4f554e544f72626974616c526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644f72626974616c4c6962726172793a204944454e544943414c5f4144445245535345534f72626974616c4c6962726172793a20494e53554646494349454e545f4c49515549444954594f72626974616c4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544f72626974616c526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544f72626974616c526f757465723a20494e56414c49445f5041544800000000005472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220151e91a6a3f2a4c648d46af24b56e3ef051af9cafe07f3a5a5f641ab08a680a464736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
-----Decoded View---------------
Arg [0] : _factory (address): 0x1A04Afe9778f95829017741bF46C9524B91433fB
Arg [1] : _WETH (address): 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001a04afe9778f95829017741bf46c9524b91433fb
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Loading...
Loading
Loading...
Loading
OVERVIEW
OrbitalSwap Router ContractLoading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.