Contract Address Details

0xE6Bfc609A2e58530310D6964ccdd236fc93b4ADB

Token
SolarBeam LP Token (SLP)
Creator
0x049581–5a1b68 at 0x1a71ec–85907a
Balance
0 MOVR
Tokens
Fetching tokens...
Transactions
45 Transactions
Transfers
104,708 Transfers
Gas Used
2,138,124
Last Balance Update
3578732
Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x0acdb54e610dabc82b8fa454b21ad425ae460df9.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
Contract name:
SolarPair




Optimization enabled
true
Compiler version
v0.6.12+commit.27d51765




Optimization runs
999999
Verified at
2021-09-08 19:15:43.695374Z

Contract source code

// Sources flattened with hardhat v2.6.0 https://hardhat.org
// File contracts/uniswapv2/libraries/SafeMath.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity =0.6.12;
// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMathSolar {
function add(uint x, uint y) internal pure returns (uint z) {
require((z = x + y) >= x, 'ds-math-add-overflow');
}
function sub(uint x, uint y) internal pure returns (uint z) {
require((z = x - y) <= x, 'ds-math-sub-underflow');
}
function mul(uint x, uint y) internal pure returns (uint z) {
require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
}
}
contract SolarERC20 {
using SafeMathSolar for uint;
string public constant name = 'SolarBeam LP Token';
string public constant symbol = 'SLP';
uint8 public constant decimals = 18;
uint public totalSupply;
mapping(address => uint) public balanceOf;
mapping(address => mapping(address => uint)) public allowance;
bytes32 public DOMAIN_SEPARATOR;
// keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
mapping(address => uint) public nonces;
address private _trustedForwarder; // remember to change before deploying
// Control support for EIP-2771 Meta Transactions
bool public metaTxnsEnabled = false;
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
event MetaTxnsEnabled(address indexed caller);
event MetaTxnsDisabled(address indexed caller);
constructor() public {
uint chainId;
assembly {
chainId := chainid()
}
DOMAIN_SEPARATOR = keccak256(
abi.encode(
keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
keccak256(bytes(name)),
keccak256(bytes('1')),
chainId,
address(this)
)
);
}
function isTrustedForwarder(address forwarder) public view returns (bool) {
return metaTxnsEnabled && forwarder == _trustedForwarder;
}
function _msgSender() internal view returns (address sender) {
if (isTrustedForwarder(msg.sender)) {
// The assembly code is more direct than the Solidity version using `abi.decode`.
assembly {
sender := shr(96, calldataload(sub(calldatasize(), 20)))
}
} else {
return msg.sender;
}
}
function _msgData() internal view returns (bytes calldata) {
if (isTrustedForwarder(msg.sender)) {
return msg.data[:msg.data.length - 20];
} else {
return msg.data;
}
}
function _mint(address to, uint value) internal {
totalSupply = totalSupply.add(value);
balanceOf[to] = balanceOf[to].add(value);
emit Transfer(address(0), to, value);
}
function _burn(address from, uint value) internal {
balanceOf[from] = balanceOf[from].sub(value);
totalSupply = totalSupply.sub(value);
emit Transfer(from, address(0), value);
}
function _approve(address owner, address spender, uint value) private {
allowance[owner][spender] = value;
emit Approval(owner, spender, value);
}
function _transfer(address from, address to, uint value) private {
balanceOf[from] = balanceOf[from].sub(value);
balanceOf[to] = balanceOf[to].add(value);
emit Transfer(from, to, value);
}
function approve(address spender, uint value) external returns (bool) {
_approve(_msgSender(), spender, value);
return true;
}
function transfer(address to, uint value) external returns (bool) {
_transfer(_msgSender(), to, value);
return true;
}
function transferFrom(address from, address to, uint value) external returns (bool) {
if (allowance[from][_msgSender()] != uint(-1)) {
allowance[from][_msgSender()] = allowance[from][_msgSender()].sub(value);
}
_transfer(from, to, value);
return true;
}
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
require(deadline >= block.timestamp, 'SolarBeam: EXPIRED');
bytes32 digest = keccak256(
abi.encodePacked(
'\x19\x01',
DOMAIN_SEPARATOR,
keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
)
);
address recoveredAddress = ecrecover(digest, v, r, s);
require(recoveredAddress != address(0) && recoveredAddress == owner, 'SolarBeam: INVALID_SIGNATURE');
_approve(owner, spender, value);
}
}
// a library for performing various math operations
library Math {
function min(uint x, uint y) internal pure returns (uint z) {
z = x < y ? x : y;
}
// babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))
// range: [0, 2**112 - 1]
// resolution: 1 / 2**112
library UQ112x112 {
uint224 constant Q112 = 2**112;
// encode a uint112 as a UQ112x112
function encode(uint112 y) internal pure returns (uint224 z) {
z = uint224(y) * Q112; // never overflows
}
// divide a UQ112x112 by a uint112, returning a UQ112x112
function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
z = x / uint224(y);
}
}
interface IERC20Solar {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}
interface ISolarFactory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function migrator() external view returns (address);
function auro() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
function setMigrator(address) external;
function setAuroAddress(address) external;
}
interface ISolarCallee {
function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}
interface IMigrator {
// Return the desired amount of liquidity token that the migrator wants.
function desiredLiquidity() external view returns (uint256);
}
contract SolarPair is SolarERC20 {
using SafeMathSolar for uint;
using UQ112x112 for uint224;
uint public constant MINIMUM_LIQUIDITY = 10**3;
bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));
address public factory;
address public token0;
address public token1;
uint112 private reserve0; // uses single storage slot, accessible via getReserves
uint112 private reserve1; // uses single storage slot, accessible via getReserves
uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves
uint public price0CumulativeLast;
uint public price1CumulativeLast;
uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event
struct SwapVariables {
uint112 _reserve0;
uint112 _reserve1;
uint balance0;
uint balance1;
uint amount0In;
uint amount1In;
uint fee;
}
uint private unlocked = 1;
modifier lock() {
require(unlocked == 1, 'SolarBeam: LOCKED');
unlocked = 0;
_;
unlocked = 1;
}
function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
_reserve0 = reserve0;
_reserve1 = reserve1;
_blockTimestampLast = blockTimestampLast;
}
function _safeTransfer(address token, address to, uint value) private {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'SolarBeam: TRANSFER_FAILED');
}
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
constructor() public {
factory = msg.sender;
}
// called once by the factory at time of deployment
function initialize(address _token0, address _token1) external {
require(msg.sender == factory, 'SolarBeam: FORBIDDEN'); // sufficient check
token0 = _token0;
token1 = _token1;
}
// update reserves and, on the first call per block, price accumulators
function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'SolarBeam: OVERFLOW');
uint32 blockTimestamp = uint32(block.timestamp % 2**32);
uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
// * never overflows, and + overflow is desired
price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
}
reserve0 = uint112(balance0);
reserve1 = uint112(balance1);
blockTimestampLast = blockTimestamp;
emit Sync(reserve0, reserve1);
}
// if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
address feeTo = ISolarFactory(factory).feeTo();
feeOn = feeTo != address(0);
uint _kLast = kLast; // gas savings
if (feeOn) {
if (_kLast != 0) {
uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
uint rootKLast = Math.sqrt(_kLast);
if (rootK > rootKLast) {
uint numerator = totalSupply.mul(rootK.sub(rootKLast));
uint denominator = rootK.mul(5).add(rootKLast);
uint liquidity = numerator / denominator;
if (liquidity > 0) _mint(feeTo, liquidity);
}
}
} else if (_kLast != 0) {
kLast = 0;
}
}
// this low-level function should be called from a contract which performs important safety checks
function mint(address to) external lock returns (uint liquidity) {
(uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
uint balance0 = IERC20Solar(token0).balanceOf(address(this));
uint balance1 = IERC20Solar(token1).balanceOf(address(this));
uint amount0 = balance0.sub(_reserve0);
uint amount1 = balance1.sub(_reserve1);
bool feeOn = _mintFee(_reserve0, _reserve1);
uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
if (_totalSupply == 0) {
address migrator = ISolarFactory(factory).migrator();
if (_msgSender() == migrator) {
liquidity = IMigrator(migrator).desiredLiquidity();
require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
} else {
require(migrator == address(0), "Must not have migrator");
liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
_mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
}
} else {
liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
}
require(liquidity > 0, 'SolarBeam: INSUFFICIENT_LIQUIDITY_MINTED');
_mint(to, liquidity);
_update(balance0, balance1, _reserve0, _reserve1);
if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
emit Mint(_msgSender(), amount0, amount1);
}
// this low-level function should be called from a contract which performs important safety checks
function burn(address to) external lock returns (uint amount0, uint amount1) {
(uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
address _token0 = token0; // gas savings
address _token1 = token1; // gas savings
uint balance0 = IERC20Solar(_token0).balanceOf(address(this));
uint balance1 = IERC20Solar(_token1).balanceOf(address(this));
uint liquidity = balanceOf[address(this)];
bool feeOn = _mintFee(_reserve0, _reserve1);
uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
require(amount0 > 0 && amount1 > 0, 'SolarBeam: INSUFFICIENT_LIQUIDITY_BURNED');
_burn(address(this), liquidity);
_safeTransfer(_token0, to, amount0);
_safeTransfer(_token1, to, amount1);
balance0 = IERC20Solar(_token0).balanceOf(address(this));
balance1 = IERC20Solar(_token1).balanceOf(address(this));
_update(balance0, balance1, _reserve0, _reserve1);
if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
emit Burn(_msgSender(), amount0, amount1, to);
}
// this low-level function should be called from a contract which performs important safety checks
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
require(amount0Out > 0 || amount1Out > 0, 'SolarBeam: INSUFFICIENT_OUTPUT_AMOUNT');
SwapVariables memory vars = SwapVariables(0, 0, 0, 0, 0, 0, 0);
(vars._reserve0, vars._reserve1,) = getReserves(); // gas savings
require(amount0Out < vars._reserve0 && amount1Out < vars._reserve1, 'SolarBeam: INSUFFICIENT_LIQUIDITY');
vars.fee = 25;
{ // scope for _token{0,1}, avoids stack too deep errors
address _token0 = token0;
address _token1 = token1;
require(to != _token0 && to != _token1, 'SolarBeam: INVALID_TO');
if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
if (data.length > 0) ISolarCallee(to).uniswapV2Call(_msgSender(), amount0Out, amount1Out, data);
vars.balance0 = IERC20Solar(_token0).balanceOf(address(this));
vars.balance1 = IERC20Solar(_token1).balanceOf(address(this));
}
vars.amount0In = vars.balance0 > vars._reserve0 - amount0Out ? vars.balance0 - (vars._reserve0 - amount0Out) : 0;
vars.amount1In = vars.balance1 > vars._reserve1 - amount1Out ? vars.balance1 - (vars._reserve1 - amount1Out) : 0;
require(vars.amount0In > 0 || vars.amount1In > 0, 'SolarBeam: INSUFFICIENT_INPUT_AMOUNT');
{ // scope for reserve{0,1}Adjusted, avoids stack too deep errors
uint balance0Adjusted = vars.balance0.mul(10000).sub(vars.amount0In.mul(vars.fee));
uint balance1Adjusted = vars.balance1.mul(10000).sub(vars.amount1In.mul(vars.fee));
require(balance0Adjusted.mul(balance1Adjusted) >= uint(vars._reserve0).mul(vars._reserve1).mul(10000**2), 'SolarBeam: K');
}
_update(vars.balance0, vars.balance1, vars._reserve0, vars._reserve1);
emit Swap(_msgSender(), vars.amount0In, vars.amount1In, amount0Out, amount1Out, to);
}
// force balances to match reserves
function skim(address to) external lock {
address _token0 = token0; // gas savings
address _token1 = token1; // gas savings
_safeTransfer(_token0, to, IERC20Solar(_token0).balanceOf(address(this)).sub(reserve0));
_safeTransfer(_token1, to, IERC20Solar(_token1).balanceOf(address(this)).sub(reserve1));
}
// force reserves to match balances
function sync() external lock {
_update(IERC20Solar(token0).balanceOf(address(this)), IERC20Solar(token1).balanceOf(address(this)), reserve0, reserve1);
}
function disableMetaTxns() external {
require(_msgSender() == factory, 'SolarBeam: FORBIDDEN');
require(metaTxnsEnabled, "SolarBeam: META_TXNS_ALREADY_DISABLED");
metaTxnsEnabled = false;
emit MetaTxnsDisabled(_msgSender());
}
function enableMetaTxns() external {
require(_msgSender() == factory, 'SolarBeam: FORBIDDEN');
require(!metaTxnsEnabled, "SolarBeam: META_TXNS_ALREADY_ENABLED");
metaTxnsEnabled = true;
emit MetaTxnsEnabled(_msgSender());
}
}

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1","internalType":"uint256","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"MetaTxnsDisabled","inputs":[{"type":"address","name":"caller","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"MetaTxnsEnabled","inputs":[{"type":"address","name":"caller","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0In","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1In","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount0Out","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1Out","internalType":"uint256","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Sync","inputs":[{"type":"uint112","name":"reserve0","internalType":"uint112","indexed":false},{"type":"uint112","name":"reserve1","internalType":"uint112","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_SEPARATOR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MINIMUM_LIQUIDITY","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PERMIT_TYPEHASH","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amount0","internalType":"uint256"},{"type":"uint256","name":"amount1","internalType":"uint256"}],"name":"burn","inputs":[{"type":"address","name":"to","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"disableMetaTxns","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableMetaTxns","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint112","name":"_reserve0","internalType":"uint112"},{"type":"uint112","name":"_reserve1","internalType":"uint112"},{"type":"uint32","name":"_blockTimestampLast","internalType":"uint32"}],"name":"getReserves","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"_token0","internalType":"address"},{"type":"address","name":"_token1","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTrustedForwarder","inputs":[{"type":"address","name":"forwarder","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"kLast","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"metaTxnsEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"permit","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price0CumulativeLast","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price1CumulativeLast","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"skim","inputs":[{"type":"address","name":"to","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swap","inputs":[{"type":"uint256","name":"amount0Out","internalType":"uint256"},{"type":"uint256","name":"amount1Out","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"sync","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token0","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]}]
            

