Source Code
Overview
MON Balance
MON Value
$0.00Loading...
Loading
Contract Name:
KewiTokenFactory
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/**
*Submitted for verification at monadscan.com on 2025-12-06
*/
/**
██╗░░██╗███████╗░██╗░░░░░░░██╗██╗ ██╗░░░░░░█████╗░██╗░░░██╗███╗░░██╗░█████╗░██╗░░██╗██████╗░░█████╗░██████╗░
██║░██╔╝██╔════╝░██║░░██╗░░██║██║ ██║░░░░░██╔══██╗██║░░░██║████╗░██║██╔══██╗██║░░██║██╔══██╗██╔══██╗██╔══██╗
█████═╝░█████╗░░░╚██╗████╗██╔╝██║ ██║░░░░░███████║██║░░░██║██╔██╗██║██║░░╚═╝███████║██████╔╝███████║██║░░██║
██╔═██╗░██╔══╝░░░░████╔═████║░██║ ██║░░░░░██╔══██║██║░░░██║██║╚████║██║░░██╗██╔══██║██╔═══╝░██╔══██║██║░░██║
██║░╚██╗███████╗░░╚██╔╝░╚██╔╝░██║ ███████╗██║░░██║╚██████╔╝██║░╚███║╚█████╔╝██║░░██║██║░░░░░██║░░██║██████╔╝
╚═╝░░╚═╝╚══════╝░░░╚═╝░░░╚═╝░░╚═╝ ╚══════╝╚═╝░░╚═╝░╚═════╝░╚═╝░░╚══╝░╚════╝░╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚═════╝░
// Website: https://kewi.io
// Telegram: https://t.me/KewiLabs
// Twitter: https://x.com/KewiLabs
*/
// SPDX-License-Identifier: MIT
// File: Token.sol
pragma solidity ^0.8.24;
/// @title Meme Token used by TokenFactory bonding curve + Uniswap launch
/// @notice Minimal ERC20 with controlled mint/burn by factory only and a hard maxSupply
contract Token {
// --- ERC20 storage ---
string public name;
string public symbol;
uint8 public constant decimals = 18;
uint256 public immutable maxSupply;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
// --- Access control ---
address public factory;
bool private factoryLocked; // once setFactory is called successfully, it locks
// --- Events (ERC20 standard + extras) ---
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
event FactorySet(address indexed factory);
event Minted(address indexed to, uint256 amount);
event Burned(address indexed from, uint256 amount);
// --- Modifiers ---
modifier onlyFactory() {
require(msg.sender == factory, "Not factory");
_;
}
// --- Constructor ---
/// @param _name ERC20 name
/// @param _symbol ERC20 symbol
/// @param _maxSupply Maximum supply in raw units (18 decimals)
/// @param _initialLpSupply Amount to mint immediately to the factory (LP tokens)
constructor(
string memory _name,
string memory _symbol,
uint256 _maxSupply,
uint256 _initialLpSupply
) {
require(_maxSupply > 0, "maxSupply zero");
require(_initialLpSupply <= _maxSupply, "init > max");
name = _name;
symbol = _symbol;
maxSupply = _maxSupply;
// Mint initial LP supply to deployer (TokenFactory)
_mint(msg.sender, _initialLpSupply);
}
// ======================================================
// ERC20 PUBLIC VIEW
// ======================================================
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
// ======================================================
// ERC20 MUTATING
// ======================================================
function transfer(address to, uint256 amount) public returns (bool) {
_transfer(msg.sender, to, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public returns (bool) {
uint256 currentAllowance = _allowances[from][msg.sender];
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(from, msg.sender, currentAllowance - amount);
}
_transfer(from, to, amount);
return true;
}
// ======================================================
// FACTORY MANAGEMENT + BONDING CURVE API
// ======================================================
/// @notice One-time link between this token and its TokenFactory.
function setFactory(address _factory) external {
require(!factoryLocked, "Factory already set");
require(_factory != address(0), "Zero factory");
factory = _factory;
factoryLocked = true;
emit FactorySet(_factory);
}
/// @notice Mint new tokens to `to`.
/// @dev Only callable by the bonded curve / TokenFactory.
function mint(uint256 amount, address to) external onlyFactory {
_mint(to, amount);
emit Minted(to, amount);
}
/// @notice Burn tokens from `from`.
/// @dev Only callable by the TokenFactory on user sell.
function burn(uint256 amount, address from) external onlyFactory {
_burn(from, amount);
emit Burned(from, amount);
}
// ======================================================
// INTERNAL CORE LOGIC
// ======================================================
function _transfer(address from, address to, uint256 amount) internal {
require(from != address(0), "ERC20: transfer from zero");
require(to != address(0), "ERC20: transfer to zero");
uint256 fromBal = _balances[from];
require(fromBal >= amount, "ERC20: transfer > balance");
unchecked {
_balances[from] = fromBal - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
}
function _mint(address to, uint256 amount) internal {
require(to != address(0), "ERC20: mint to zero");
require(totalSupply + amount <= maxSupply, "max supply exceeded");
totalSupply += amount;
_balances[to] += amount;
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal {
require(from != address(0), "ERC20: burn from zero");
uint256 fromBal = _balances[from];
require(fromBal >= amount, "ERC20: burn > balance");
unchecked {
_balances[from] = fromBal - amount;
}
totalSupply -= amount;
emit Transfer(from, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from zero");
require(spender != address(0), "ERC20: approve to zero");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
}
//https://chatgpt.com/c/691efff4-198c-8322-9edd-e38c0628d8c3
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol
pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
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(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;
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol
pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
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);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// File: BondingCurve.sol
pragma solidity ^0.8.24;
/// @title Meme Token Factory with Exponential Bonding Curve + Uniswap Launch
/// @notice Production-style version with 1% trading fee, listing fee, and safety hardening.
/// @dev IMPORTANT: For production, REMOVE withdrawFees() and only use withdrawProtocolFees().
contract KewiTokenFactory {
// --- Events ---
event MemeTokenCreated(
address indexed tokenAddress,
address indexed creator,
uint256 timestamp
);
event TokenBought(
address indexed tokenAddress,
address indexed buyer,
uint256 tokenQty,
uint256 totalPaid, // includes fee
uint256 timestamp
);
event TokenSold(
address indexed tokenAddress,
address indexed seller,
uint256 tokenQty,
uint256 netRefund, // after fee
uint256 timestamp
);
event TokenLaunched(
address indexed tokenAddress,
uint256 ethForLP,
uint256 listingFeeTaken,
uint256 timestamp
);
event ListingFeeUpdated(uint256 newListingFee);
// --- Structs ---
struct MemeToken {
string name;
string symbol;
string description;
string tokenImageUrl;
uint256 fundingRaised; // ETH reserved for LP (net of trading fees)
address tokenAddress;
address creatorAddress;
bool isLaunched;
}
// --- State ---
address public immutable owner;
address public immutable uniswapFactory;
address public immutable uniswapRouter;
address[] public memeTokenAddresses;
mapping(address => MemeToken) public addressToMemeToken;
mapping(address => uint256) public curveSupply; // raw units sold via curve (1e18-based)
// --- Fees ---
uint256 public constant MEMETOKEN_CREATION_FEE = 100 ether;
uint256 public constant FEE_BPS = 100; // 1% in basis points
uint256 public constant BPS_DENOMINATOR = 10_000;
/// @notice Listing fee charged at launch, taken from fundingRaised and added to protocolFeeBalance.
uint256 public listingFee;
/// @notice All protocol fees accumulated (creation + trading + listing) withdrawable by owner.
uint256 public protocolFeeBalance;
// --- Tokenomics Constants ---
uint256 public constant DECIMALS = 10 ** 18;
uint256 public constant MAX_SUPPLY = 1_000_000 * DECIMALS;
uint256 public constant INIT_SUPPLY = (MAX_SUPPLY * 20) / 100; // 20% for LP, minted at token creation
// Bonding curve parameters (must be calibrated off-chain for your target market cap)
// uint256 public constant INITIAL_PRICE = 30_000 * 10 ** 9;
// uint256 public constant K = 8 * 10 ** 15; // curvature (Q18). LOWER THIS IN PRODUCTION.
// Bonding curve parameters (calibrated off-chain)
uint256 public constant INITIAL_PRICE = 991_370_064; // wei per token at s = 0 (~9.9137e-10 ETH)
uint256 public constant K = 4_900_862_993_591; // curvature, Q18-scaled
/// @notice ETH goal at which token graduates to Uniswap.
uint256 public constant MEMECOIN_FUNDING_GOAL = 0.01 ether;
// --- Reentrancy Guard ---
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
modifier nonReentrant() {
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
// Uniswap Sepolia
// address public constant UNISWAP_FACTORY = 0xF62c03E08ada871A0bEb309762E260a7a6a880E6;
// address public constant UNISWAP_ROUTER = 0xeE567Fe1712Faf6149d80dA1E6934E354124CfE3;
// --- Constructor ---
constructor(
address _uniswapFactory,
address _uniswapRouter,
uint256 _listingFee
) {
require(_uniswapFactory != address(0), "zero factory");
require(_uniswapRouter != address(0), "zero router");
owner = msg.sender;
uniswapFactory = _uniswapFactory;
uniswapRouter = _uniswapRouter;
listingFee = _listingFee;
_status = _NOT_ENTERED;
}
// --- Admin configuration ---
function setListingFee(uint256 _listingFee) external onlyOwner {
listingFee = _listingFee;
emit ListingFeeUpdated(_listingFee);
}
// --- Token Creation ---
function createMemeToken(
string memory name,
string memory symbol,
string memory imageUrl,
string memory description
) external payable nonReentrant returns (address) {
require(msg.value >= MEMETOKEN_CREATION_FEE, "Creation fee required");
// Creation fee is part of protocol fees
protocolFeeBalance += msg.value;
// Mint 20% LP supply to this factory; remaining 80% will be minted via bonding curve
Token token = new Token(name, symbol, MAX_SUPPLY, INIT_SUPPLY);
token.setFactory(address(this));
address tokenAddr = address(token);
memeTokenAddresses.push(tokenAddr);
addressToMemeToken[tokenAddr] = MemeToken({
name: name,
symbol: symbol,
description: description,
tokenImageUrl: imageUrl,
fundingRaised: 0,
tokenAddress: tokenAddr,
creatorAddress: msg.sender,
isLaunched: false
});
emit MemeTokenCreated(tokenAddr, msg.sender, block.timestamp);
return tokenAddr;
}
function getAllMemeTokens() external view returns (MemeToken[] memory) {
uint256 len = memeTokenAddresses.length;
MemeToken[] memory list = new MemeToken[](len);
for (uint256 i = 0; i < len; i++) {
list[i] = addressToMemeToken[memeTokenAddresses[i]];
}
return list;
}
// --- Bonding Curve Math ---
function calculateCost(
uint256 currentRaw,
uint256 amountRaw
) public pure returns (uint256) {
uint256 exponent1 = (K * (currentRaw + amountRaw)) / DECIMALS;
uint256 exponent0 = (K * currentRaw) / DECIMALS;
uint256 exp1 = exp(exponent1);
uint256 exp0 = exp(exponent0);
return (INITIAL_PRICE * (exp1 - exp0)) / K;
}
/// @notice Given `ethAmount` (total, including 1% fee) returns max whole tokens you can buy on the curve.
/// @dev Uses binary search and never reverts even if calculateCost would overflow for too-large mid.
function calculateTokenAmountFromEth(
address tokenAddr,
uint256 ethAmount
) external view returns (uint256) {
MemeToken storage mt = addressToMemeToken[tokenAddr];
require(
mt.tokenAddress == tokenAddr && tokenAddr != address(0),
"Unknown token"
);
require(!mt.isLaunched, "Already launched");
uint256 currentRaw = curveSupply[tokenAddr];
uint256 availRaw = MAX_SUPPLY - INIT_SUPPLY - currentRaw;
uint256 maxTokens = availRaw / DECIMALS;
if (maxTokens == 0 || ethAmount == 0) {
return 0;
}
// Only (1 - fee%) of ethAmount actually goes to the curve
uint256 effectiveEth = (ethAmount * (BPS_DENOMINATOR - FEE_BPS)) /
BPS_DENOMINATOR;
uint256 low = 0;
uint256 high = maxTokens;
while (low < high) {
uint256 mid = (low + high + 1) / 2;
uint256 amountRaw = mid * DECIMALS;
(bool ok, bytes memory data) = address(this).staticcall(
abi.encodeWithSelector(
this.calculateCost.selector,
currentRaw,
amountRaw
)
);
if (ok) {
uint256 cost = abi.decode(data, (uint256));
if (cost <= effectiveEth) {
low = mid;
continue;
}
}
high = mid - 1;
}
return low;
}
function calculateRefund(
uint256 currentRaw,
uint256 amountRaw
) public pure returns (uint256) {
uint256 exponent1 = (K * currentRaw) / DECIMALS;
uint256 exponent0 = (K * (currentRaw - amountRaw)) / DECIMALS;
uint256 exp1 = exp(exponent1);
uint256 exp0 = exp(exponent0);
return (INITIAL_PRICE * (exp1 - exp0)) / K;
}
/// @dev Fixed-point exp with Q18 scaling: x is exponent * 1e18, result is e^(x/1e18) * 1e18.
/// MUST choose K and supply bounds so this does not overflow in practice.
function exp(uint256 x) internal pure returns (uint256) {
uint256 sum = DECIMALS; // 1.0
uint256 term = DECIMALS;
for (uint256 i = 1; i <= 20; i++) {
term = (term * x) / (uint256(i) * DECIMALS);
sum += term;
if (term < 1) break;
}
return sum;
}
// --- Pre-launch Buy & Sell ---
/// @notice Buy `tokenQty` whole tokens from the bonding curve for `tokenAddr`.
/// @dev msg.value must equal curve cost + 1% fee. Reverts if token already launched.
function buyMemeToken(
address tokenAddr,
uint256 tokenQty
) external payable nonReentrant returns (uint256) {
MemeToken storage mt = addressToMemeToken[tokenAddr];
require(
mt.tokenAddress == tokenAddr && tokenAddr != address(0),
"Unknown token"
);
require(!mt.isLaunched, "Launched: use Uniswap");
Token token = Token(tokenAddr);
uint256 qtyRaw = tokenQty * DECIMALS;
uint256 currentRaw = curveSupply[tokenAddr];
uint256 available = MAX_SUPPLY - INIT_SUPPLY - currentRaw;
require(qtyRaw <= available, "Insufficient supply");
uint256 curveCost = calculateCost(currentRaw, qtyRaw);
uint256 fee = (curveCost * FEE_BPS) / BPS_DENOMINATOR;
uint256 total = curveCost + fee;
require(msg.value == total, "Incorrect ETH amount");
protocolFeeBalance += fee;
mt.fundingRaised += curveCost;
curveSupply[tokenAddr] = currentRaw + qtyRaw;
token.mint(qtyRaw, msg.sender);
emit TokenBought(
tokenAddr,
msg.sender,
tokenQty,
total,
block.timestamp
);
// Graduation condition (based on ETH earmarked for LP, not counting fees)
if (!mt.isLaunched && mt.fundingRaised >= MEMECOIN_FUNDING_GOAL) {
uint256 lpEth = mt.fundingRaised;
uint256 takenListingFee = 0;
if (listingFee > 0 && lpEth > listingFee) {
lpEth -= listingFee;
protocolFeeBalance += listingFee;
takenListingFee = listingFee;
}
mt.isLaunched = true;
mt.fundingRaised = 0;
_launchOnUniswap(tokenAddr, lpEth);
emit TokenLaunched(
tokenAddr,
lpEth,
takenListingFee,
block.timestamp
);
}
return total;
}
/// @notice Sell `tokenQty` whole tokens back to the bonding curve.
/// @dev Returns NET ETH refunded (after 1% fee). Reverts if already launched.
function sellMemeToken(
address tokenAddr,
uint256 tokenQty
) external nonReentrant returns (uint256) {
MemeToken storage mt = addressToMemeToken[tokenAddr];
require(
mt.tokenAddress == tokenAddr && tokenAddr != address(0),
"Unknown token"
);
require(!mt.isLaunched, "Launched: use Uniswap");
Token token = Token(tokenAddr);
uint256 qtyRaw = tokenQty * DECIMALS;
uint256 currentRaw = curveSupply[tokenAddr];
require(token.balanceOf(msg.sender) >= qtyRaw, "Insufficient balance");
require(currentRaw >= qtyRaw, "Curve supply too low");
uint256 refund = calculateRefund(currentRaw, qtyRaw);
require(mt.fundingRaised >= refund, "Insufficient curve ETH");
uint256 fee = (refund * FEE_BPS) / BPS_DENOMINATOR;
uint256 netRefund = refund - fee;
protocolFeeBalance += fee;
mt.fundingRaised -= refund;
curveSupply[tokenAddr] = currentRaw - qtyRaw;
token.burn(qtyRaw, msg.sender);
(bool success, ) = msg.sender.call{value: netRefund}("");
require(success, "ETH transfer failed");
emit TokenSold(
tokenAddr,
msg.sender,
tokenQty,
netRefund,
block.timestamp
);
return netRefund;
}
// --- Uniswap Launch Helpers ---
function _launchOnUniswap(address tokenAddr, uint256 ethAmount) internal {
require(ethAmount > 0, "No ETH for LP");
IUniswapV2Factory factory = IUniswapV2Factory(uniswapFactory);
IUniswapV2Router01 router = IUniswapV2Router01(uniswapRouter);
address weth = router.WETH();
address pair = factory.getPair(tokenAddr, weth);
if (pair == address(0)) {
pair = factory.createPair(tokenAddr, weth);
}
// Ensure we actually have INIT_SUPPLY tokens available for LP
require(
Token(tokenAddr).balanceOf(address(this)) >= INIT_SUPPLY,
"Insufficient LP tokens"
);
Token(tokenAddr).approve(address(router), INIT_SUPPLY);
(, , uint256 liquidity) = router.addLiquidityETH{value: ethAmount}(
tokenAddr,
INIT_SUPPLY,
INIT_SUPPLY, // min tokens
ethAmount, // min ETH
address(this),
block.timestamp
);
require(liquidity > 0, "No liquidity minted");
// Burn LP to lock liquidity
IUniswapV2Pair(pair).transfer(address(0), liquidity);
}
// --- Admin helpers ---
/// @notice Withdraw only accumulated protocol fees (creation, trading, listing).
function withdrawProtocolFees(
address payable to
) external onlyOwner nonReentrant {
require(to != address(0), "zero");
uint256 amount = protocolFeeBalance;
require(amount > 0, "no fees");
protocolFeeBalance = 0;
(bool success, ) = to.call{value: amount}("");
require(success, "ETH transfer failed");
}
/// @notice TESTING ONLY: withdraw ALL ETH from the contract (including LP ETH).
/// @dev DO NOT SHIP THIS IN PRODUCTION.
function withdrawFees(address payable to) external onlyOwner nonReentrant {
require(to != address(0), "zero");
uint256 bal = address(this).balance;
require(bal > 0, "no balance");
(bool success, ) = to.call{value: bal}("");
require(success, "ETH transfer failed");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_uniswapFactory","type":"address"},{"internalType":"address","name":"_uniswapRouter","type":"address"},{"internalType":"uint256","name":"_listingFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newListingFee","type":"uint256"}],"name":"ListingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"MemeTokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethForLP","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"listingFeeTaken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"netRefund","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenSold","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INIT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"K","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEMECOIN_FUNDING_GOAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEMETOKEN_CREATION_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMemeToken","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"tokenImageUrl","type":"string"},{"internalType":"uint256","name":"fundingRaised","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"creatorAddress","type":"address"},{"internalType":"bool","name":"isLaunched","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256","name":"tokenQty","type":"uint256"}],"name":"buyMemeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentRaw","type":"uint256"},{"internalType":"uint256","name":"amountRaw","type":"uint256"}],"name":"calculateCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentRaw","type":"uint256"},{"internalType":"uint256","name":"amountRaw","type":"uint256"}],"name":"calculateRefund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"calculateTokenAmountFromEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"imageUrl","type":"string"},{"internalType":"string","name":"description","type":"string"}],"name":"createMemeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"curveSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMemeTokens","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"tokenImageUrl","type":"string"},{"internalType":"uint256","name":"fundingRaised","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"creatorAddress","type":"address"},{"internalType":"bool","name":"isLaunched","type":"bool"}],"internalType":"struct KewiTokenFactory.MemeToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"memeTokenAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256","name":"tokenQty","type":"uint256"}],"name":"sellMemeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listingFee","type":"uint256"}],"name":"setListingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60e060405234801562000010575f80fd5b5060405162003f7738038062003f77833981016040819052620000339162000105565b6001600160a01b0383166200007e5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f20666163746f727960a01b60448201526064015b60405180910390fd5b6001600160a01b038216620000c45760405162461bcd60e51b815260206004820152600b60248201526a3d32b937903937baba32b960a91b604482015260640162000075565b336080526001600160a01b0392831660a052911660c052600355600160055562000143565b80516001600160a01b038116811462000100575f80fd5b919050565b5f805f6060848603121562000118575f80fd5b6200012384620000e9565b92506200013360208501620000e9565b9150604084015190509250925092565b60805160a05160c051613de6620001915f395f81816103340152611fb501525f81816103820152611f9101525f81816103b70152818161089f0152818161094d0152610ae40152613de65ff3fe608060405260043610620001b7575f3560e01c80638da5cb5b11620000fa578063d65f284e1162000092578063e1a45218116200006a578063e1a452181462000503578063e38abd0f146200051a578063e823bfd5146200053e578063fb08d6c01462000555575f80fd5b8063d65f284e14620004a5578063d9972d5314620004c3578063dd5988cd14620004df575f80fd5b8063a932492f11620000d2578063a932492f146200042a578063bcfeed9a1462000445578063bf333f2c146200046b578063ce3946961462000481575f80fd5b80638da5cb5b14620003a4578063956cc85914620003d9578063977ccd5b14620003f0575f80fd5b80632d80caa5116200016e5780636a1b7ecc11620001465780636a1b7ecc146200030a578063735de9f714620003215780637c5e279514620003565780638bdb2afa146200036f575f80fd5b80632d80caa514620002b25780632e0f262514620002d657806332cb6b0c14620002f3575f80fd5b8063075bb17d14620001bb5780630a22d68c14620001ef578063131dbd09146200021557806313cb5ad6146200023b578063164e68de146200025f5780631eecf7881462000283575b5f80fd5b620001d2620001cc3660046200254a565b62000579565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620001fb575f80fd5b506200020660045481565b604051908152602001620001e6565b34801562000221575f80fd5b506200023962000233366004620025fd565b62000894565b005b34801562000247575f80fd5b50620001d262000259366004620025fd565b6200091a565b3480156200026b575f80fd5b50620002396200027d3660046200262d565b62000942565b3480156200028f575f80fd5b5062000206620002a13660046200262d565b60026020525f908152604090205481565b348015620002be575f80fd5b5062000239620002d03660046200262d565b62000ad9565b348015620002e2575f80fd5b5062000206670de0b6b3a764000081565b348015620002ff575f80fd5b506200020662000be7565b34801562000316575f80fd5b506200020660035481565b3480156200032d575f80fd5b50620001d27f000000000000000000000000000000000000000000000000000000000000000081565b34801562000362575f80fd5b5062000206633b171b5081565b3480156200037b575f80fd5b50620001d27f000000000000000000000000000000000000000000000000000000000000000081565b348015620003b0575f80fd5b50620001d27f000000000000000000000000000000000000000000000000000000000000000081565b348015620003e5575f80fd5b506200020662000c01565b348015620003fc575f80fd5b50620004146200040e3660046200262d565b62000c33565b604051620001e6989796959493929190620026a3565b34801562000436575f80fd5b50620002066504751232a4b781565b34801562000451575f80fd5b506200045c62000ebe565b604051620001e691906200272e565b34801562000477575f80fd5b5062000206606481565b3480156200048d575f80fd5b50620002066200049f3660046200283a565b62001292565b348015620004b1575f80fd5b506200020668056bc75e2d6310000081565b348015620004cf575f80fd5b5062000206662386f26fc1000081565b348015620004eb575f80fd5b5062000206620004fd3660046200285b565b6200134b565b3480156200050f575f80fd5b506200020661271081565b34801562000526575f80fd5b5062000206620005383660046200283a565b62001777565b620002066200054f3660046200285b565b620017ca565b34801562000561575f80fd5b5062000206620005733660046200285b565b62001c0a565b5f600260055403620005a85760405162461bcd60e51b81526004016200059f9062002888565b60405180910390fd5b600260055568056bc75e2d63100000341015620006005760405162461bcd60e51b815260206004820152601560248201527410dc99585d1a5bdb88199959481c995c5d5a5c9959605a1b60448201526064016200059f565b3460045f828254620006139190620028d3565b909155505f9050858562000633670de0b6b3a7640000620f4240620028e9565b60646200064c670de0b6b3a7640000620f4240620028e9565b62000659906014620028e9565b62000665919062002903565b604051620006739062002497565b62000682949392919062002923565b604051809103905ff0801580156200069c573d5f803e3d5ffd5b50604051630b768f0160e31b81523060048201529091506001600160a01b03821690635bb47808906024015f604051808303815f87803b158015620006df575f80fd5b505af1158015620006f2573d5f803e3d5ffd5b50505f8054600180820183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390910180546001600160a01b0319166001600160a01b03871690811790915560408051610100810182528c815260208082018d90528183018b9052606082018c90526080820186905260a082018490523360c083015260e082018690529285529290915290912081518594509192509081906200079d9082620029e9565b5060208201516001820190620007b49082620029e9565b5060408201516002820190620007cb9082620029e9565b5060608201516003820190620007e29082620029e9565b506080820151600482015560a08201516005820180546001600160a01b039283166001600160a01b031990911617905560c08301516006909201805460e0909401511515600160a01b026001600160a81b03199094169282169290921792909217905560405133918316907f096627c8a73b9cd80e060634e86d64ccb00710637ab5b294c82d1ce416a23c8d906200087d9042815260200190565b60405180910390a360016005559695505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614620008df5760405162461bcd60e51b81526004016200059f9062002ab6565b60038190556040518181527f5fb4654f1efe30c6141eaa6855ffcb27e0b361d899b05e21b1a4d0b3e71e14db9060200160405180910390a150565b5f818154811062000929575f80fd5b5f918252602090912001546001600160a01b0316905081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146200098d5760405162461bcd60e51b81526004016200059f9062002ab6565b600260055403620009b25760405162461bcd60e51b81526004016200059f9062002888565b60026005556001600160a01b038116620009f85760405162461bcd60e51b81526004016200059f906020808252600490820152637a65726f60e01b604082015260600190565b478062000a355760405162461bcd60e51b815260206004820152600a6024820152696e6f2062616c616e636560b01b60448201526064016200059f565b5f826001600160a01b0316826040515b5f6040518083038185875af1925050503d805f811462000a81576040519150601f19603f3d011682016040523d82523d5f602084013e62000a86565b606091505b505090508062000acf5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059f565b5050600160055550565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161462000b245760405162461bcd60e51b81526004016200059f9062002ab6565b60026005540362000b495760405162461bcd60e51b81526004016200059f9062002888565b60026005556001600160a01b03811662000b8f5760405162461bcd60e51b81526004016200059f906020808252600490820152637a65726f60e01b604082015260600190565b6004548062000bcb5760405162461bcd60e51b81526020600482015260076024820152666e6f206665657360c81b60448201526064016200059f565b5f6004819055505f826001600160a01b03168260405162000a45565b62000bfe670de0b6b3a7640000620f4240620028e9565b81565b606462000c1a670de0b6b3a7640000620f4240620028e9565b62000c27906014620028e9565b62000bfe919062002903565b60016020525f908152604090208054819062000c4f906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000c7d906200295f565b801562000ccc5780601f1062000ca25761010080835404028352916020019162000ccc565b820191905f5260205f20905b81548152906001019060200180831162000cae57829003601f168201915b50505050509080600101805462000ce3906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000d11906200295f565b801562000d605780601f1062000d365761010080835404028352916020019162000d60565b820191905f5260205f20905b81548152906001019060200180831162000d4257829003601f168201915b50505050509080600201805462000d77906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000da5906200295f565b801562000df45780601f1062000dca5761010080835404028352916020019162000df4565b820191905f5260205f20905b81548152906001019060200180831162000dd657829003601f168201915b50505050509080600301805462000e0b906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000e39906200295f565b801562000e885780601f1062000e5e5761010080835404028352916020019162000e88565b820191905f5260205f20905b81548152906001019060200180831162000e6a57829003601f168201915b5050505060048301546005840154600690940154929390926001600160a01b03918216925090811690600160a01b900460ff1688565b5f80546060918167ffffffffffffffff81111562000ee05762000ee0620024a5565b60405190808252806020026020018201604052801562000f6c57816020015b62000f58604051806101000160405280606081526020016060815260200160608152602001606081526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f151581525090565b81526020019060019003908162000eff5790505b5090505f5b828110156200128b5760015f80838154811062000f925762000f9262002ad9565b5f9182526020808320909101546001600160a01b0316835282019290925260409081019091208151610100810190925280548290829062000fd3906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462001001906200295f565b8015620010505780601f10620010265761010080835404028352916020019162001050565b820191905f5260205f20905b8154815290600101906020018083116200103257829003601f168201915b505050505081526020016001820180546200106b906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462001099906200295f565b8015620010e85780601f10620010be57610100808354040283529160200191620010e8565b820191905f5260205f20905b815481529060010190602001808311620010ca57829003601f168201915b5050505050815260200160028201805462001103906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462001131906200295f565b8015620011805780601f10620011565761010080835404028352916020019162001180565b820191905f5260205f20905b8154815290600101906020018083116200116257829003601f168201915b505050505081526020016003820180546200119b906200295f565b80601f0160208091040260200160405190810160405280929190818152602001828054620011c9906200295f565b8015620012185780601f10620011ee5761010080835404028352916020019162001218565b820191905f5260205f20905b815481529060010190602001808311620011fa57829003601f168201915b50505091835250506004820154602082015260058201546001600160a01b0390811660408301526006909201549182166060820152600160a01b90910460ff161515608090910152825183908390811062001277576200127762002ad9565b602090810291909101015260010162000f71565b5092915050565b5f80670de0b6b3a7640000620012a98486620028d3565b620012bb906504751232a4b7620028e9565b620012c7919062002903565b90505f670de0b6b3a7640000620012e5866504751232a4b7620028e9565b620012f1919062002903565b90505f620012ff8362001ed3565b90505f6200130d8362001ed3565b90506504751232a4b762001322828462002aed565b6200133290633b171b50620028e9565b6200133e919062002903565b9450505050505b92915050565b5f600260055403620013715760405162461bcd60e51b81526004016200059f9062002888565b600260059081556001600160a01b038085165f81815260016020526040902092830154909116148015620013ad57506001600160a01b03841615155b620013cc5760405162461bcd60e51b81526004016200059f9062002b03565b6006810154600160a01b900460ff1615620014225760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059f565b835f62001438670de0b6b3a764000086620028e9565b6001600160a01b038781165f90815260026020526040908190205490516370a0823160e01b81523360048201529293509183918516906370a0823190602401602060405180830381865afa15801562001493573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014b9919062002b2a565b1015620015005760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016200059f565b81811015620015495760405162461bcd60e51b8152602060048201526014602482015273437572766520737570706c7920746f6f206c6f7760601b60448201526064016200059f565b5f62001556828462001777565b90508085600401541015620015a75760405162461bcd60e51b8152602060048201526016602482015275092dce6eaccccd2c6d2cadce840c6eae4ecca408aa8960531b60448201526064016200059f565b5f612710620015b8606484620028e9565b620015c4919062002903565b90505f620015d3828462002aed565b90508160045f828254620015e89190620028d3565b9250508190555082876004015f82825462001604919062002aed565b90915550620016169050858562002aed565b6001600160a01b038b81165f9081526002602052604090819020929092559051633f34d4cf60e21b8152600481018790523360248201529087169063fcd3533c906044015f604051808303815f87803b15801562001672575f80fd5b505af115801562001685573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f8114620016ca576040519150601f19603f3d011682016040523d82523d5f602084013e620016cf565b606091505b5050905080620017185760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059f565b604080518b8152602081018490524281830152905133916001600160a01b038e16917f9387a595ac4be9038bbb9751abad8baa3dcf219dd9e19abb81552bd521fe35469181900360600190a35060016005559998505050505050505050565b5f80670de0b6b3a764000062001794856504751232a4b7620028e9565b620017a0919062002903565b90505f670de0b6b3a7640000620017b8858762002aed565b620012e5906504751232a4b7620028e9565b5f600260055403620017f05760405162461bcd60e51b81526004016200059f9062002888565b600260059081556001600160a01b038085165f818152600160205260409020928301549091161480156200182c57506001600160a01b03841615155b6200184b5760405162461bcd60e51b81526004016200059f9062002b03565b6006810154600160a01b900460ff1615620018a15760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059f565b835f620018b7670de0b6b3a764000086620028e9565b6001600160a01b0387165f90815260026020526040812054919250816064620018ec670de0b6b3a7640000620f4240620028e9565b620018f9906014620028e9565b62001905919062002903565b6200191c670de0b6b3a7640000620f4240620028e9565b62001928919062002aed565b62001934919062002aed565b9050808311156200197e5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7420737570706c7960681b60448201526064016200059f565b5f6200198b838562001292565b90505f6127106200199e606484620028e9565b620019aa919062002903565b90505f620019b98284620028d3565b905080341462001a035760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b60448201526064016200059f565b8160045f82825462001a169190620028d3565b9250508190555082886004015f82825462001a329190620028d3565b9091555062001a4490508686620028d3565b6001600160a01b038c81165f90815260026020526040908190209290925590516394bf804d60e01b815260048101889052336024820152908816906394bf804d906044015f604051808303815f87803b15801562001aa0575f80fd5b505af115801562001ab3573d5f803e3d5ffd5b5050604080518d815260208101859052428183015290513393506001600160a01b038f1692507f8692cf5ba66abd64f88cdc1ffa0ee9d9c21ee2d999322a20445ae32393394e3e9181900360600190a36006880154600160a01b900460ff1615801562001b2b5750662386f26fc10000886004015410155b1562001bf75760048801546003545f901580159062001b4b575060035482115b1562001b825760035462001b60908362002aed565b915060035460045f82825462001b779190620028d3565b909155505060035490505b60068a01805460ff60a01b1916600160a01b1790555f60048b015562001ba98d8362001f4d565b6040805183815260208101839052428183015290516001600160a01b038f16917fc5f40890b27f261001f50fb37aefc207cb219df4346046729dd64b33f6be95cf919081900360600190a250505b60016005559a9950505050505050505050565b6001600160a01b038083165f818152600160205260408120600581015491939092911614801562001c4357506001600160a01b03841615155b62001c625760405162461bcd60e51b81526004016200059f9062002b03565b6006810154600160a01b900460ff161562001cb35760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064016200059f565b6001600160a01b0384165f908152600260205260408120549081606462001ce6670de0b6b3a7640000620f4240620028e9565b62001cf3906014620028e9565b62001cff919062002903565b62001d16670de0b6b3a7640000620f4240620028e9565b62001d22919062002aed565b62001d2e919062002aed565b90505f62001d45670de0b6b3a76400008362002903565b905080158062001d53575085155b1562001d66575f94505050505062001345565b5f61271062001d7760648262002aed565b62001d839089620028e9565b62001d8f919062002903565b90505f825b8082101562001ec6575f600262001dac8385620028d3565b62001db9906001620028d3565b62001dc5919062002903565b90505f62001ddc670de0b6b3a764000083620028e9565b60408051602481018b9052604480820184905282518083039091018152606490910182526020810180516001600160e01b031663671ca34b60e11b17905290519192505f918291309162001e31919062002b42565b5f60405180830381855afa9150503d805f811462001e6b576040519150601f19603f3d011682016040523d82523d5f602084013e62001e70565b606091505b5091509150811562001ead575f8180602001905181019062001e93919062002b2a565b905087811162001eab57849650505050505062001d94565b505b62001eba60018562002aed565b94505050505062001d94565b5098975050505050505050565b5f670de0b6b3a76400008060015b6014811162001f445762001efe670de0b6b3a764000082620028e9565b62001f0a8684620028e9565b62001f16919062002903565b915062001f248284620028d3565b92506001821062001f44578062001f3b8162002b5f565b91505062001ee1565b50909392505050565b5f811162001f8e5760405162461bcd60e51b815260206004820152600d60248201526c04e6f2045544820666f72204c5609c1b60448201526064016200059f565b5f7f000000000000000000000000000000000000000000000000000000000000000090505f7f000000000000000000000000000000000000000000000000000000000000000090505f816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002014573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200203a919062002b7a565b60405163e6a4390560e01b81526001600160a01b03878116600483015280831660248301529192505f9185169063e6a4390590604401602060405180830381865afa1580156200208c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620020b2919062002b7a565b90506001600160a01b0381166200213a576040516364e329cb60e11b81526001600160a01b038781166004830152838116602483015285169063c9c65396906044016020604051808303815f875af115801562002111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002137919062002b7a565b90505b606462002153670de0b6b3a7640000620f4240620028e9565b62002160906014620028e9565b6200216c919062002903565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015620021af573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620021d5919062002b2a565b10156200221e5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74204c5020746f6b656e7360501b60448201526064016200059f565b6001600160a01b03861663095ea7b384606462002247670de0b6b3a7640000620f4240620028e9565b62002254906014620028e9565b62002260919062002903565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015620022a9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620022cf919062002b98565b505f6001600160a01b03841663f305d71987896064620022fb670de0b6b3a7640000620f4240620028e9565b62002308906014620028e9565b62002314919062002903565b60646200232d670de0b6b3a7640000620f4240620028e9565b6200233a906014620028e9565b62002346919062002903565b6040516001600160e01b031960e087901b1681526001600160a01b03909316600484015260248301919091526044820152606481018a90523060848201524260a482015260c40160606040518083038185885af1158015620023aa573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190620023d1919062002bb9565b925050505f81116200241c5760405162461bcd60e51b8152602060048201526013602482015272139bc81b1a5c5d5a591a5d1e481b5a5b9d1959606a1b60448201526064016200059f565b60405163a9059cbb60e01b81525f6004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af115801562002467573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200248d919062002b98565b5050505050505050565b6111cb8062002be683390190565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620024c9575f80fd5b813567ffffffffffffffff80821115620024e757620024e7620024a5565b604051601f8301601f19908116603f01168101908282118183101715620025125762002512620024a5565b816040528381528660208588010111156200252b575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f80608085870312156200255e575f80fd5b843567ffffffffffffffff8082111562002576575f80fd5b6200258488838901620024b9565b955060208701359150808211156200259a575f80fd5b620025a888838901620024b9565b94506040870135915080821115620025be575f80fd5b620025cc88838901620024b9565b93506060870135915080821115620025e2575f80fd5b50620025f187828801620024b9565b91505092959194509250565b5f602082840312156200260e575f80fd5b5035919050565b6001600160a01b03811681146200262a575f80fd5b50565b5f602082840312156200263e575f80fd5b81356200264b8162002615565b9392505050565b5f5b838110156200266e57818101518382015260200162002654565b50505f910152565b5f81518084526200268f81602086016020860162002652565b601f01601f19169290920160200192915050565b5f610100808352620026b88184018c62002676565b90508281036020840152620026ce818b62002676565b90508281036040840152620026e4818a62002676565b90508281036060840152620026fa818962002676565b608084019790975250506001600160a01b0393841660a08201529190921660c082015290151560e090910152949350505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200282c57603f19898403018552815161010081518186526200277f8287018262002676565b915050888201518582038a87015262002799828262002676565b9150508782015185820389870152620027b3828262002676565b91505060608083015186830382880152620027cf838262002676565b92505050608080830151818701525060a080830151620027f9828801826001600160a01b03169052565b505060c0828101516001600160a01b03169086015260e09182015115159190940152938601939086019060010162002755565b509098975050505050505050565b5f80604083850312156200284c575f80fd5b50508035926020909101359150565b5f80604083850312156200286d575f80fd5b82356200287a8162002615565b946020939093013593505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620013455762001345620028bf565b8082028115828204841417620013455762001345620028bf565b5f826200291e57634e487b7160e01b5f52601260045260245ffd5b500490565b608081525f62002937608083018762002676565b82810360208401526200294b818762002676565b604084019590955250506060015292915050565b600181811c908216806200297457607f821691505b6020821081036200299357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620029e457805f5260205f20601f840160051c81016020851015620029c05750805b601f840160051c820191505b81811015620029e1575f8155600101620029cc565b50505b505050565b815167ffffffffffffffff81111562002a065762002a06620024a5565b62002a1e8162002a1784546200295f565b8462002999565b602080601f83116001811462002a54575f841562002a3c5750858301515b5f19600386901b1c1916600185901b17855562002aae565b5f85815260208120601f198616915b8281101562002a845788860151825594840194600190910190840162002a63565b508582101562002aa257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b81810381811115620013455762001345620028bf565b6020808252600d908201526c2ab735b737bbb7103a37b5b2b760991b604082015260600190565b5f6020828403121562002b3b575f80fd5b5051919050565b5f825162002b5581846020870162002652565b9190910192915050565b5f6001820162002b735762002b73620028bf565b5060010190565b5f6020828403121562002b8b575f80fd5b81516200264b8162002615565b5f6020828403121562002ba9575f80fd5b815180151581146200264b575f80fd5b5f805f6060848603121562002bcc575f80fd5b835192506020840151915060408401519050925092509256fe60a060405234801562000010575f80fd5b50604051620011cb380380620011cb8339810160408190526200003391620002f6565b5f8211620000795760405162461bcd60e51b815260206004820152600e60248201526d6d6178537570706c79207a65726f60901b60448201526064015b60405180910390fd5b81811115620000b85760405162461bcd60e51b815260206004820152600a6024820152690d2dcd2e8407c40dac2f60b31b604482015260640162000070565b5f620000c58582620003f5565b506001620000d48482620003f5565b506080829052620000e63382620000f0565b50505050620004e7565b6001600160a01b038216620001485760405162461bcd60e51b815260206004820152601360248201527f45524332303a206d696e7420746f207a65726f00000000000000000000000000604482015260640162000070565b608051816002546200015b9190620004c1565b1115620001ab5760405162461bcd60e51b815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015260640162000070565b8060025f828254620001be9190620004c1565b90915550506001600160a01b0382165f9081526003602052604081208054839290620001ec908490620004c1565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000259575f80fd5b81516001600160401b038082111562000276576200027662000235565b604051601f8301601f19908116603f01168101908282118183101715620002a157620002a162000235565b8160405283815260209250866020858801011115620002be575f80fd5b5f91505b83821015620002e15785820183015181830184015290820190620002c2565b5f602085830101528094505050505092915050565b5f805f80608085870312156200030a575f80fd5b84516001600160401b038082111562000321575f80fd5b6200032f8883890162000249565b9550602087015191508082111562000345575f80fd5b50620003548782880162000249565b604087015160609097015195989097509350505050565b600181811c908216806200038057607f821691505b6020821081036200039f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003f057805f5260205f20601f840160051c81016020851015620003cc5750805b601f840160051c820191505b81811015620003ed575f8155600101620003d8565b50505b505050565b81516001600160401b0381111562000411576200041162000235565b62000429816200042284546200036b565b84620003a5565b602080601f8311600181146200045f575f8415620004475750858301515b5f19600386901b1c1916600185901b178555620004b9565b5f85815260208120601f198616915b828110156200048f578886015182559484019460019091019084016200046e565b5085821015620004ad57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820180821115620004e157634e487b7160e01b5f52601160045260245ffd5b92915050565b608051610cc4620005075f395f818161020901526108cd0152610cc45ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806394bf804d11610088578063c45a015511610063578063c45a0155146101d9578063d5abeb0114610204578063dd62ed3e1461022b578063fcd3533c14610263575f80fd5b806394bf804d146101ab57806395d89b41146101be578063a9059cbb146101c6575f80fd5b806323b872dd116100c357806323b872dd14610141578063313ce567146101545780635bb478081461016e57806370a0823114610183575f80fd5b806306fdde03146100e9578063095ea7b31461010757806318160ddd1461012a575b5f80fd5b6100f1610276565b6040516100fe9190610ae2565b60405180910390f35b61011a610115366004610b49565b610301565b60405190151581526020016100fe565b61013360025481565b6040519081526020016100fe565b61011a61014f366004610b71565b610317565b61015c601281565b60405160ff90911681526020016100fe565b61018161017c366004610baa565b6103b2565b005b610133610191366004610baa565b6001600160a01b03165f9081526003602052604090205490565b6101816101b9366004610bca565b610496565b6100f161052f565b61011a6101d4366004610b49565b61053c565b6005546101ec906001600160a01b031681565b6040516001600160a01b0390911681526020016100fe565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b610133610239366004610bf4565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b610181610271366004610bca565b610548565b5f805461028290610c1c565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610c1c565b80156102f95780601f106102d0576101008083540402835291602001916102f9565b820191905f5260205f20905b8154815290600101906020018083116102dc57829003601f168201915b505050505081565b5f61030d3384846105d5565b5060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120548281101561038f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b61039c85338584036105d5565b6103a78585856106db565b506001949350505050565b600554600160a01b900460ff16156104025760405162461bcd60e51b8152602060048201526013602482015272119858dd1bdc9e48185b1c9958591e481cd95d606a1b6044820152606401610386565b6001600160a01b0381166104475760405162461bcd60e51b815260206004820152600c60248201526b5a65726f20666163746f727960a01b6044820152606401610386565b600580546001600160a81b0319166001600160a01b038316908117600160a01b179091556040517f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b1905f90a250565b6005546001600160a01b031633146104de5760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b6104e8818361087f565b806001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8360405161052391815260200190565b60405180910390a25050565b6001805461028290610c1c565b5f61030d3384846106db565b6005546001600160a01b031633146105905760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b61059a81836109c4565b806001600160a01b03167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df78360405161052391815260200190565b6001600160a01b03831661062b5760405162461bcd60e51b815260206004820152601860248201527f45524332303a20617070726f76652066726f6d207a65726f00000000000000006044820152606401610386565b6001600160a01b03821661067a5760405162461bcd60e51b815260206004820152601660248201527545524332303a20617070726f766520746f207a65726f60501b6044820152606401610386565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166107315760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e736665722066726f6d207a65726f000000000000006044820152606401610386565b6001600160a01b0382166107875760405162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e7366657220746f207a65726f0000000000000000006044820152606401610386565b6001600160a01b0383165f90815260036020526040902054818110156107ef5760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e73666572203e2062616c616e6365000000000000006044820152606401610386565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290610825908490610c68565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161087191815260200190565b60405180910390a350505050565b6001600160a01b0382166108cb5760405162461bcd60e51b815260206004820152601360248201527245524332303a206d696e7420746f207a65726f60681b6044820152606401610386565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108fa9190610c68565b111561093e5760405162461bcd60e51b81526020600482015260136024820152721b585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610386565b8060025f82825461094f9190610c68565b90915550506001600160a01b0382165f908152600360205260408120805483929061097b908490610c68565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610a125760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e2066726f6d207a65726f60581b6044820152606401610386565b6001600160a01b0382165f9081526003602052604090205481811015610a725760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e203e2062616c616e636560581b6044820152606401610386565b6001600160a01b0383165f908152600360205260408120838303905560028054849290610aa0908490610c7b565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106ce565b5f602080835283518060208501525f5b81811015610b0e57858101830151858201604001528201610af2565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b44575f80fd5b919050565b5f8060408385031215610b5a575f80fd5b610b6383610b2e565b946020939093013593505050565b5f805f60608486031215610b83575f80fd5b610b8c84610b2e565b9250610b9a60208501610b2e565b9150604084013590509250925092565b5f60208284031215610bba575f80fd5b610bc382610b2e565b9392505050565b5f8060408385031215610bdb575f80fd5b82359150610beb60208401610b2e565b90509250929050565b5f8060408385031215610c05575f80fd5b610c0e83610b2e565b9150610beb60208401610b2e565b600181811c90821680610c3057607f821691505b602082108103610c4e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561031157610311610c54565b8181038181111561031157610311610c5456fea2646970667358221220feff3907868f71dddc68930ac67fe608751269ab2fbf9f6c08da0c41ae1f88db64736f6c63430008180033a264697066735822122029156ae512a301067255d9bf673ac5dca48f136043023e4fc5eaaed557762f8a64736f6c63430008180033000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c69000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405260043610620001b7575f3560e01c80638da5cb5b11620000fa578063d65f284e1162000092578063e1a45218116200006a578063e1a452181462000503578063e38abd0f146200051a578063e823bfd5146200053e578063fb08d6c01462000555575f80fd5b8063d65f284e14620004a5578063d9972d5314620004c3578063dd5988cd14620004df575f80fd5b8063a932492f11620000d2578063a932492f146200042a578063bcfeed9a1462000445578063bf333f2c146200046b578063ce3946961462000481575f80fd5b80638da5cb5b14620003a4578063956cc85914620003d9578063977ccd5b14620003f0575f80fd5b80632d80caa5116200016e5780636a1b7ecc11620001465780636a1b7ecc146200030a578063735de9f714620003215780637c5e279514620003565780638bdb2afa146200036f575f80fd5b80632d80caa514620002b25780632e0f262514620002d657806332cb6b0c14620002f3575f80fd5b8063075bb17d14620001bb5780630a22d68c14620001ef578063131dbd09146200021557806313cb5ad6146200023b578063164e68de146200025f5780631eecf7881462000283575b5f80fd5b620001d2620001cc3660046200254a565b62000579565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620001fb575f80fd5b506200020660045481565b604051908152602001620001e6565b34801562000221575f80fd5b506200023962000233366004620025fd565b62000894565b005b34801562000247575f80fd5b50620001d262000259366004620025fd565b6200091a565b3480156200026b575f80fd5b50620002396200027d3660046200262d565b62000942565b3480156200028f575f80fd5b5062000206620002a13660046200262d565b60026020525f908152604090205481565b348015620002be575f80fd5b5062000239620002d03660046200262d565b62000ad9565b348015620002e2575f80fd5b5062000206670de0b6b3a764000081565b348015620002ff575f80fd5b506200020662000be7565b34801562000316575f80fd5b506200020660035481565b3480156200032d575f80fd5b50620001d27f000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c81565b34801562000362575f80fd5b5062000206633b171b5081565b3480156200037b575f80fd5b50620001d27f000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c6981565b348015620003b0575f80fd5b50620001d27f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b81565b348015620003e5575f80fd5b506200020662000c01565b348015620003fc575f80fd5b50620004146200040e3660046200262d565b62000c33565b604051620001e6989796959493929190620026a3565b34801562000436575f80fd5b50620002066504751232a4b781565b34801562000451575f80fd5b506200045c62000ebe565b604051620001e691906200272e565b34801562000477575f80fd5b5062000206606481565b3480156200048d575f80fd5b50620002066200049f3660046200283a565b62001292565b348015620004b1575f80fd5b506200020668056bc75e2d6310000081565b348015620004cf575f80fd5b5062000206662386f26fc1000081565b348015620004eb575f80fd5b5062000206620004fd3660046200285b565b6200134b565b3480156200050f575f80fd5b506200020661271081565b34801562000526575f80fd5b5062000206620005383660046200283a565b62001777565b620002066200054f3660046200285b565b620017ca565b34801562000561575f80fd5b5062000206620005733660046200285b565b62001c0a565b5f600260055403620005a85760405162461bcd60e51b81526004016200059f9062002888565b60405180910390fd5b600260055568056bc75e2d63100000341015620006005760405162461bcd60e51b815260206004820152601560248201527410dc99585d1a5bdb88199959481c995c5d5a5c9959605a1b60448201526064016200059f565b3460045f828254620006139190620028d3565b909155505f9050858562000633670de0b6b3a7640000620f4240620028e9565b60646200064c670de0b6b3a7640000620f4240620028e9565b62000659906014620028e9565b62000665919062002903565b604051620006739062002497565b62000682949392919062002923565b604051809103905ff0801580156200069c573d5f803e3d5ffd5b50604051630b768f0160e31b81523060048201529091506001600160a01b03821690635bb47808906024015f604051808303815f87803b158015620006df575f80fd5b505af1158015620006f2573d5f803e3d5ffd5b50505f8054600180820183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390910180546001600160a01b0319166001600160a01b03871690811790915560408051610100810182528c815260208082018d90528183018b9052606082018c90526080820186905260a082018490523360c083015260e082018690529285529290915290912081518594509192509081906200079d9082620029e9565b5060208201516001820190620007b49082620029e9565b5060408201516002820190620007cb9082620029e9565b5060608201516003820190620007e29082620029e9565b506080820151600482015560a08201516005820180546001600160a01b039283166001600160a01b031990911617905560c08301516006909201805460e0909401511515600160a01b026001600160a81b03199094169282169290921792909217905560405133918316907f096627c8a73b9cd80e060634e86d64ccb00710637ab5b294c82d1ce416a23c8d906200087d9042815260200190565b60405180910390a360016005559695505050505050565b336001600160a01b037f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b1614620008df5760405162461bcd60e51b81526004016200059f9062002ab6565b60038190556040518181527f5fb4654f1efe30c6141eaa6855ffcb27e0b361d899b05e21b1a4d0b3e71e14db9060200160405180910390a150565b5f818154811062000929575f80fd5b5f918252602090912001546001600160a01b0316905081565b336001600160a01b037f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b16146200098d5760405162461bcd60e51b81526004016200059f9062002ab6565b600260055403620009b25760405162461bcd60e51b81526004016200059f9062002888565b60026005556001600160a01b038116620009f85760405162461bcd60e51b81526004016200059f906020808252600490820152637a65726f60e01b604082015260600190565b478062000a355760405162461bcd60e51b815260206004820152600a6024820152696e6f2062616c616e636560b01b60448201526064016200059f565b5f826001600160a01b0316826040515b5f6040518083038185875af1925050503d805f811462000a81576040519150601f19603f3d011682016040523d82523d5f602084013e62000a86565b606091505b505090508062000acf5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059f565b5050600160055550565b336001600160a01b037f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b161462000b245760405162461bcd60e51b81526004016200059f9062002ab6565b60026005540362000b495760405162461bcd60e51b81526004016200059f9062002888565b60026005556001600160a01b03811662000b8f5760405162461bcd60e51b81526004016200059f906020808252600490820152637a65726f60e01b604082015260600190565b6004548062000bcb5760405162461bcd60e51b81526020600482015260076024820152666e6f206665657360c81b60448201526064016200059f565b5f6004819055505f826001600160a01b03168260405162000a45565b62000bfe670de0b6b3a7640000620f4240620028e9565b81565b606462000c1a670de0b6b3a7640000620f4240620028e9565b62000c27906014620028e9565b62000bfe919062002903565b60016020525f908152604090208054819062000c4f906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000c7d906200295f565b801562000ccc5780601f1062000ca25761010080835404028352916020019162000ccc565b820191905f5260205f20905b81548152906001019060200180831162000cae57829003601f168201915b50505050509080600101805462000ce3906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000d11906200295f565b801562000d605780601f1062000d365761010080835404028352916020019162000d60565b820191905f5260205f20905b81548152906001019060200180831162000d4257829003601f168201915b50505050509080600201805462000d77906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000da5906200295f565b801562000df45780601f1062000dca5761010080835404028352916020019162000df4565b820191905f5260205f20905b81548152906001019060200180831162000dd657829003601f168201915b50505050509080600301805462000e0b906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462000e39906200295f565b801562000e885780601f1062000e5e5761010080835404028352916020019162000e88565b820191905f5260205f20905b81548152906001019060200180831162000e6a57829003601f168201915b5050505060048301546005840154600690940154929390926001600160a01b03918216925090811690600160a01b900460ff1688565b5f80546060918167ffffffffffffffff81111562000ee05762000ee0620024a5565b60405190808252806020026020018201604052801562000f6c57816020015b62000f58604051806101000160405280606081526020016060815260200160608152602001606081526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f151581525090565b81526020019060019003908162000eff5790505b5090505f5b828110156200128b5760015f80838154811062000f925762000f9262002ad9565b5f9182526020808320909101546001600160a01b0316835282019290925260409081019091208151610100810190925280548290829062000fd3906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462001001906200295f565b8015620010505780601f10620010265761010080835404028352916020019162001050565b820191905f5260205f20905b8154815290600101906020018083116200103257829003601f168201915b505050505081526020016001820180546200106b906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462001099906200295f565b8015620010e85780601f10620010be57610100808354040283529160200191620010e8565b820191905f5260205f20905b815481529060010190602001808311620010ca57829003601f168201915b5050505050815260200160028201805462001103906200295f565b80601f016020809104026020016040519081016040528092919081815260200182805462001131906200295f565b8015620011805780601f10620011565761010080835404028352916020019162001180565b820191905f5260205f20905b8154815290600101906020018083116200116257829003601f168201915b505050505081526020016003820180546200119b906200295f565b80601f0160208091040260200160405190810160405280929190818152602001828054620011c9906200295f565b8015620012185780601f10620011ee5761010080835404028352916020019162001218565b820191905f5260205f20905b815481529060010190602001808311620011fa57829003601f168201915b50505091835250506004820154602082015260058201546001600160a01b0390811660408301526006909201549182166060820152600160a01b90910460ff161515608090910152825183908390811062001277576200127762002ad9565b602090810291909101015260010162000f71565b5092915050565b5f80670de0b6b3a7640000620012a98486620028d3565b620012bb906504751232a4b7620028e9565b620012c7919062002903565b90505f670de0b6b3a7640000620012e5866504751232a4b7620028e9565b620012f1919062002903565b90505f620012ff8362001ed3565b90505f6200130d8362001ed3565b90506504751232a4b762001322828462002aed565b6200133290633b171b50620028e9565b6200133e919062002903565b9450505050505b92915050565b5f600260055403620013715760405162461bcd60e51b81526004016200059f9062002888565b600260059081556001600160a01b038085165f81815260016020526040902092830154909116148015620013ad57506001600160a01b03841615155b620013cc5760405162461bcd60e51b81526004016200059f9062002b03565b6006810154600160a01b900460ff1615620014225760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059f565b835f62001438670de0b6b3a764000086620028e9565b6001600160a01b038781165f90815260026020526040908190205490516370a0823160e01b81523360048201529293509183918516906370a0823190602401602060405180830381865afa15801562001493573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014b9919062002b2a565b1015620015005760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016200059f565b81811015620015495760405162461bcd60e51b8152602060048201526014602482015273437572766520737570706c7920746f6f206c6f7760601b60448201526064016200059f565b5f62001556828462001777565b90508085600401541015620015a75760405162461bcd60e51b8152602060048201526016602482015275092dce6eaccccd2c6d2cadce840c6eae4ecca408aa8960531b60448201526064016200059f565b5f612710620015b8606484620028e9565b620015c4919062002903565b90505f620015d3828462002aed565b90508160045f828254620015e89190620028d3565b9250508190555082876004015f82825462001604919062002aed565b90915550620016169050858562002aed565b6001600160a01b038b81165f9081526002602052604090819020929092559051633f34d4cf60e21b8152600481018790523360248201529087169063fcd3533c906044015f604051808303815f87803b15801562001672575f80fd5b505af115801562001685573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f8114620016ca576040519150601f19603f3d011682016040523d82523d5f602084013e620016cf565b606091505b5050905080620017185760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059f565b604080518b8152602081018490524281830152905133916001600160a01b038e16917f9387a595ac4be9038bbb9751abad8baa3dcf219dd9e19abb81552bd521fe35469181900360600190a35060016005559998505050505050505050565b5f80670de0b6b3a764000062001794856504751232a4b7620028e9565b620017a0919062002903565b90505f670de0b6b3a7640000620017b8858762002aed565b620012e5906504751232a4b7620028e9565b5f600260055403620017f05760405162461bcd60e51b81526004016200059f9062002888565b600260059081556001600160a01b038085165f818152600160205260409020928301549091161480156200182c57506001600160a01b03841615155b6200184b5760405162461bcd60e51b81526004016200059f9062002b03565b6006810154600160a01b900460ff1615620018a15760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059f565b835f620018b7670de0b6b3a764000086620028e9565b6001600160a01b0387165f90815260026020526040812054919250816064620018ec670de0b6b3a7640000620f4240620028e9565b620018f9906014620028e9565b62001905919062002903565b6200191c670de0b6b3a7640000620f4240620028e9565b62001928919062002aed565b62001934919062002aed565b9050808311156200197e5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7420737570706c7960681b60448201526064016200059f565b5f6200198b838562001292565b90505f6127106200199e606484620028e9565b620019aa919062002903565b90505f620019b98284620028d3565b905080341462001a035760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b60448201526064016200059f565b8160045f82825462001a169190620028d3565b9250508190555082886004015f82825462001a329190620028d3565b9091555062001a4490508686620028d3565b6001600160a01b038c81165f90815260026020526040908190209290925590516394bf804d60e01b815260048101889052336024820152908816906394bf804d906044015f604051808303815f87803b15801562001aa0575f80fd5b505af115801562001ab3573d5f803e3d5ffd5b5050604080518d815260208101859052428183015290513393506001600160a01b038f1692507f8692cf5ba66abd64f88cdc1ffa0ee9d9c21ee2d999322a20445ae32393394e3e9181900360600190a36006880154600160a01b900460ff1615801562001b2b5750662386f26fc10000886004015410155b1562001bf75760048801546003545f901580159062001b4b575060035482115b1562001b825760035462001b60908362002aed565b915060035460045f82825462001b779190620028d3565b909155505060035490505b60068a01805460ff60a01b1916600160a01b1790555f60048b015562001ba98d8362001f4d565b6040805183815260208101839052428183015290516001600160a01b038f16917fc5f40890b27f261001f50fb37aefc207cb219df4346046729dd64b33f6be95cf919081900360600190a250505b60016005559a9950505050505050505050565b6001600160a01b038083165f818152600160205260408120600581015491939092911614801562001c4357506001600160a01b03841615155b62001c625760405162461bcd60e51b81526004016200059f9062002b03565b6006810154600160a01b900460ff161562001cb35760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064016200059f565b6001600160a01b0384165f908152600260205260408120549081606462001ce6670de0b6b3a7640000620f4240620028e9565b62001cf3906014620028e9565b62001cff919062002903565b62001d16670de0b6b3a7640000620f4240620028e9565b62001d22919062002aed565b62001d2e919062002aed565b90505f62001d45670de0b6b3a76400008362002903565b905080158062001d53575085155b1562001d66575f94505050505062001345565b5f61271062001d7760648262002aed565b62001d839089620028e9565b62001d8f919062002903565b90505f825b8082101562001ec6575f600262001dac8385620028d3565b62001db9906001620028d3565b62001dc5919062002903565b90505f62001ddc670de0b6b3a764000083620028e9565b60408051602481018b9052604480820184905282518083039091018152606490910182526020810180516001600160e01b031663671ca34b60e11b17905290519192505f918291309162001e31919062002b42565b5f60405180830381855afa9150503d805f811462001e6b576040519150601f19603f3d011682016040523d82523d5f602084013e62001e70565b606091505b5091509150811562001ead575f8180602001905181019062001e93919062002b2a565b905087811162001eab57849650505050505062001d94565b505b62001eba60018562002aed565b94505050505062001d94565b5098975050505050505050565b5f670de0b6b3a76400008060015b6014811162001f445762001efe670de0b6b3a764000082620028e9565b62001f0a8684620028e9565b62001f16919062002903565b915062001f248284620028d3565b92506001821062001f44578062001f3b8162002b5f565b91505062001ee1565b50909392505050565b5f811162001f8e5760405162461bcd60e51b815260206004820152600d60248201526c04e6f2045544820666f72204c5609c1b60448201526064016200059f565b5f7f000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c6990505f7f000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c90505f816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002014573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200203a919062002b7a565b60405163e6a4390560e01b81526001600160a01b03878116600483015280831660248301529192505f9185169063e6a4390590604401602060405180830381865afa1580156200208c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620020b2919062002b7a565b90506001600160a01b0381166200213a576040516364e329cb60e11b81526001600160a01b038781166004830152838116602483015285169063c9c65396906044016020604051808303815f875af115801562002111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002137919062002b7a565b90505b606462002153670de0b6b3a7640000620f4240620028e9565b62002160906014620028e9565b6200216c919062002903565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015620021af573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620021d5919062002b2a565b10156200221e5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74204c5020746f6b656e7360501b60448201526064016200059f565b6001600160a01b03861663095ea7b384606462002247670de0b6b3a7640000620f4240620028e9565b62002254906014620028e9565b62002260919062002903565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015620022a9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620022cf919062002b98565b505f6001600160a01b03841663f305d71987896064620022fb670de0b6b3a7640000620f4240620028e9565b62002308906014620028e9565b62002314919062002903565b60646200232d670de0b6b3a7640000620f4240620028e9565b6200233a906014620028e9565b62002346919062002903565b6040516001600160e01b031960e087901b1681526001600160a01b03909316600484015260248301919091526044820152606481018a90523060848201524260a482015260c40160606040518083038185885af1158015620023aa573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190620023d1919062002bb9565b925050505f81116200241c5760405162461bcd60e51b8152602060048201526013602482015272139bc81b1a5c5d5a591a5d1e481b5a5b9d1959606a1b60448201526064016200059f565b60405163a9059cbb60e01b81525f6004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af115801562002467573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200248d919062002b98565b5050505050505050565b6111cb8062002be683390190565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620024c9575f80fd5b813567ffffffffffffffff80821115620024e757620024e7620024a5565b604051601f8301601f19908116603f01168101908282118183101715620025125762002512620024a5565b816040528381528660208588010111156200252b575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f80608085870312156200255e575f80fd5b843567ffffffffffffffff8082111562002576575f80fd5b6200258488838901620024b9565b955060208701359150808211156200259a575f80fd5b620025a888838901620024b9565b94506040870135915080821115620025be575f80fd5b620025cc88838901620024b9565b93506060870135915080821115620025e2575f80fd5b50620025f187828801620024b9565b91505092959194509250565b5f602082840312156200260e575f80fd5b5035919050565b6001600160a01b03811681146200262a575f80fd5b50565b5f602082840312156200263e575f80fd5b81356200264b8162002615565b9392505050565b5f5b838110156200266e57818101518382015260200162002654565b50505f910152565b5f81518084526200268f81602086016020860162002652565b601f01601f19169290920160200192915050565b5f610100808352620026b88184018c62002676565b90508281036020840152620026ce818b62002676565b90508281036040840152620026e4818a62002676565b90508281036060840152620026fa818962002676565b608084019790975250506001600160a01b0393841660a08201529190921660c082015290151560e090910152949350505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200282c57603f19898403018552815161010081518186526200277f8287018262002676565b915050888201518582038a87015262002799828262002676565b9150508782015185820389870152620027b3828262002676565b91505060608083015186830382880152620027cf838262002676565b92505050608080830151818701525060a080830151620027f9828801826001600160a01b03169052565b505060c0828101516001600160a01b03169086015260e09182015115159190940152938601939086019060010162002755565b509098975050505050505050565b5f80604083850312156200284c575f80fd5b50508035926020909101359150565b5f80604083850312156200286d575f80fd5b82356200287a8162002615565b946020939093013593505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620013455762001345620028bf565b8082028115828204841417620013455762001345620028bf565b5f826200291e57634e487b7160e01b5f52601260045260245ffd5b500490565b608081525f62002937608083018762002676565b82810360208401526200294b818762002676565b604084019590955250506060015292915050565b600181811c908216806200297457607f821691505b6020821081036200299357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620029e457805f5260205f20601f840160051c81016020851015620029c05750805b601f840160051c820191505b81811015620029e1575f8155600101620029cc565b50505b505050565b815167ffffffffffffffff81111562002a065762002a06620024a5565b62002a1e8162002a1784546200295f565b8462002999565b602080601f83116001811462002a54575f841562002a3c5750858301515b5f19600386901b1c1916600185901b17855562002aae565b5f85815260208120601f198616915b8281101562002a845788860151825594840194600190910190840162002a63565b508582101562002aa257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b81810381811115620013455762001345620028bf565b6020808252600d908201526c2ab735b737bbb7103a37b5b2b760991b604082015260600190565b5f6020828403121562002b3b575f80fd5b5051919050565b5f825162002b5581846020870162002652565b9190910192915050565b5f6001820162002b735762002b73620028bf565b5060010190565b5f6020828403121562002b8b575f80fd5b81516200264b8162002615565b5f6020828403121562002ba9575f80fd5b815180151581146200264b575f80fd5b5f805f6060848603121562002bcc575f80fd5b835192506020840151915060408401519050925092509256fe60a060405234801562000010575f80fd5b50604051620011cb380380620011cb8339810160408190526200003391620002f6565b5f8211620000795760405162461bcd60e51b815260206004820152600e60248201526d6d6178537570706c79207a65726f60901b60448201526064015b60405180910390fd5b81811115620000b85760405162461bcd60e51b815260206004820152600a6024820152690d2dcd2e8407c40dac2f60b31b604482015260640162000070565b5f620000c58582620003f5565b506001620000d48482620003f5565b506080829052620000e63382620000f0565b50505050620004e7565b6001600160a01b038216620001485760405162461bcd60e51b815260206004820152601360248201527f45524332303a206d696e7420746f207a65726f00000000000000000000000000604482015260640162000070565b608051816002546200015b9190620004c1565b1115620001ab5760405162461bcd60e51b815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015260640162000070565b8060025f828254620001be9190620004c1565b90915550506001600160a01b0382165f9081526003602052604081208054839290620001ec908490620004c1565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000259575f80fd5b81516001600160401b038082111562000276576200027662000235565b604051601f8301601f19908116603f01168101908282118183101715620002a157620002a162000235565b8160405283815260209250866020858801011115620002be575f80fd5b5f91505b83821015620002e15785820183015181830184015290820190620002c2565b5f602085830101528094505050505092915050565b5f805f80608085870312156200030a575f80fd5b84516001600160401b038082111562000321575f80fd5b6200032f8883890162000249565b9550602087015191508082111562000345575f80fd5b50620003548782880162000249565b604087015160609097015195989097509350505050565b600181811c908216806200038057607f821691505b6020821081036200039f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003f057805f5260205f20601f840160051c81016020851015620003cc5750805b601f840160051c820191505b81811015620003ed575f8155600101620003d8565b50505b505050565b81516001600160401b0381111562000411576200041162000235565b62000429816200042284546200036b565b84620003a5565b602080601f8311600181146200045f575f8415620004475750858301515b5f19600386901b1c1916600185901b178555620004b9565b5f85815260208120601f198616915b828110156200048f578886015182559484019460019091019084016200046e565b5085821015620004ad57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820180821115620004e157634e487b7160e01b5f52601160045260245ffd5b92915050565b608051610cc4620005075f395f818161020901526108cd0152610cc45ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806394bf804d11610088578063c45a015511610063578063c45a0155146101d9578063d5abeb0114610204578063dd62ed3e1461022b578063fcd3533c14610263575f80fd5b806394bf804d146101ab57806395d89b41146101be578063a9059cbb146101c6575f80fd5b806323b872dd116100c357806323b872dd14610141578063313ce567146101545780635bb478081461016e57806370a0823114610183575f80fd5b806306fdde03146100e9578063095ea7b31461010757806318160ddd1461012a575b5f80fd5b6100f1610276565b6040516100fe9190610ae2565b60405180910390f35b61011a610115366004610b49565b610301565b60405190151581526020016100fe565b61013360025481565b6040519081526020016100fe565b61011a61014f366004610b71565b610317565b61015c601281565b60405160ff90911681526020016100fe565b61018161017c366004610baa565b6103b2565b005b610133610191366004610baa565b6001600160a01b03165f9081526003602052604090205490565b6101816101b9366004610bca565b610496565b6100f161052f565b61011a6101d4366004610b49565b61053c565b6005546101ec906001600160a01b031681565b6040516001600160a01b0390911681526020016100fe565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b610133610239366004610bf4565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b610181610271366004610bca565b610548565b5f805461028290610c1c565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610c1c565b80156102f95780601f106102d0576101008083540402835291602001916102f9565b820191905f5260205f20905b8154815290600101906020018083116102dc57829003601f168201915b505050505081565b5f61030d3384846105d5565b5060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120548281101561038f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b61039c85338584036105d5565b6103a78585856106db565b506001949350505050565b600554600160a01b900460ff16156104025760405162461bcd60e51b8152602060048201526013602482015272119858dd1bdc9e48185b1c9958591e481cd95d606a1b6044820152606401610386565b6001600160a01b0381166104475760405162461bcd60e51b815260206004820152600c60248201526b5a65726f20666163746f727960a01b6044820152606401610386565b600580546001600160a81b0319166001600160a01b038316908117600160a01b179091556040517f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b1905f90a250565b6005546001600160a01b031633146104de5760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b6104e8818361087f565b806001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8360405161052391815260200190565b60405180910390a25050565b6001805461028290610c1c565b5f61030d3384846106db565b6005546001600160a01b031633146105905760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b61059a81836109c4565b806001600160a01b03167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df78360405161052391815260200190565b6001600160a01b03831661062b5760405162461bcd60e51b815260206004820152601860248201527f45524332303a20617070726f76652066726f6d207a65726f00000000000000006044820152606401610386565b6001600160a01b03821661067a5760405162461bcd60e51b815260206004820152601660248201527545524332303a20617070726f766520746f207a65726f60501b6044820152606401610386565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166107315760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e736665722066726f6d207a65726f000000000000006044820152606401610386565b6001600160a01b0382166107875760405162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e7366657220746f207a65726f0000000000000000006044820152606401610386565b6001600160a01b0383165f90815260036020526040902054818110156107ef5760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e73666572203e2062616c616e6365000000000000006044820152606401610386565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290610825908490610c68565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161087191815260200190565b60405180910390a350505050565b6001600160a01b0382166108cb5760405162461bcd60e51b815260206004820152601360248201527245524332303a206d696e7420746f207a65726f60681b6044820152606401610386565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108fa9190610c68565b111561093e5760405162461bcd60e51b81526020600482015260136024820152721b585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610386565b8060025f82825461094f9190610c68565b90915550506001600160a01b0382165f908152600360205260408120805483929061097b908490610c68565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610a125760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e2066726f6d207a65726f60581b6044820152606401610386565b6001600160a01b0382165f9081526003602052604090205481811015610a725760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e203e2062616c616e636560581b6044820152606401610386565b6001600160a01b0383165f908152600360205260408120838303905560028054849290610aa0908490610c7b565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106ce565b5f602080835283518060208501525f5b81811015610b0e57858101830151858201604001528201610af2565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b44575f80fd5b919050565b5f8060408385031215610b5a575f80fd5b610b6383610b2e565b946020939093013593505050565b5f805f60608486031215610b83575f80fd5b610b8c84610b2e565b9250610b9a60208501610b2e565b9150604084013590509250925092565b5f60208284031215610bba575f80fd5b610bc382610b2e565b9392505050565b5f8060408385031215610bdb575f80fd5b82359150610beb60208401610b2e565b90509250929050565b5f8060408385031215610c05575f80fd5b610c0e83610b2e565b9150610beb60208401610b2e565b600181811c90821680610c3057607f821691505b602082108103610c4e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561031157610311610c54565b8181038181111561031157610311610c5456fea2646970667358221220feff3907868f71dddc68930ac67fe608751269ab2fbf9f6c08da0c41ae1f88db64736f6c63430008180033a264697066735822122029156ae512a301067255d9bf673ac5dca48f136043023e4fc5eaaed557762f8a64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c69000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c0000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _uniswapFactory (address): 0xd7Be65A26f4279CCcD7c7be1bBd2253f293B9C69
Arg [1] : _uniswapRouter (address): 0xC6558C1699230e1f1f39abC40F2d9b56182FfB4C
Arg [2] : _listingFee (uint256): 100
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c69
Arg [1] : 000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode Sourcemap
15542:14873:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19767:1134;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2092:32:1;;;2074:51;;2062:2;2047:18;19767:1134:0;;;;;;;;17489:33;;;;;;;;;;;;;;;;;;;2282:25:1;;;2270:2;2255:18;17489:33:0;2136:177:1;19576:152:0;;;;;;;;;;-1:-1:-1;19576:152:0;;;;;:::i;:::-;;:::i;:::-;;16839:35;;;;;;;;;;-1:-1:-1;16839:35:0;;;;;:::i;:::-;;:::i;30094:318::-;;;;;;;;;;-1:-1:-1;30094:318:0;;;;;:::i;:::-;;:::i;16943:46::-;;;;;;;;;;-1:-1:-1;16943:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;29576:378;;;;;;;;;;-1:-1:-1;29576:378:0;;;;;:::i;:::-;;:::i;17568:43::-;;;;;;;;;;;;17603:8;17568:43;;17618:57;;;;;;;;;;;;;:::i;17354:25::-;;;;;;;;;;;;;;;;16792:38;;;;;;;;;;;;;;;18101:51;;;;;;;;;;;;18141:11;18101:51;;16746:39;;;;;;;;;;;;;;;16709:30;;;;;;;;;;;;;;;17682:61;;;;;;;;;;;;;:::i;16881:55::-;;;;;;;;;;-1:-1:-1;16881:55:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;18204:45::-;;;;;;;;;;;;18232:17;18204:45;;20909:330;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17125:37::-;;;;;;;;;;;;17159:3;17125:37;;21282:388;;;;;;;;;;-1:-1:-1;21282:388:0;;;;;:::i;:::-;;:::i;17060:58::-;;;;;;;;;;;;17109:9;17060:58;;18346;;;;;;;;;;;;18394:10;18346:58;;26806:1403;;;;;;;;;;-1:-1:-1;26806:1403:0;;;;;:::i;:::-;;:::i;17191:48::-;;;;;;;;;;;;17233:6;17191:48;;23471:390;;;;;;;;;;-1:-1:-1;23471:390:0;;;;;:::i;:::-;;:::i;24610:2031::-;;;;;;:::i;:::-;;:::i;21897:1566::-;;;;;;;;;;-1:-1:-1;21897:1566:0;;;;;:::i;:::-;;:::i;19767:1134::-;19967:7;18530:1;18613:7;;:19;18605:63;;;;-1:-1:-1;;;18605:63:0;;;;;;;:::i;:::-;;;;;;;;;18530:1;18679:7;:18;17109:9:::1;19995;:35;;19987:69;;;::::0;-1:-1:-1;;;19987:69:0;;8150:2:1;19987:69:0::1;::::0;::::1;8132:21:1::0;8189:2;8169:18;;;8162:30;-1:-1:-1;;;8208:18:1;;;8201:51;8269:18;;19987:69:0::1;7948:345:1::0;19987:69:0::1;20141:9;20119:18;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;20258:11:0::1;::::0;-1:-1:-1;20282:4:0;20288:6;17655:20:::1;17603:8;17655:9;:20;:::i;:::-;17740:3;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;::::0;17734:2:::1;17721:15;:::i;:::-;17720:23;;;;:::i;:::-;20272:48;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;20331:31:0::1;::::0;-1:-1:-1;;;20331:31:0;;20356:4:::1;20331:31;::::0;::::1;2074:51:1::0;20258:62:0;;-1:-1:-1;;;;;;20331:16:0;::::1;::::0;::::1;::::0;2047:18:1;;20331:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;20373:17:0::1;20420:34:::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;20420:34:0::1;-1:-1:-1::0;;;;;20420:34:0;::::1;::::0;;::::1;::::0;;;20497:295:::1;::::0;;20420:34:::1;20497:295:::0;::::1;::::0;;;;;20420:34:::1;20497:295:::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;20738:10:::1;20497:295:::0;;;;;;;;;;20465:29;;;;;;;;;;:327;;20420:34;;-1:-1:-1;20497:295:0;;-1:-1:-1;20465:29:0;;;:327:::1;::::0;:29;:327:::1;:::i;:::-;-1:-1:-1::0;20465:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;20465:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;20465:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;20465:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;20465:327:0;;::::1;-1:-1:-1::0;;;;;;20465:327:0;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;-1:-1:-1::0;;;20465:327:0::1;-1:-1:-1::0;;;;;;20465:327:0;;;;;::::1;::::0;;;;;;;::::1;::::0;;20810:56:::1;::::0;20838:10:::1;::::0;20810:56;::::1;::::0;::::1;::::0;::::1;::::0;20850:15:::1;2282:25:1::0;;2270:2;2255:18;;2136:177;20810:56:0::1;;;;;;;;18486:1:::0;18720:7;:22;20884:9;19767:1134;-1:-1:-1;;;;;;19767:1134:0:o;19576:152::-;18798:10;-1:-1:-1;;;;;18812:5:0;18798:19;;18790:41;;;;-1:-1:-1;;;18790:41:0;;;;;;;:::i;:::-;19650:10:::1;:24:::0;;;19690:30:::1;::::0;2282:25:1;;;19690:30:0::1;::::0;2270:2:1;2255:18;19690:30:0::1;;;;;;;19576:152:::0;:::o;16839:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16839:35:0;;-1:-1:-1;16839:35:0;:::o;30094:318::-;18798:10;-1:-1:-1;;;;;18812:5:0;18798:19;;18790:41;;;;-1:-1:-1;;;18790:41:0;;;;;;;:::i;:::-;18530:1:::1;18613:7;;:19:::0;18605:63:::1;;;;-1:-1:-1::0;;;18605:63:0::1;;;;;;;:::i;:::-;18530:1;18679:7;:18:::0;-1:-1:-1;;;;;30187:16:0;::::2;30179:33;;;;-1:-1:-1::0;;;30179:33:0::2;;;;;;12581:2:1::0;12563:21;;;12620:1;12600:18;;;12593:29;-1:-1:-1;;;12653:2:1;12638:18;;12631:34;12697:2;12682:18;;12379:327;30179:33:0::2;30237:21;30277:7:::0;30269:30:::2;;;::::0;-1:-1:-1;;;30269:30:0;;12913:2:1;30269:30:0::2;::::0;::::2;12895:21:1::0;12952:2;12932:18;;;12925:30;-1:-1:-1;;;12971:18:1;;;12964:40;13021:18;;30269:30:0::2;12711:334:1::0;30269:30:0::2;30313:12;30331:2;-1:-1:-1::0;;;;;30331:7:0::2;30346:3;30331:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30312:42;;;30373:7;30365:39;;;::::0;-1:-1:-1;;;30365:39:0;;13462:2:1;30365:39:0::2;::::0;::::2;13444:21:1::0;13501:2;13481:18;;;13474:30;-1:-1:-1;;;13520:18:1;;;13513:49;13579:18;;30365:39:0::2;13260:343:1::0;30365:39:0::2;-1:-1:-1::0;;18486:1:0::1;18720:7;:22:::0;-1:-1:-1;30094:318:0:o;29576:378::-;18798:10;-1:-1:-1;;;;;18812:5:0;18798:19;;18790:41;;;;-1:-1:-1;;;18790:41:0;;;;;;;:::i;:::-;18530:1:::1;18613:7;;:19:::0;18605:63:::1;;;;-1:-1:-1::0;;;18605:63:0::1;;;;;;;:::i;:::-;18530:1;18679:7;:18:::0;-1:-1:-1;;;;;29693:16:0;::::2;29685:33;;;;-1:-1:-1::0;;;29685:33:0::2;;;;;;12581:2:1::0;12563:21;;;12620:1;12600:18;;;12593:29;-1:-1:-1;;;12653:2:1;12638:18;;12631:34;12697:2;12682:18;;12379:327;29685:33:0::2;29746:18;::::0;29783:10;29775:30:::2;;;::::0;-1:-1:-1;;;29775:30:0;;13810:2:1;29775:30:0::2;::::0;::::2;13792:21:1::0;13849:1;13829:18;;;13822:29;-1:-1:-1;;;13867:18:1;;;13860:37;13914:18;;29775:30:0::2;13608:330:1::0;29775:30:0::2;29837:1;29816:18;:22;;;;29852:12;29870:2;-1:-1:-1::0;;;;;29870:7:0::2;29885:6;29870:26;;;13050:205:1::0;17618:57:0;17655:20;17603:8;17655:9;:20;:::i;:::-;17618:57;:::o;17682:61::-;17740:3;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;;17734:2;17721:15;:::i;:::-;17720:23;;;;:::i;16881:55::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;16881:55:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16881:55:0;;;;-1:-1:-1;16881:55:0;;;;-1:-1:-1;;;16881:55:0;;;;;:::o;20909:330::-;20991:11;21005:25;;20960:18;;21005:25;21067:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21067:20:0;;;;;;;;;;;;;;;;;21041:46;;21103:9;21098:112;21122:3;21118:1;:7;21098:112;;;21157:18;:41;21176:18;21195:1;21176:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21176:21:0;21157:41;;;;;;;;;;;;;;;21147:51;;21176:21;21147:51;;;;;;;;;21157:41;;21147:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21147:51:0;;;-1:-1:-1;;21147:51:0;;;;;;;;;;;;-1:-1:-1;;;;;21147:51:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21147:51:0;;;;;;;;;;;;:7;;;;21152:1;;21147:7;;;;;;:::i;:::-;;;;;;;;;;:51;21127:3;;21098:112;;;-1:-1:-1;21227:4:0;20909:330;-1:-1:-1;;20909:330:0:o;21282:388::-;21390:7;;17603:8;21436:22;21449:9;21436:10;:22;:::i;:::-;21431:28;;18232:17;21431:28;:::i;:::-;21430:41;;;;:::i;:::-;21410:61;-1:-1:-1;21482:17:0;17603:8;21503:14;21507:10;18232:17;21503:14;:::i;:::-;21502:27;;;;:::i;:::-;21482:47;;21540:12;21555:14;21559:9;21555:3;:14::i;:::-;21540:29;;21580:12;21595:14;21599:9;21595:3;:14::i;:::-;21580:29;-1:-1:-1;18232:17:0;21645:11;21580:29;21645:4;:11;:::i;:::-;21628:29;;18141:11;21628:29;:::i;:::-;21627:35;;;;:::i;:::-;21620:42;;;;;;21282:388;;;;;:::o;26806:1403::-;26922:7;18530:1;18613:7;;:19;18605:63;;;;-1:-1:-1;;;18605:63:0;;;;;;;:::i;:::-;18530:1;18679:7;:18;;;-1:-1:-1;;;;;26965:29:0;;::::1;26942:20;26965:29:::0;;;:18:::1;:29;::::0;;;;27027:15;;::::1;::::0;;;::::1;:28;:55:::0;::::1;;;-1:-1:-1::0;;;;;;27059:23:0;::::1;::::0;::::1;27027:55;27005:118;;;;-1:-1:-1::0;;;27005:118:0::1;;;;;;;:::i;:::-;27143:13;::::0;::::1;::::0;-1:-1:-1;;;27143:13:0;::::1;;;27142:14;27134:48;;;::::0;-1:-1:-1;;;27134:48:0;;14752:2:1;27134:48:0::1;::::0;::::1;14734:21:1::0;14791:2;14771:18;;;14764:30;-1:-1:-1;;;14810:18:1;;;14803:51;14871:18;;27134:48:0::1;14550:345:1::0;27134:48:0::1;27215:9:::0;27195:11:::1;27253:19;17603:8;27253::::0;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;27306:22:0;;::::1;27285:18;27306:22:::0;;;:11:::1;:22;::::0;;;;;;;27349:27;;-1:-1:-1;;;27349:27:0;;27365:10:::1;27349:27;::::0;::::1;2074:51:1::0;27236:36:0;;-1:-1:-1;27306:22:0;27236:36;;27349:15;::::1;::::0;::::1;::::0;2047:18:1;;27349:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;27341:70;;;::::0;-1:-1:-1;;;27341:70:0;;15291:2:1;27341:70:0::1;::::0;::::1;15273:21:1::0;15330:2;15310:18;;;15303:30;-1:-1:-1;;;15349:18:1;;;15342:50;15409:18;;27341:70:0::1;15089:344:1::0;27341:70:0::1;27444:6;27430:10;:20;;27422:53;;;::::0;-1:-1:-1;;;27422:53:0;;15640:2:1;27422:53:0::1;::::0;::::1;15622:21:1::0;15679:2;15659:18;;;15652:30;-1:-1:-1;;;15698:18:1;;;15691:50;15758:18;;27422:53:0::1;15438:344:1::0;27422:53:0::1;27488:14;27505:35;27521:10;27533:6;27505:15;:35::i;:::-;27488:52;;27579:6;27559:2;:16;;;:26;;27551:61;;;::::0;-1:-1:-1;;;27551:61:0;;15989:2:1;27551:61:0::1;::::0;::::1;15971:21:1::0;16028:2;16008:18;;;16001:30;-1:-1:-1;;;16047:18:1;;;16040:52;16109:18;;27551:61:0::1;15787:346:1::0;27551:61:0::1;27625:11;17233:6;27640:16;17159:3;27640:6:::0;:16:::1;:::i;:::-;27639:36;;;;:::i;:::-;27625:50:::0;-1:-1:-1;27686:17:0::1;27706:12;27625:50:::0;27706:6;:12:::1;:::i;:::-;27686:32;;27753:3;27731:18;;:25;;;;;;;:::i;:::-;;;;;;;;27787:6;27767:2;:16;;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;27829:19:0::1;::::0;-1:-1:-1;27842:6:0;27829:10;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;27804:22:0;;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;:44;;;;27861:30;;-1:-1:-1;;;27861:30:0;;::::1;::::0;::::1;16312:25:1::0;;;27880:10:0::1;16353:18:1::0;;;16346:60;27861:10:0;;::::1;::::0;::::1;::::0;16285:18:1;;27861:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;27923:37:0::1;::::0;27905:12:::1;::::0;-1:-1:-1;27923:10:0::1;::::0;-1:-1:-1;27946:9:0;;27905:12;27923:37;27905:12;27923:37;27946:9;27923:10;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27904:56;;;27979:7;27971:39;;;::::0;-1:-1:-1;;;27971:39:0;;13462:2:1;27971:39:0::1;::::0;::::1;13444:21:1::0;13501:2;13481:18;;;13474:30;-1:-1:-1;;;13520:18:1;;;13513:49;13579:18;;27971:39:0::1;13260:343:1::0;27971:39:0::1;28028:146;::::0;;16619:25:1;;;16675:2;16660:18;;16653:34;;;28148:15:0::1;16703:18:1::0;;;16696:34;28028:146:0;;28076:10:::1;::::0;-1:-1:-1;;;;;28028:146:0;::::1;::::0;::::1;::::0;;;;16607:2:1;28028:146:0;;::::1;-1:-1:-1::0;18486:1:0;18720:7;:22;28192:9;26806:1403;-1:-1:-1;;;;;;;;;26806:1403:0:o;23471:390::-;23581:7;;17603:8;23622:14;23626:10;18232:17;23622:14;:::i;:::-;23621:27;;;;:::i;:::-;23601:47;-1:-1:-1;23659:17:0;17603:8;23685:22;23698:9;23685:10;:22;:::i;:::-;23680:28;;18232:17;23680:28;:::i;24610:2031::-;24733:7;18530:1;18613:7;;:19;18605:63;;;;-1:-1:-1;;;18605:63:0;;;;;;;:::i;:::-;18530:1;18679:7;:18;;;-1:-1:-1;;;;;24776:29:0;;::::1;24753:20;24776:29:::0;;;:18:::1;:29;::::0;;;;24838:15;;::::1;::::0;;;::::1;:28;:55:::0;::::1;;;-1:-1:-1::0;;;;;;24870:23:0;::::1;::::0;::::1;24838:55;24816:118;;;;-1:-1:-1::0;;;24816:118:0::1;;;;;;;:::i;:::-;24954:13;::::0;::::1;::::0;-1:-1:-1;;;24954:13:0;::::1;;;24953:14;24945:48;;;::::0;-1:-1:-1;;;24945:48:0;;14752:2:1;24945:48:0::1;::::0;::::1;14734:21:1::0;14791:2;14771:18;;;14764:30;-1:-1:-1;;;14810:18:1;;;14803:51;14871:18;;24945:48:0::1;14550:345:1::0;24945:48:0::1;25026:9:::0;25006:11:::1;25064:19;17603:8;25064::::0;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;25117:22:0;::::1;25096:18;25117:22:::0;;;:11:::1;:22;::::0;;;;;25047:36;;-1:-1:-1;25117:22:0;17740:3:::1;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;::::0;17734:2:::1;17721:15;:::i;:::-;17720:23;;;;:::i;:::-;17655:20;17603:8;17655:9;:20;:::i;:::-;25170:24;;;;:::i;:::-;:37;;;;:::i;:::-;25150:57;;25236:9;25226:6;:19;;25218:51;;;::::0;-1:-1:-1;;;25218:51:0;;16943:2:1;25218:51:0::1;::::0;::::1;16925:21:1::0;16982:2;16962:18;;;16955:30;-1:-1:-1;;;17001:18:1;;;16994:49;17060:18;;25218:51:0::1;16741:343:1::0;25218:51:0::1;25282:17;25302:33;25316:10;25328:6;25302:13;:33::i;:::-;25282:53:::0;-1:-1:-1;25346:11:0::1;17233:6;25361:19;17159:3;25282:53:::0;25361:19:::1;:::i;:::-;25360:39;;;;:::i;:::-;25346:53:::0;-1:-1:-1;25410:13:0::1;25426:15;25346:53:::0;25426:9;:15:::1;:::i;:::-;25410:31;;25475:5;25462:9;:18;25454:51;;;::::0;-1:-1:-1;;;25454:51:0;;17291:2:1;25454:51:0::1;::::0;::::1;17273:21:1::0;17330:2;17310:18;;;17303:30;-1:-1:-1;;;17349:18:1;;;17342:50;17409:18;;25454:51:0::1;17089:344:1::0;25454:51:0::1;25540:3;25518:18;;:25;;;;;;;:::i;:::-;;;;;;;;25574:9;25554:2;:16;;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25619:19:0::1;::::0;-1:-1:-1;25632:6:0;25619:10;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;25594:22:0;;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;:44;;;;25651:30;;-1:-1:-1;;;25651:30:0;;::::1;::::0;::::1;16312:25:1::0;;;25670:10:0::1;16353:18:1::0;;;16346:60;25651:10:0;;::::1;::::0;::::1;::::0;16285:18:1;;25651:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25699:144:0::1;::::0;;16619:25:1;;;16675:2;16660:18;;16653:34;;;25817:15:0::1;16703:18:1::0;;;16696:34;25699:144:0;;25749:10:::1;::::0;-1:-1:-1;;;;;;25699:144:0;::::1;::::0;-1:-1:-1;25699:144:0::1;::::0;;;;16607:2:1;25699:144:0;;::::1;25945:13;::::0;::::1;::::0;-1:-1:-1;;;25945:13:0;::::1;;;25944:14;:59:::0;::::1;;;;18394:10;25962:2;:16;;;:41;;25944:59;25940:669;;;26036:16;::::0;::::1;::::0;26115:10:::1;::::0;26020:13:::1;::::0;26115:14;;;;:36:::1;;;26141:10;;26133:5;:18;26115:36;26111:194;;;26181:10;::::0;26172:19:::1;::::0;;::::1;:::i;:::-;;;26232:10;;26210:18;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26279:10:0::1;::::0;;-1:-1:-1;26111:194:0::1;26321:13;::::0;::::1;:20:::0;;-1:-1:-1;;;;26321:20:0::1;-1:-1:-1::0;;;26321:20:0::1;::::0;;;26356:16:::1;::::0;::::1;:20:::0;26393:34:::1;26410:9:::0;26421:5;26393:16:::1;:34::i;:::-;26449:148;::::0;;16619:25:1;;;16675:2;16660:18;;16653:34;;;26567:15:0::1;16703:18:1::0;;;16696:34;26449:148:0;;-1:-1:-1;;;;;26449:148:0;::::1;::::0;::::1;::::0;;;;;16607:2:1;26449:148:0;;::::1;26005:604;;25940:669;18486:1:::0;18720:7;:22;26628:5;24610:2031;-1:-1:-1;;;;;;;;;;24610:2031:0:o;21897:1566::-;-1:-1:-1;;;;;22063:29:0;;;22020:7;22063:29;;;:18;:29;;;;;22125:15;;;;22020:7;;22063:29;;22125:15;;:28;:55;;;;-1:-1:-1;;;;;;22157:23:0;;;;22125:55;22103:118;;;;-1:-1:-1;;;22103:118:0;;;;;;;:::i;:::-;22241:13;;;;-1:-1:-1;;;22241:13:0;;;;22240:14;22232:43;;;;-1:-1:-1;;;22232:43:0;;17640:2:1;22232:43:0;;;17622:21:1;17679:2;17659:18;;;17652:30;-1:-1:-1;;;17698:18:1;;;17691:46;17754:18;;22232:43:0;17438:340:1;22232:43:0;-1:-1:-1;;;;;22309:22:0;;22288:18;22309:22;;;:11;:22;;;;;;;;17740:3;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;;17734:2;17721:15;:::i;:::-;17720:23;;;;:::i;:::-;17655:20;17603:8;17655:9;:20;:::i;:::-;22361:24;;;;:::i;:::-;:37;;;;:::i;:::-;22342:56;-1:-1:-1;22409:17:0;22429:19;17603:8;22342:56;22429:19;:::i;:::-;22409:39;-1:-1:-1;22465:14:0;;;:32;;-1:-1:-1;22483:14:0;;22465:32;22461:73;;;22521:1;22514:8;;;;;;;;22461:73;22614:20;17233:6;22651:25;17159:3;17233:6;22651:25;:::i;:::-;22638:39;;:9;:39;:::i;:::-;22637:72;;;;:::i;:::-;22614:95;-1:-1:-1;22722:11:0;22763:9;22785:648;22798:4;22792:3;:10;22785:648;;;22819:11;22852:1;22834:10;22840:4;22834:3;:10;:::i;:::-;:14;;22847:1;22834:14;:::i;:::-;22833:20;;;;:::i;:::-;22819:34;-1:-1:-1;22868:17:0;22888:14;17603:8;22819:34;22888:14;:::i;:::-;22993:156;;;;;;17957:25:1;;;17998:18;;;;17991:34;;;22993:156:0;;;;;;;;;;17930:18:1;;;;22993:156:0;;;;;;;-1:-1:-1;;;;;22993:156:0;-1:-1:-1;;;22993:156:0;;;22950:214;;17991:34:1;;-1:-1:-1;;;;;22958:4:0;;22950:214;;22993:156;22950:214;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22919:245;;;;23185:2;23181:212;;;23208:12;23234:4;23223:27;;;;;;;;;;;;:::i;:::-;23208:42;;23281:12;23273:4;:20;23269:109;;23324:3;23318:9;;23350:8;;;;;;;23269:109;23189:204;23181:212;23414:7;23420:1;23414:3;:7;:::i;:::-;23407:14;;22804:629;;;;22785:648;;;-1:-1:-1;23452:3:0;21897:1566;-1:-1:-1;;;;;;;;21897:1566:0:o;24053:333::-;24100:7;17603:8;;24211:1;24194:164;24219:2;24214:1;:7;24194:164;;24264:21;17603:8;24272:1;24264:21;:::i;:::-;24251:8;24258:1;24251:4;:8;:::i;:::-;24250:36;;;;:::i;:::-;24243:43;-1:-1:-1;24301:11:0;24243:43;24301:11;;:::i;:::-;;;24338:1;24331:4;:8;24341:5;24327:19;24223:3;;;;:::i;:::-;;;;24194:164;;;-1:-1:-1;24375:3:0;;24053:333;-1:-1:-1;;;24053:333:0:o;28256:1193::-;28360:1;28348:9;:13;28340:39;;;;-1:-1:-1;;;28340:39:0;;18670:2:1;28340:39:0;;;18652:21:1;18709:2;18689:18;;;18682:30;-1:-1:-1;;;18728:18:1;;;18721:43;18781:18;;28340:39:0;18468:337:1;28340:39:0;28392:25;28438:14;28392:61;;28464:25;28511:13;28464:61;;28538:12;28553:6;-1:-1:-1;;;;;28553:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28592:32;;-1:-1:-1;;;28592:32:0;;-1:-1:-1;;;;;19304:15:1;;;28592:32:0;;;19286:34:1;19356:15;;;19336:18;;;19329:43;28538:28:0;;-1:-1:-1;28577:12:0;;28592:15;;;;;19221:18:1;;28592:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28577:47;-1:-1:-1;;;;;;28639:18:0;;28635:93;;28681:35;;-1:-1:-1;;;28681:35:0;;-1:-1:-1;;;;;19304:15:1;;;28681:35:0;;;19286:34:1;19356:15;;;19336:18;;;19329:43;28681:18:0;;;;;19221::1;;28681:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28674:42;;28635:93;17740:3;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;;17734:2;17721:15;:::i;:::-;17720:23;;;;:::i;:::-;28834:41;;-1:-1:-1;;;28834:41:0;;28869:4;28834:41;;;2074:51:1;-1:-1:-1;;;;;28834:26:0;;;;;2047:18:1;;28834:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;28812:128;;;;-1:-1:-1;;;28812:128:0;;19585:2:1;28812:128:0;;;19567:21:1;19624:2;19604:18;;;19597:30;-1:-1:-1;;;19643:18:1;;;19636:52;19705:18;;28812:128:0;19383:346:1;28812:128:0;-1:-1:-1;;;;;28953:24:0;;;28986:6;17740:3;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;;17734:2;17721:15;:::i;:::-;17720:23;;;;:::i;:::-;28953:54;;-1:-1:-1;;;;;;28953:54:0;;;;;;;-1:-1:-1;;;;;19926:32:1;;;28953:54:0;;;19908:51:1;19975:18;;;19968:34;19881:18;;28953:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29025:17:0;-1:-1:-1;;;;;29046:22:0;;;29076:9;29101;17740:3;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;;17734:2;17721:15;:::i;:::-;17720:23;;;;:::i;:::-;17740:3;17655:20;17603:8;17655:9;:20;:::i;:::-;17721:15;;17734:2;17721:15;:::i;:::-;17720:23;;;;:::i;:::-;29046:234;;-1:-1:-1;;;;;;29046:234:0;;;;;;;-1:-1:-1;;;;;20638:15:1;;;29046:234:0;;;20620:34:1;20670:18;;;20663:34;;;;20713:18;;;20706:34;20756:18;;;20749:34;;;29234:4:0;20799:19:1;;;20792:44;29254:15:0;20852:19:1;;;20845:35;20554:19;;29046:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29020:260;;;;29313:1;29301:9;:13;29293:45;;;;-1:-1:-1;;;29293:45:0;;21404:2:1;29293:45:0;;;21386:21:1;21443:2;21423:18;;;21416:30;-1:-1:-1;;;21462:18:1;;;21455:49;21521:18;;29293:45:0;21202:343:1;29293:45:0;29389:52;;-1:-1:-1;;;29389:52:0;;29427:1;29389:52;;;19908:51:1;19975:18;;;19968:34;;;-1:-1:-1;;;;;29389:29:0;;;;;19881:18:1;;29389:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28329:1120;;;;;28256:1193;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:719;189:5;242:3;235:4;227:6;223:17;219:27;209:55;;260:1;257;250:12;209:55;296:6;283:20;322:18;359:2;355;352:10;349:36;;;365:18;;:::i;:::-;440:2;434:9;408:2;494:13;;-1:-1:-1;;490:22:1;;;514:2;486:31;482:40;470:53;;;538:18;;;558:22;;;535:46;532:72;;;584:18;;:::i;:::-;624:10;620:2;613:22;659:2;651:6;644:18;705:3;698:4;693:2;685:6;681:15;677:26;674:35;671:55;;;722:1;719;712:12;671:55;786:2;779:4;771:6;767:17;760:4;752:6;748:17;735:54;833:1;826:4;821:2;813:6;809:15;805:26;798:37;853:6;844:15;;;;;;146:719;;;;:::o;870:944::-;996:6;1004;1012;1020;1073:3;1061:9;1052:7;1048:23;1044:33;1041:53;;;1090:1;1087;1080:12;1041:53;1130:9;1117:23;1159:18;1200:2;1192:6;1189:14;1186:34;;;1216:1;1213;1206:12;1186:34;1239:50;1281:7;1272:6;1261:9;1257:22;1239:50;:::i;:::-;1229:60;;1342:2;1331:9;1327:18;1314:32;1298:48;;1371:2;1361:8;1358:16;1355:36;;;1387:1;1384;1377:12;1355:36;1410:52;1454:7;1443:8;1432:9;1428:24;1410:52;:::i;:::-;1400:62;;1515:2;1504:9;1500:18;1487:32;1471:48;;1544:2;1534:8;1531:16;1528:36;;;1560:1;1557;1550:12;1528:36;1583:52;1627:7;1616:8;1605:9;1601:24;1583:52;:::i;:::-;1573:62;;1688:2;1677:9;1673:18;1660:32;1644:48;;1717:2;1707:8;1704:16;1701:36;;;1733:1;1730;1723:12;1701:36;;1756:52;1800:7;1789:8;1778:9;1774:24;1756:52;:::i;:::-;1746:62;;;870:944;;;;;;;:::o;2318:180::-;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;-1:-1:-1;2469:23:1;;2318:180;-1:-1:-1;2318:180:1:o;2503:139::-;-1:-1:-1;;;;;2586:31:1;;2576:42;;2566:70;;2632:1;2629;2622:12;2566:70;2503:139;:::o;2647:263::-;2714:6;2767:2;2755:9;2746:7;2742:23;2738:32;2735:52;;;2783:1;2780;2773:12;2735:52;2822:9;2809:23;2841:39;2874:5;2841:39;:::i;:::-;2899:5;2647:263;-1:-1:-1;;;2647:263:1:o;3175:250::-;3260:1;3270:113;3284:6;3281:1;3278:13;3270:113;;;3360:11;;;3354:18;3341:11;;;3334:39;3306:2;3299:10;3270:113;;;-1:-1:-1;;3417:1:1;3399:16;;3392:27;3175:250::o;3430:271::-;3472:3;3510:5;3504:12;3537:6;3532:3;3525:19;3553:76;3622:6;3615:4;3610:3;3606:14;3599:4;3592:5;3588:16;3553:76;:::i;:::-;3683:2;3662:15;-1:-1:-1;;3658:29:1;3649:39;;;;3690:4;3645:50;;3430:271;-1:-1:-1;;3430:271:1:o;3802:1085::-;4164:4;4193:3;4223:2;4212:9;4205:21;4249:45;4290:2;4279:9;4275:18;4267:6;4249:45;:::i;:::-;4235:59;;4342:9;4334:6;4330:22;4325:2;4314:9;4310:18;4303:50;4376:33;4402:6;4394;4376:33;:::i;:::-;4362:47;;4457:9;4449:6;4445:22;4440:2;4429:9;4425:18;4418:50;4491:33;4517:6;4509;4491:33;:::i;:::-;4477:47;;4572:9;4564:6;4560:22;4555:2;4544:9;4540:18;4533:50;4600:33;4626:6;4618;4600:33;:::i;:::-;4664:3;4649:19;;4642:35;;;;-1:-1:-1;;;;;;;4752:15:1;;;4704:3;4731:19;;4724:44;4805:15;;;;4799:3;4784:19;;4777:44;4865:14;;4858:22;4852:3;4837:19;;;4830:51;4592:41;3802:1085;-1:-1:-1;;;;3802:1085:1:o;4892:2110::-;5088:4;5117:2;5157;5146:9;5142:18;5187:2;5176:9;5169:21;5210:6;5245;5239:13;5276:6;5268;5261:22;5302:2;5292:12;;5335:2;5324:9;5320:18;5313:25;;5397:2;5387:6;5384:1;5380:14;5369:9;5365:30;5361:39;5435:2;5427:6;5423:15;5456:1;5466:1507;5480:6;5477:1;5474:13;5466:1507;;;5573:2;5569:7;5557:9;5549:6;5545:22;5541:36;5536:3;5529:49;5607:6;5601:13;5637:6;5682:2;5676:9;5713:2;5705:6;5698:18;5743:48;5787:2;5779:6;5775:15;5761:12;5743:48;:::i;:::-;5729:62;;;5840:2;5836;5832:11;5826:18;5893:6;5885;5881:19;5876:2;5868:6;5864:15;5857:44;5928:41;5962:6;5946:14;5928:41;:::i;:::-;5914:55;;;6018:2;6014;6010:11;6004:18;6071:6;6063;6059:19;6054:2;6046:6;6042:15;6035:44;6106:41;6140:6;6124:14;6106:41;:::i;:::-;6092:55;;;6170:4;6223:2;6219;6215:11;6209:18;6276:6;6268;6264:19;6259:2;6251:6;6247:15;6240:44;6311:41;6345:6;6329:14;6311:41;:::i;:::-;6297:55;;;;6375:4;6430:2;6426;6422:11;6416:18;6411:2;6403:6;6399:15;6392:43;;6458:4;6511:2;6507;6503:11;6497:18;6528:51;6575:2;6567:6;6563:15;6547:14;-1:-1:-1;;;;;1885:31:1;1873:44;;1819:104;6528:51;-1:-1:-1;;6602:4:1;6647:11;;;6641:18;-1:-1:-1;;;;;1885:31:1;6707:15;;;1873:44;6746:4;6791:11;;;6785:18;3776:13;3769:21;6848:15;;;;3757:34;6951:12;;;;6916:15;;;;5502:1;5495:9;5466:1507;;;-1:-1:-1;6990:6:1;;4892:2110;-1:-1:-1;;;;;;;;4892:2110:1:o;7007:248::-;7075:6;7083;7136:2;7124:9;7115:7;7111:23;7107:32;7104:52;;;7152:1;7149;7142:12;7104:52;-1:-1:-1;;7175:23:1;;;7245:2;7230:18;;;7217:32;;-1:-1:-1;7007:248:1:o;7260:323::-;7328:6;7336;7389:2;7377:9;7368:7;7364:23;7360:32;7357:52;;;7405:1;7402;7395:12;7357:52;7444:9;7431:23;7463:39;7496:5;7463:39;:::i;:::-;7521:5;7573:2;7558:18;;;;7545:32;;-1:-1:-1;;;7260:323:1:o;7588:355::-;7790:2;7772:21;;;7829:2;7809:18;;;7802:30;7868:33;7863:2;7848:18;;7841:61;7934:2;7919:18;;7588:355::o;8298:127::-;8359:10;8354:3;8350:20;8347:1;8340:31;8390:4;8387:1;8380:15;8414:4;8411:1;8404:15;8430:125;8495:9;;;8516:10;;;8513:36;;;8529:18;;:::i;8560:168::-;8633:9;;;8664;;8681:15;;;8675:22;;8661:37;8651:71;;8702:18;;:::i;8733:217::-;8773:1;8799;8789:132;;8843:10;8838:3;8834:20;8831:1;8824:31;8878:4;8875:1;8868:15;8906:4;8903:1;8896:15;8789:132;-1:-1:-1;8935:9:1;;8733:217::o;8955:527::-;9208:3;9197:9;9190:22;9171:4;9235:46;9276:3;9265:9;9261:19;9253:6;9235:46;:::i;:::-;9329:9;9321:6;9317:22;9312:2;9301:9;9297:18;9290:50;9357:33;9383:6;9375;9357:33;:::i;:::-;9421:2;9406:18;;9399:34;;;;-1:-1:-1;;9464:2:1;9449:18;9442:34;9349:41;8955:527;-1:-1:-1;;8955:527:1:o;9487:380::-;9566:1;9562:12;;;;9609;;;9630:61;;9684:4;9676:6;9672:17;9662:27;;9630:61;9737:2;9729:6;9726:14;9706:18;9703:38;9700:161;;9783:10;9778:3;9774:20;9771:1;9764:31;9818:4;9815:1;9808:15;9846:4;9843:1;9836:15;9700:161;;9487:380;;;:::o;9998:518::-;10100:2;10095:3;10092:11;10089:421;;;10136:5;10133:1;10126:16;10180:4;10177:1;10167:18;10250:2;10238:10;10234:19;10231:1;10227:27;10221:4;10217:38;10286:4;10274:10;10271:20;10268:47;;;-1:-1:-1;10309:4:1;10268:47;10364:2;10359:3;10355:12;10352:1;10348:20;10342:4;10338:31;10328:41;;10419:81;10437:2;10430:5;10427:13;10419:81;;;10496:1;10482:16;;10463:1;10452:13;10419:81;;;10423:3;;10089:421;9998:518;;;:::o;10692:1345::-;10818:3;10812:10;10845:18;10837:6;10834:30;10831:56;;;10867:18;;:::i;:::-;10896:97;10986:6;10946:38;10978:4;10972:11;10946:38;:::i;:::-;10940:4;10896:97;:::i;:::-;11048:4;;11105:2;11094:14;;11122:1;11117:663;;;;11824:1;11841:6;11838:89;;;-1:-1:-1;11893:19:1;;;11887:26;11838:89;-1:-1:-1;;10649:1:1;10645:11;;;10641:24;10637:29;10627:40;10673:1;10669:11;;;10624:57;11940:81;;11087:944;;11117:663;9945:1;9938:14;;;9982:4;9969:18;;-1:-1:-1;;11153:20:1;;;11271:236;11285:7;11282:1;11279:14;11271:236;;;11374:19;;;11368:26;11353:42;;11466:27;;;;11434:1;11422:14;;;;11301:19;;11271:236;;;11275:3;11535:6;11526:7;11523:19;11520:201;;;11596:19;;;11590:26;-1:-1:-1;;11679:1:1;11675:14;;;11691:3;11671:24;11667:37;11663:42;11648:58;11633:74;;11520:201;;;11767:1;11758:6;11755:1;11751:14;11747:22;11741:4;11734:36;11087:944;;;;;10692:1345;;:::o;12042:332::-;12244:2;12226:21;;;12283:1;12263:18;;;12256:29;-1:-1:-1;;;12316:2:1;12301:18;;12294:39;12365:2;12350:18;;12042:332::o;13943:127::-;14004:10;13999:3;13995:20;13992:1;13985:31;14035:4;14032:1;14025:15;14059:4;14056:1;14049:15;14075:128;14142:9;;;14163:11;;;14160:37;;;14177:18;;:::i;14208:337::-;14410:2;14392:21;;;14449:2;14429:18;;;14422:30;-1:-1:-1;;;14483:2:1;14468:18;;14461:43;14536:2;14521:18;;14208:337::o;14900:184::-;14970:6;15023:2;15011:9;15002:7;14998:23;14994:32;14991:52;;;15039:1;15036;15029:12;14991:52;-1:-1:-1;15062:16:1;;14900:184;-1:-1:-1;14900:184:1:o;18036:287::-;18165:3;18203:6;18197:13;18219:66;18278:6;18273:3;18266:4;18258:6;18254:17;18219:66;:::i;:::-;18301:16;;;;;18036:287;-1:-1:-1;;18036:287:1:o;18328:135::-;18367:3;18388:17;;;18385:43;;18408:18;;:::i;:::-;-1:-1:-1;18455:1:1;18444:13;;18328:135::o;18810:259::-;18880:6;18933:2;18921:9;18912:7;18908:23;18904:32;18901:52;;;18949:1;18946;18939:12;18901:52;18981:9;18975:16;19000:39;19033:5;19000:39;:::i;20013:277::-;20080:6;20133:2;20121:9;20112:7;20108:23;20104:32;20101:52;;;20149:1;20146;20139:12;20101:52;20181:9;20175:16;20234:5;20227:13;20220:21;20213:5;20210:32;20200:60;;20256:1;20253;20246:12;20891:306;20979:6;20987;20995;21048:2;21036:9;21027:7;21023:23;21019:32;21016:52;;;21064:1;21061;21054:12;21016:52;21093:9;21087:16;21077:26;;21143:2;21132:9;21128:18;21122:25;21112:35;;21187:2;21176:9;21172:18;21166:25;21156:35;;20891:306;;;;;:::o
Swarm Source
ipfs://29156ae512a301067255d9bf673ac5dca48f136043023e4fc5eaaed557762f8a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.