Deployed ByteCode

Verify & Publish
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80635a3d54931161010f578063a9059cbb116100a2578063d21220a711610071578063d21220a714610651578063d505accf14610659578063dd62ed3e146106b7578063fff6cae9146106f2576101e5565b8063a9059cbb146105d5578063ba9a7a561461060e578063bc25cf7714610616578063c45a015514610649576101e5565b80637ecebe00116100de5780637ecebe001461054657806389afcb441461057957806395d89b41146105c5578063a8c95dc0146105cd576101e5565b80635a3d5493146104d05780636a627842146104d857806370a082311461050b5780637464fc3d1461053e576101e5565b806323b872dd11610187578063485cc95511610156578063485cc95514610452578063572b6c051461048d578063578bb42d146104c05780635909c0d5146104c8576101e5565b806323b872dd146103e157806330adf81f14610424578063313ce5671461042c5780633644e5151461044a576101e5565b80630902f1ac116101c35780630902f1ac1461030a578063095ea7b3146103495780630dfe16811461039657806318160ddd146103c7576101e5565b8063022c0d9f146101ea57806306fdde03146102855780630838364014610302575b600080fd5b6102836004803603608081101561020057600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561024457600080fd5b82018360208201111561025657600080fd5b8035906020019184600183028401116401000000008311171561027857600080fd5b5090925090506106fa565b005b61028d610ebe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c75781810151838201526020016102af565b50505050905090810190601f1680156102f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610283610ef7565b610312611081565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103826004803603604081101561035f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356110d6565b604080519115158252519081900360200190f35b61039e6110f4565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103cf611110565b60408051918252519081900360200190f35b610382600480360360608110156103f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611116565b6103cf611272565b610434611296565b6040805160ff9092168252519081900360200190f35b6103cf61129b565b6102836004803603604081101561046857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a1565b610382600480360360208110156104a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661137a565b6102836113c9565b6103cf61156b565b6103cf611571565b6103cf600480360360208110156104ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611577565b6103cf6004803603602081101561052157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b9b565b6103cf611bad565b6103cf6004803603602081101561055c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611bb3565b6105ac6004803603602081101561058f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611bc5565b6040805192835260208301919091528051918290030190f35b61028d61206f565b6103826120a8565b610382600480360360408110156105eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356120c9565b6103cf6120dd565b6102836004803603602081101561062c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166120e3565b61039e6122d0565b61039e6122ec565b610283600480360360e081101561066f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612308565b6103cf600480360360408110156106cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166125d4565b6102836125f1565b600d5460011461076b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d558415158061077e5750600084115b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133826025913960400191505060405180910390fd5b6107db613324565b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815250905061083f611081565b506dffffffffffffffffffffffffffff9081166020840152168082528610801561087c575080602001516dffffffffffffffffffffffffffff1685105b6108d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061343c6021913960400191505060405180910390fd5b601960c082015260075460085473ffffffffffffffffffffffffffffffffffffffff91821691908116908616821480159061093857508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b6109a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f536f6c61724265616d3a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b87156109b4576109b482878a6127d7565b86156109c5576109c58187896127d7565b8315610a98578573ffffffffffffffffffffffffffffffffffffffff166310d1e85c6109ef6129e4565b8a8a89896040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610a7f57600080fd5b505af1158015610a93573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610b0457600080fd5b505afa158015610b18573d6000803e3d6000fd5b505050506040513d6020811015610b2e57600080fd5b505160408085019190915280517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8316916370a08231916024808301926020929190829003018186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d6020811015610bcd57600080fd5b505160608401525050805160408201516dffffffffffffffffffffffffffff90911687900310610bfe576000610c1c565b8581600001516dffffffffffffffffffffffffffff16038160400151035b8160800181815250508481602001516dffffffffffffffffffffffffffff1603816060015111610c4d576000610c6b565b8481602001516dffffffffffffffffffffffffffff16038160600151035b60a08201526080810151151580610c86575060008160a00151115b610cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134186024913960400191505060405180910390fd5b6000610d12610cfb8360c001518460800151612a2790919063ffffffff16565b6040840151610d0c90612710612a27565b90612aad565b90506000610d45610d348460c001518560a00151612a2790919063ffffffff16565b6060850151610d0c90612710612a27565b9050610d906305f5e100610d8a85602001516dffffffffffffffffffffffffffff1686600001516dffffffffffffffffffffffffffff16612a2790919063ffffffff16565b90612a27565b610d9a8383612a27565b1015610e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f536f6c61724265616d3a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610e258160400151826060015183600001518460200151612b1f565b8373ffffffffffffffffffffffffffffffffffffffff16610e446129e4565b73ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82283608001518460a001518a8a6040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001600d5550505050565b6040518060400160405280601281526020017f536f6c61724265616d204c5020546f6b656e000000000000000000000000000081525081565b60065473ffffffffffffffffffffffffffffffffffffffff16610f186129e4565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f536f6c61724265616d3a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff1661100d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133cb6025913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905561103d6129e4565b73ffffffffffffffffffffffffffffffffffffffff167f096be170ccc67847e55535e7d8334b2afedd95805baedc160005addb9144745060405160405180910390a2565b6009546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b60006110ea6110e36129e4565b8484612dd5565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90826111666129e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461125d5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260205260408120611207918491906111da6129e4565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205490612aad565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600260205260408120906112356129e4565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020555b611268848484612e44565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60065473ffffffffffffffffffffffffffffffffffffffff16331461132757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f536f6c61724265616d3a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6007805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560088054929093169116179055565b60055460009074010000000000000000000000000000000000000000900460ff1680156113c1575060055473ffffffffffffffffffffffffffffffffffffffff8381169116145b90505b919050565b60065473ffffffffffffffffffffffffffffffffffffffff166113ea6129e4565b73ffffffffffffffffffffffffffffffffffffffff161461146c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f536f6c61724265616d3a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133a76024913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556115276129e4565b73ffffffffffffffffffffffffffffffffffffffff167f92e4c08d47b71e8dc051232b8e475ec296489a67a4ba5cca88ff20fb6ac499e660405160405180910390a2565b600a5481565b600b5481565b6000600d546001146115ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d819055806115fa611081565b50600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d602081101561169e57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561171757600080fd5b505afa15801561172b573d6000803e3d6000fd5b505050506040513d602081101561174157600080fd5b505190506000611761836dffffffffffffffffffffffffffff8716612aad565b9050600061177f836dffffffffffffffffffffffffffff8716612aad565b9050600061178d8787612f19565b60005490915080611a2f57600654604080517f7cd07e47000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691637cd07e47916004808301926020929190829003018186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b505050506040513d602081101561182d57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81166118506129e4565b73ffffffffffffffffffffffffffffffffffffffff16141561197f578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b1580156118b257600080fd5b505afa1580156118c6573d6000803e3d6000fd5b505050506040513d60208110156118dc57600080fd5b50519950891580159061190f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b61197a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4261642064657369726564206c69717569646974790000000000000000000000604482015290519081900360640190fd5b611a29565b73ffffffffffffffffffffffffffffffffffffffff811615611a0257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015290519081900360640190fd5b611a1a6103e8610d0c611a158888612a27565b613087565b9950611a2960006103e86130d8565b50611a80565b611a7d6dffffffffffffffffffffffffffff8916611a4d8684612a27565b81611a5457fe5b046dffffffffffffffffffffffffffff8916611a708685612a27565b81611a7757fe5b0461317c565b98505b60008911611ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061345d6028913960400191505060405180910390fd5b611ae38a8a6130d8565b611aef86868a8a612b1f565b8115611b2b57600954611b27906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612a27565b600c555b611b336129e4565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600c5481565b60046020526000908152604090205481565b600080600d54600114611c3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d81905580611c49611081565b50600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b158015611ccb57600080fd5b505afa158015611cdf573d6000803e3d6000fd5b505050506040513d6020811015611cf557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d6020811015611d9357600080fd5b505130600090815260016020526040812054919250611db28888612f19565b60005490915080611dc38487612a27565b81611dca57fe5b049a5080611dd88486612a27565b81611ddf57fe5b04995060008b118015611df2575060008a115b611e47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806133f06028913960400191505060405180910390fd5b611e513084613194565b611e5c878d8d6127d7565b611e67868d8c6127d7565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b158015611ed357600080fd5b505afa158015611ee7573d6000803e3d6000fd5b505050506040513d6020811015611efd57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b158015611f6f57600080fd5b505afa158015611f83573d6000803e3d6000fd5b505050506040513d6020811015611f9957600080fd5b50519350611fa985858b8b612b1f565b8115611fe557600954611fe1906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612a27565b600c555b8b73ffffffffffffffffffffffffffffffffffffffff166120046129e4565b73ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020017f534c50000000000000000000000000000000000000000000000000000000000081525081565b60055474010000000000000000000000000000000000000000900460ff1681565b60006110ea6120d66129e4565b8484612e44565b6103e881565b600d5460011461215457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d55600754600854600954604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff948516949093169261222a9285928792612225926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d602081101561221d57600080fd5b505190612aad565b6127d7565b6122c681846122256009600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121f357600080fd5b50506001600d5550565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f536f6c61724265616d3a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156124d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061255357508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6125be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f536f6c61724265616d3a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b6125c9898989612dd5565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600d5460011461266257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f536f6c61724265616d3a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600d55600754604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516127d09273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156126d957600080fd5b505afa1580156126ed573d6000803e3d6000fd5b505050506040513d602081101561270357600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561277657600080fd5b505afa15801561278a573d6000803e3d6000fd5b505050506040513d60208110156127a057600080fd5b50516009546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612b1f565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106128dd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016128a0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461293f576040519150601f19603f3d011682016040523d82523d6000602084013e612944565b606091505b5091509150818015612972575080511580612972575080806020019051602081101561296f57600080fd5b50515b6129dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536f6c61724265616d3a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60006129ef3361137a565b15612a2157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c612a24565b50335b90565b6000811580612a4257505080820282828281612a3f57fe5b04145b6110ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808203828111156110ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff8411801590612b4b57506dffffffffffffffffffffffffffff8311155b612bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536f6c61724265616d3a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60095463ffffffff428116917c010000000000000000000000000000000000000000000000000000000090048116820390811615801590612c0657506dffffffffffffffffffffffffffff841615155b8015612c2157506dffffffffffffffffffffffffffff831615155b15612ccb578063ffffffff16612c5e85612c3a8661324d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690613271565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612c9e84612c3a8761324d565b600b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600980547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612e749082612aad565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612eb090826132b2565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8457600080fd5b505afa158015612f98573d6000803e3d6000fd5b505050506040513d6020811015612fae57600080fd5b5051600c5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061307357801561306e576000612fff611a156dffffffffffffffffffffffffffff888116908816612a27565b9050600061300c83613087565b90508082111561306b57600061302e6130258484612aad565b60005490612a27565b9050600061304783613041866005612a27565b906132b2565b9050600081838161305457fe5b04905080156130675761306787826130d8565b5050505b50505b61307f565b801561307f576000600c555b505092915050565b600060038211156130ca575080600160028204015b818110156130c4578091506002818285816130b357fe5b0401816130bc57fe5b04905061309c565b506113c4565b81156113c457506001919050565b6000546130e590826132b2565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461311790826132b2565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061318b578161318d565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546131c49082612aad565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546131f89082612aad565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816132aa57fe5b049392505050565b808201828110156110ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152509056fe536f6c61724265616d3a20494e53554646494349454e545f4f55545055545f414d4f554e54536f6c61724265616d3a204d4554415f54584e535f414c52454144595f454e41424c4544536f6c61724265616d3a204d4554415f54584e535f414c52454144595f44495341424c4544536f6c61724265616d3a20494e53554646494349454e545f4c49515549444954595f4255524e4544536f6c61724265616d3a20494e53554646494349454e545f494e5055545f414d4f554e54536f6c61724265616d3a20494e53554646494349454e545f4c4951554944495459536f6c61724265616d3a20494e53554646494349454e545f4c49515549444954595f4d494e544544a26469706673582212205633bf08894a1555127933b66a917832a7a574d5267493968d4fc119070f54e764736f6c634300060c0033