BEP-20
Source Code
Overview
Max Total Supply
100,000,000,0001Piece
Holders
220,450
Market
Price
$0.00 @ 0.000000 BNB
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
4,849,523.340695069186958643 1PieceValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Ipiece
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2025-03-06
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
interface IERC20 {
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(
address recipient,
uint256 amount
) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
interface ISwapRouter {
function WETH() external pure returns (address);
function factory() external pure returns (address);
function getAmountsIn(
uint amountOut,
address[] calldata path
) external view returns (uint[] memory amounts);
function getAmountsOut(
uint amountIn,
address[] calldata path
) external view returns (uint[] memory amounts);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
)
external
payable
returns (uint amountToken, uint amountETH, uint liquidity);
}
interface ISwapFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function feeTo() external view returns (address);
}
interface ISwapPair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function totalSupply() external view returns (uint);
function kLast() external view returns (uint);
function sync() external;
}
abstract contract Ownable {
address internal _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
address msgSender = msg.sender;
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == msg.sender, "!o");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "n0");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library Math {
function min(uint x, uint y) internal pure returns (uint z) {
z = x < y ? x : y;
}
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
contract TokenDistributor {}
interface INFT {
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerNoBlack(uint256 tokenId) external view returns (address);
}
abstract contract AbsToken is IERC20, Ownable {
struct UserInfo {
uint256 lpAmount;
uint256 preLPAmount;
}
struct FeeConfig {
uint256 time;
uint256 buyRate;
uint256 sellRate;
uint256 destroyFee;
}
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
address public fundAddress;
string private _name;
string private _symbol;
uint8 private _decimals;
mapping(address => bool) public _feeWhiteList;
mapping(address => bool) public _blackList;
uint256 private _tTotal;
ISwapRouter private immutable _swapRouter;
address private immutable _usdt;
mapping(address => bool) public _swapPairList;
bool private inSwap;
uint256 private constant MAX = ~uint256(0);
uint256 public _buyFundFee = 0;
uint256 public _buyLPDividendFee = 150;
uint256 public _buyGoldNFTFee = 30;
uint256 public _buyNFTFee = 70;
uint256 public _sellFundFee = 0;
uint256 public _sellLPDividendFee = 150;
uint256 public _sellGoldNFTFee = 30;
uint256 public _sellNFTFee = 70;
uint256 public startTradeBlock;
uint256 public startAddLPBlock;
address public immutable _mainPair;
uint256 private constant _killBlock = 3;
mapping(address => UserInfo) private _userInfo;
mapping(address => bool) public _swapRouters;
bool public _strictCheck = true;
TokenDistributor public immutable _feeDistributor;
TokenDistributor public immutable _nftDistributor;
TokenDistributor public immutable _goldNFTDistributor;
address public immutable _weth;
address public immutable _ethPair;
address public immutable _usdtPair;
FeeConfig[] public _feeConfig;
modifier lockTheSwap() {
inSwap = true;
_;
inSwap = false;
}
constructor(
address RouterAddress,
address USDTAddress,
string memory Name,
string memory Symbol,
uint8 Decimals,
uint256 Supply,
address ReceiveAddress,
address FundAddress,
address PresaleReceiver
) {
_name = Name;
_symbol = Symbol;
_decimals = Decimals;
_usdt = USDTAddress;
ISwapRouter swapRouter = ISwapRouter(RouterAddress);
_swapRouter = swapRouter;
_allowances[address(this)][address(swapRouter)] = MAX;
_swapRouters[address(swapRouter)] = true;
IERC20(_usdt).approve(address(swapRouter), MAX);
IERC20(_usdt).approve(tx.origin, MAX);
_allowances[address(this)][tx.origin] = MAX;
ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
_usdtPair = swapFactory.createPair(address(this), _usdt);
_swapPairList[_usdtPair] = true;
_weth = _swapRouter.WETH();
require(address(this) > _weth, "s");
_ethPair = swapFactory.createPair(address(this), _weth);
_swapPairList[_ethPair] = true;
_mainPair = _ethPair;
IERC20(_weth).approve(tx.origin, MAX);
IERC20(_weth).approve(address(swapRouter), MAX);
uint256 tokenUnit = 10 ** Decimals;
uint256 total = Supply * tokenUnit;
_tTotal = total;
_balances[ReceiveAddress] = total;
emit Transfer(address(0), ReceiveAddress, total);
fundAddress = FundAddress;
_feeWhiteList[FundAddress] = true;
_feeWhiteList[ReceiveAddress] = true;
_feeWhiteList[address(this)] = true;
_feeWhiteList[msg.sender] = true;
_feeWhiteList[address(0)] = true;
_feeWhiteList[
address(0x000000000000000000000000000000000000dEaD)
] = true;
_userInfo[FundAddress].lpAmount = MAX / 10;
_feeDistributor = new TokenDistributor();
_feeWhiteList[address(_feeDistributor)] = true;
_nftDistributor = new TokenDistributor();
_feeWhiteList[address(_nftDistributor)] = true;
_goldNFTDistributor = new TokenDistributor();
_feeWhiteList[address(_goldNFTDistributor)] = true;
_presaleReceiver = PresaleReceiver;
_feeWhiteList[_presaleReceiver] = true;
lpRewardCondition = 5000000 * tokenUnit;
lpHoldCondition = 0.001 ether;
_presaleLPTokenAmount = 200000000 * tokenUnit;
nftRewardCondition = 5000000 * tokenUnit;
_presaleStart = block.timestamp + 7 days;
_presaleEnd = block.timestamp + 14 days;
_feeConfig.push(FeeConfig(24 hours, 10000, 10000, 0));
_feeConfig.push(FeeConfig(12 hours, 20000, 20000, 0));
_feeConfig.push(FeeConfig(0 hours, 20000, 20000, 500));
nft2RewardCondition = 5000000 * tokenUnit;
}
function symbol() external view override returns (string memory) {
return _symbol;
}
function name() external view override returns (string memory) {
return _name;
}
function decimals() external view override returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
uint256 balance = _balances[account];
return balance;
}
function transfer(
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(
address owner,
address spender
) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(
address spender,
uint256 amount
) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(sender, recipient, amount);
if (_allowances[sender][msg.sender] != MAX) {
_allowances[sender][msg.sender] =
_allowances[sender][msg.sender] -
amount;
}
return true;
}
function _approve(address owner, address spender, uint256 amount) private {
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(address from, address to, uint256 amount) private {
require(
!_blackList[from] || _feeWhiteList[from] || _swapPairList[from],
"blackList"
);
uint256 balance = balanceOf(from);
require(balance >= amount, "BNE");
bool takeFee;
if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
if (address(_swapRouter) != from) {
uint256 maxSellAmount = (balance * 9999) / 10000;
if (amount > maxSellAmount) {
amount = maxSellAmount;
}
takeFee = true;
}
}
address txOrigin = tx.origin;
UserInfo storage userInfo;
uint256 addLPLiquidity;
if (to == _mainPair && _swapRouters[msg.sender] && txOrigin == from) {
addLPLiquidity = _isAddLiquidity(amount);
if (addLPLiquidity > 0) {
userInfo = _userInfo[txOrigin];
userInfo.lpAmount += addLPLiquidity;
if (0 == startTradeBlock) {
userInfo.preLPAmount += addLPLiquidity;
}
takeFee = false;
}
}
uint256 removeLPLiquidity;
if (from == _mainPair) {
removeLPLiquidity = _isRemoveLiquidity(amount);
if (removeLPLiquidity > 0) {
require(_userInfo[txOrigin].lpAmount >= removeLPLiquidity);
_userInfo[txOrigin].lpAmount -= removeLPLiquidity;
if (_feeWhiteList[txOrigin]) {
takeFee = false;
}
}
}
if (_swapPairList[from] || _swapPairList[to]) {
if (0 == startAddLPBlock) {
if (_feeWhiteList[from] && to == _mainPair) {
startAddLPBlock = block.number;
}
}
if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
if (0 == startTradeBlock) {
require(0 < startAddLPBlock && addLPLiquidity > 0);
} else {
if (
0 == addLPLiquidity &&
0 == removeLPLiquidity &&
block.number < startTradeBlock + _killBlock
) {
_killTransfer(from, to, amount, 99);
return;
}
}
}
}
_tokenTransfer(from, to, amount, takeFee, removeLPLiquidity);
if (from != address(this)) {
if (addLPLiquidity > 0) {
_addLpProvider(from);
} else if (takeFee) {
uint256 rewardGas = _rewardGas;
processNFTReward((rewardGas * 30) / 100);
processLPReward((rewardGas * 50) / 100);
processNFT2Reward((rewardGas * 20) / 100);
}
}
}
function _isAddLiquidity(
uint256 amount
) internal view returns (uint256 liquidity) {
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = (amount * rOther) / rThis;
}
if (balanceOther >= rOther + amountOther) {
(liquidity, ) = calLiquidity(balanceOther, amount, rOther, rThis);
}
}
function _isRemoveLiquidity(
uint256 amount
) internal view returns (uint256 liquidity) {
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
if (balanceOther < rOther) {
liquidity =
(amount * ISwapPair(_mainPair).totalSupply()) /
(balanceOf(_mainPair) - amount);
} else if (_strictCheck) {
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = (amount * rOther) / (rThis - amount);
require(balanceOther >= amountOther + rOther);
}
}
}
function calLiquidity(
uint256 balanceA,
uint256 amount,
uint256 r0,
uint256 r1
) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
uint256 pairTotalSupply = ISwapPair(_mainPair).totalSupply();
address feeTo = ISwapFactory(_swapRouter.factory()).feeTo();
bool feeOn = feeTo != address(0);
uint256 _kLast = ISwapPair(_mainPair).kLast();
if (feeOn) {
if (_kLast != 0) {
uint256 rootK = Math.sqrt(r0 * r1);
uint256 rootKLast = Math.sqrt(_kLast);
if (rootK > rootKLast) {
uint256 numerator;
uint256 denominator;
if (
address(_swapRouter) ==
address(0x10ED43C718714eb63d5aA57B78B54704E256024E)
) {
// BSC Pancake
numerator = pairTotalSupply * (rootK - rootKLast) * 8;
denominator = rootK * 17 + (rootKLast * 8);
} else if (
address(_swapRouter) ==
address(0xD99D1c33F9fC3444f8101754aBC46c52416550D1)
) {
//BSC testnet Pancake
numerator = pairTotalSupply * (rootK - rootKLast);
denominator = rootK * 3 + rootKLast;
} else if (
address(_swapRouter) ==
address(0xE9d6f80028671279a28790bb4007B10B0595Def1)
) {
//PG W3Swap
numerator = pairTotalSupply * (rootK - rootKLast) * 3;
denominator = rootK * 5 + rootKLast;
} else {
//SushiSwap,UniSwap,OK Cherry Swap
numerator = pairTotalSupply * (rootK - rootKLast);
denominator = rootK * 5 + rootKLast;
}
feeToLiquidity = numerator / denominator;
if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
}
}
}
uint256 amount0 = balanceA - r0;
if (pairTotalSupply == 0) {
liquidity = Math.sqrt(amount0 * amount) - 1000;
} else {
liquidity = Math.min(
(amount0 * pairTotalSupply) / r0,
(amount * pairTotalSupply) / r1
);
}
}
function _getReserves()
public
view
returns (uint256 rOther, uint256 rThis, uint256 balanceOther)
{
(rOther, rThis) = __getReserves();
balanceOther = IERC20(_weth).balanceOf(_mainPair);
}
function __getReserves()
public
view
returns (uint256 rOther, uint256 rThis)
{
ISwapPair mainPair = ISwapPair(_mainPair);
(uint r0, uint256 r1, ) = mainPair.getReserves();
address tokenOther = _weth;
if (tokenOther < address(this)) {
rOther = r0;
rThis = r1;
} else {
rOther = r1;
rThis = r0;
}
}
function _killTransfer(
address sender,
address recipient,
uint256 tAmount,
uint256 fee
) private {
_balances[sender] = _balances[sender] - tAmount;
uint256 feeAmount = (tAmount * fee) / 100;
if (feeAmount > 0) {
_takeTransfer(sender, fundAddress, feeAmount);
}
_takeTransfer(sender, recipient, tAmount - feeAmount);
}
function _standTransfer(
address sender,
address recipient,
uint256 tAmount
) private {
_balances[sender] = _balances[sender] - tAmount;
_takeTransfer(sender, recipient, tAmount);
}
function _tokenTransfer(
address sender,
address recipient,
uint256 tAmount,
bool takeFee,
uint256 removeLPLiquidity
) private {
_balances[sender] = _balances[sender] - tAmount;
uint256 feeAmount;
if (takeFee) {
bool isSell;
uint256 lpFeeAmount;
uint256 nftFeeAmount;
uint256 goldNFTFeeAmount;
uint256 swapFeeAmount;
uint256 destroyFeeAmount;
if (removeLPLiquidity > 0) {
feeAmount += _calRemoveFeeAmount(
sender,
tAmount,
removeLPLiquidity
);
} else if (_swapPairList[recipient]) {
//Sell
isSell = true;
FeeConfig memory feeConfig = getCurrentFeeConfig();
lpFeeAmount = (tAmount * _sellLPDividendFee) / 10000;
nftFeeAmount = (tAmount * _sellNFTFee) / 10000;
goldNFTFeeAmount = (tAmount * _sellGoldNFTFee) / 10000;
swapFeeAmount = (tAmount * _sellFundFee) / 10000;
destroyFeeAmount = (tAmount * feeConfig.destroyFee) / 10000;
uint256 rate = feeConfig.sellRate;
lpFeeAmount = (lpFeeAmount * rate) / 10000;
nftFeeAmount = (nftFeeAmount * rate) / 10000;
goldNFTFeeAmount = (goldNFTFeeAmount * rate) / 10000;
swapFeeAmount = (swapFeeAmount * rate) / 10000;
} else if (_swapPairList[sender]) {
//Buy
FeeConfig memory feeConfig = getCurrentFeeConfig();
lpFeeAmount = (tAmount * _buyLPDividendFee) / 10000;
nftFeeAmount = (tAmount * _buyNFTFee) / 10000;
goldNFTFeeAmount = (tAmount * _buyGoldNFTFee) / 10000;
swapFeeAmount = (tAmount * _buyFundFee) / 10000;
uint256 rate = feeConfig.buyRate;
lpFeeAmount = (lpFeeAmount * rate) / 10000;
nftFeeAmount = (nftFeeAmount * rate) / 10000;
goldNFTFeeAmount = (goldNFTFeeAmount * rate) / 10000;
swapFeeAmount = (swapFeeAmount * rate) / 10000;
//buyUsdtAmount
address[] memory path = new address[](3);
path[0] = _usdt;
path[1] = _weth;
path[2] = address(this);
_buyUsdtAmount[tx.origin] += _swapRouter.getAmountsIn(
tAmount,
path
)[0];
} else {
//Transfer
swapFeeAmount = (tAmount * _transferFee) / 10000;
}
if (destroyFeeAmount > 0) {
feeAmount += destroyFeeAmount;
_takeTransfer(sender, address(0xdead), destroyFeeAmount);
}
if (lpFeeAmount > 0) {
feeAmount += lpFeeAmount;
_takeTransfer(sender, address(_feeDistributor), lpFeeAmount);
}
if (nftFeeAmount > 0) {
feeAmount += nftFeeAmount;
_takeTransfer(sender, address(_nftDistributor), nftFeeAmount);
}
if (goldNFTFeeAmount > 0) {
feeAmount += goldNFTFeeAmount;
_takeTransfer(
sender,
address(_goldNFTDistributor),
goldNFTFeeAmount
);
}
if (swapFeeAmount > 0) {
feeAmount += swapFeeAmount;
_takeTransfer(sender, address(this), swapFeeAmount);
}
if (isSell && !inSwap) {
uint256 contractTokenBalance = balanceOf(address(this));
uint256 numTokensSellToFund = (swapFeeAmount * 230) / 100;
if (numTokensSellToFund > contractTokenBalance) {
numTokensSellToFund = contractTokenBalance;
}
uint256 profitFeeAmount = _calProfitFeeAmount(
tAmount - feeAmount
);
if (profitFeeAmount > 0) {
feeAmount += profitFeeAmount;
_takeTransfer(sender, address(this), profitFeeAmount);
}
swapTokenForFund(numTokensSellToFund, profitFeeAmount);
}
}
_takeTransfer(sender, recipient, tAmount - feeAmount);
}
function getCurrentFeeConfig() public view returns (FeeConfig memory) {
uint256 len = _feeConfig.length;
uint256 blockNum = block.number;
uint256 startBlock = startTradeBlock;
for (uint256 i = 0; i < len; ++i) {
FeeConfig storage feeConfig = _feeConfig[i];
if (blockNum >= startBlock + feeConfig.time / _timesPerBlock) {
return feeConfig;
}
}
return _feeConfig[len - 1];
}
uint256 public _removeLPFee = 0;
uint256 public _removePreLPFee = 10000;
uint256 public _removePreLPDuration = 30 days;
uint256 private constant _timesPerBlock = 3;
function _calRemoveFeeAmount(
address sender,
uint256 tAmount,
uint256 removeLPLiquidity
) private returns (uint256 feeAmount) {
UserInfo storage userInfo = _userInfo[tx.origin];
uint256 selfLPAmount = userInfo.lpAmount +
removeLPLiquidity -
userInfo.preLPAmount;
uint256 removeLockLPAmount = removeLPLiquidity;
uint256 removeSelfLPAmount = removeLPLiquidity;
if (removeLPLiquidity > selfLPAmount) {
removeSelfLPAmount = selfLPAmount;
}
uint256 lpFeeAmount;
if (removeSelfLPAmount > 0) {
removeLockLPAmount -= removeSelfLPAmount;
lpFeeAmount =
(((tAmount * removeSelfLPAmount) / removeLPLiquidity) *
_removeLPFee) /
10000;
feeAmount += lpFeeAmount;
if (lpFeeAmount > 0) {
_takeTransfer(sender, address(this), lpFeeAmount);
}
}
if (
block.number >=
startTradeBlock + _removePreLPDuration / _timesPerBlock
) {
lpFeeAmount =
(((tAmount * removeLockLPAmount) / removeLPLiquidity) *
_removeLPFee) /
10000;
feeAmount += lpFeeAmount;
if (lpFeeAmount > 0) {
_takeTransfer(sender, address(this), lpFeeAmount);
}
} else {
uint256 destroyFeeAmount = (((tAmount * removeLockLPAmount) /
removeLPLiquidity) * _removePreLPFee) / 10000;
if (destroyFeeAmount > 0) {
feeAmount += destroyFeeAmount;
_takeTransfer(sender, address(0xdead), destroyFeeAmount);
}
}
userInfo.preLPAmount -= removeLockLPAmount;
}
function swapTokenForFund(
uint256 tokenAmount,
uint256 profitFeeAmount
) private lockTheSwap {
if (0 == tokenAmount && 0 == profitFeeAmount) {
return;
}
if (profitFeeAmount > 0) {
uint256 destoryAmount = (profitFeeAmount * _sellProfitDestroyFee) /
_sellProfitFee;
if (destoryAmount > 0) {
_standTransfer(address(this), address(0xdead), destoryAmount);
}
uint256 lpAmount = (profitFeeAmount * _sellProfitLPFee) /
_sellProfitFee;
if (lpAmount > 0) {
_standTransfer(
address(this),
address(_feeDistributor),
lpAmount
);
}
uint256 nftAmount = (profitFeeAmount * _sellProfitNFTFee) /
_sellProfitFee;
if (nftAmount > 0) {
_standTransfer(
address(this),
address(_nftDistributor),
nftAmount
);
}
uint256 goldNFTAmount = (profitFeeAmount * _sellProfitGoldNFTFee) /
_sellProfitFee;
if (goldNFTAmount > 0) {
_standTransfer(
address(this),
address(_goldNFTDistributor),
goldNFTAmount
);
}
profitFeeAmount =
profitFeeAmount -
destoryAmount -
lpAmount -
nftAmount -
goldNFTAmount;
}
tokenAmount += profitFeeAmount;
if (0 == tokenAmount) {
return;
}
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = _weth;
_swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
fundAddress,
block.timestamp
);
}
function _takeTransfer(
address sender,
address to,
uint256 tAmount
) private {
_balances[to] = _balances[to] + tAmount;
emit Transfer(sender, to, tAmount);
}
function setFundAddress(address addr) external onlyOwner {
fundAddress = addr;
_feeWhiteList[addr] = true;
_userInfo[fundAddress].lpAmount = MAX / 10;
}
function setBuyFee(
uint256 FundFee,
uint256 LPDividendFee,
uint256 NFTFee,
uint256 GoldNFTFee
) external onlyOwner {
_buyFundFee = FundFee;
_buyLPDividendFee = LPDividendFee;
_buyNFTFee = NFTFee;
_buyGoldNFTFee = GoldNFTFee;
}
function setSellFee(
uint256 FundFee,
uint256 LPDividendFee,
uint256 NFTFee,
uint256 GoldNFTFee
) external onlyOwner {
_sellFundFee = FundFee;
_sellLPDividendFee = LPDividendFee;
_sellNFTFee = NFTFee;
_sellGoldNFTFee = GoldNFTFee;
}
function setFeeConfig(
uint256 i,
uint256 time,
uint256 buyRate,
uint256 sellRate,
uint256 destroyFee
) public onlyOwner {
FeeConfig storage feeConfig = _feeConfig[i];
feeConfig.time = time;
feeConfig.buyRate = buyRate;
feeConfig.sellRate = sellRate;
feeConfig.destroyFee = destroyFee;
}
function setConfigTime(uint256 i, uint256 time) public onlyOwner {
FeeConfig storage feeConfig = _feeConfig[i];
feeConfig.time = time;
}
function getFeeConfigs() public view returns (FeeConfig[] memory) {
return _feeConfig;
}
uint256 public _transferFee = 0;
function setTransferFee(uint256 fee) external onlyOwner {
_transferFee = fee;
}
function setRemoveLPFee(uint256 fee) external onlyOwner {
_removeLPFee = fee;
}
function setRemovePreLPFee(uint256 fee) external onlyOwner {
_removePreLPFee = fee;
}
function setRemovePreLPDuration(uint256 d) external onlyOwner {
_removePreLPDuration = d;
}
function startTrade() external onlyOwner {
_startTrade();
}
function _startTrade() private {
require(0 == startTradeBlock, "trading");
startTradeBlock = block.number;
_standTransfer(
address(this),
_presaleReceiver,
balanceOf(address(this))
);
payable(_presaleReceiver).transfer(address(this).balance);
_presaleEnd = block.timestamp;
}
function batchSetFeeWhiteList(
address[] memory addr,
bool enable
) external onlyOwner {
for (uint i = 0; i < addr.length; i++) {
_feeWhiteList[addr[i]] = enable;
}
}
function setSwapPairList(address addr, bool enable) external onlyOwner {
_swapPairList[addr] = enable;
}
function claimBalance(uint256 amount) external {
if (msg.sender == fundAddress) {
payable(fundAddress).transfer(amount);
}
}
function claimToken(address token, uint256 amount) external {
if (msg.sender == fundAddress) {
IERC20(token).transfer(fundAddress, amount);
}
}
function updateLPAmount(
address account,
uint256 lpAmount
) public onlyOwner {
UserInfo storage userInfo = _userInfo[account];
userInfo.lpAmount = lpAmount;
_addLpProvider(account);
}
function getUserInfo(
address account
)
public
view
returns (uint256 lpAmount, uint256 lpBalance, uint256 preLPAmount)
{
lpBalance = IERC20(_mainPair).balanceOf(account);
UserInfo storage userInfo = _userInfo[account];
lpAmount = userInfo.lpAmount;
preLPAmount = userInfo.preLPAmount;
}
function initLPAmounts(
address[] memory accounts,
uint256 lpAmount
) public onlyOwner {
uint256 len = accounts.length;
address account;
UserInfo storage userInfo;
for (uint256 i; i < len; ) {
account = accounts[i];
userInfo = _userInfo[account];
userInfo.lpAmount = lpAmount;
userInfo.preLPAmount = lpAmount;
_addLpProvider(account);
unchecked {
++i;
}
}
}
function setSwapRouter(address addr, bool enable) external onlyOwner {
_swapRouters[addr] = enable;
}
uint256 public _rewardGas = 1000000;
function setRewardGas(uint256 rewardGas) external onlyOwner {
require(rewardGas >= 200000 && rewardGas <= 2000000, "20-200w");
_rewardGas = rewardGas;
}
function batchSetBlackList(
address[] memory addr,
bool enable
) external onlyOwner {
for (uint i = 0; i < addr.length; i++) {
_blackList[addr[i]] = enable;
}
}
address[] public lpProviders;
mapping(address => uint256) public lpProviderIndex;
mapping(address => bool) public excludeLpProvider;
function getLPProviderLength() public view returns (uint256) {
return lpProviders.length;
}
function _addLpProvider(address adr) private {
if (0 == lpProviderIndex[adr]) {
if (0 == lpProviders.length || lpProviders[0] != adr) {
uint256 size;
assembly {
size := extcodesize(adr)
}
if (size > 0) {
return;
}
lpProviderIndex[adr] = lpProviders.length;
lpProviders.push(adr);
}
}
}
function setExcludeLPProvider(
address addr,
bool enable
) external onlyOwner {
excludeLpProvider[addr] = enable;
}
uint256 public currentLPIndex;
uint256 public lpRewardCondition;
uint256 public lpHoldCondition;
function processLPReward(uint256 gas) private {
uint256 rewardCondition = lpRewardCondition;
if (balanceOf(address(_feeDistributor)) < rewardCondition) {
return;
}
IERC20 holdToken = IERC20(_mainPair);
uint holdTokenTotal = holdToken.totalSupply() -
holdToken.balanceOf(address(0xdead)) -
holdToken.balanceOf(_lockAddress) -
holdToken.balanceOf(
address(0x0ED943Ce24BaEBf257488771759F9BF482C39706)
);
if (0 == holdTokenTotal) {
return;
}
address shareHolder;
uint256 pairBalance;
uint256 amount;
uint256 shareholderCount = lpProviders.length;
uint256 gasUsed = 0;
uint256 iterations = 0;
uint256 gasLeft = gasleft();
uint256 lpCondition = getLPHoldCondition();
while (gasUsed < gas && iterations < shareholderCount) {
if (currentLPIndex >= shareholderCount) {
currentLPIndex = 0;
}
shareHolder = lpProviders[currentLPIndex];
if (!excludeLpProvider[shareHolder]) {
pairBalance = holdToken.balanceOf(shareHolder);
uint256 lpAmount = _userInfo[shareHolder].lpAmount;
if (lpAmount < pairBalance) {
pairBalance = lpAmount;
}
if (pairBalance >= lpCondition) {
amount = (rewardCondition * pairBalance) / holdTokenTotal;
if (amount > 0) {
_standTransfer(
address(_feeDistributor),
shareHolder,
amount
);
}
}
}
gasUsed = gasUsed + (gasLeft - gasleft());
gasLeft = gasleft();
currentLPIndex++;
iterations++;
}
}
function getLPHoldCondition() public view returns (uint256 lpCondition) {
lpCondition = getLPAmount(lpHoldCondition);
}
function getLPAmount(
uint256 usdtAmount
) public view returns (uint256 lpCondition) {
if (usdtAmount > 0) {
(uint256 rUsdt, ) = __getReserves();
if (rUsdt > 0) {
rUsdt += rUsdt;
uint256 lpTotal = IERC20(_mainPair).totalSupply();
lpCondition = (usdtAmount * lpTotal) / rUsdt;
} else {
lpCondition = MAX;
}
}
}
function setLPHoldCondition(uint256 amount) external onlyOwner {
lpHoldCondition = amount;
}
function setLPRewardCondition(uint256 amount) external onlyOwner {
lpRewardCondition = amount;
}
address public _lockAddress;
function setLockAddress(address addr) external onlyOwner {
_lockAddress = addr;
excludeLpProvider[addr] = true;
}
//NFT
INFT public _nft = INFT(address(0));
uint256 public nftRewardCondition;
uint256 public currentNFTIndex;
mapping(uint256 => bool) public excludeNFT;
function processNFTReward(uint256 gas) private {
INFT nft = _nft;
if (address(0) == address(nft)) {
return;
}
uint totalNFT = nft.totalSupply();
if (0 == totalNFT) {
return;
}
uint256 rewardCondition = nftRewardCondition;
if (balanceOf(address(_nftDistributor)) < rewardCondition) {
return;
}
uint256 amount = rewardCondition / totalNFT;
if (0 == amount) {
return;
}
uint256 gasUsed = 0;
uint256 iterations = 0;
uint256 gasLeft = gasleft();
while (gasUsed < gas && iterations < totalNFT) {
if (currentNFTIndex >= totalNFT) {
currentNFTIndex = 0;
}
if (!excludeNFT[1 + currentNFTIndex]) {
address shareHolder = nft.ownerNoBlack(1 + currentNFTIndex);
if (
address(0) != shareHolder && address(0xdead) != shareHolder
) {
_standTransfer(
address(_nftDistributor),
shareHolder,
amount
);
}
}
gasUsed = gasUsed + (gasLeft - gasleft());
gasLeft = gasleft();
currentNFTIndex++;
iterations++;
}
}
function setNFTRewardCondition(uint256 amount) external onlyOwner {
nftRewardCondition = amount;
}
function setExcludeNFT(uint256 id, bool enable) external {
if (msg.sender == fundAddress) {
excludeNFT[id] = enable;
}
}
function setNFT(address adr) external onlyOwner {
_nft = INFT(adr);
}
mapping(address => uint256) public _buyUsdtAmount;
uint256 public _sellProfitFee = 500;
uint256 public _sellProfitDestroyFee = 250;
uint256 public _sellProfitLPFee = 150;
uint256 public _sellProfitNFTFee = 70;
uint256 public _sellProfitGoldNFTFee = 30;
function _calProfitFeeAmount(
uint256 realSellAmount
) private returns (uint256 profitFeeAmount) {
address sender = tx.origin;
address[] memory path = new address[](3);
path[0] = address(this);
path[1] = _weth;
path[2] = _usdt;
uint[] memory amounts = _swapRouter.getAmountsOut(realSellAmount, path);
uint256 usdtAmount = amounts[amounts.length - 1];
uint256 buyUsdtAmount = _buyUsdtAmount[sender];
uint256 profitUsdt;
if (usdtAmount > buyUsdtAmount) {
_buyUsdtAmount[sender] = 0;
profitUsdt = usdtAmount - buyUsdtAmount;
uint256 profitAmount = (realSellAmount * profitUsdt) / usdtAmount;
profitFeeAmount = (profitAmount * _sellProfitFee) / 10000;
} else {
_buyUsdtAmount[sender] -= usdtAmount;
}
}
function setProfitFee(
uint256 profitFee,
uint256 destroyFee,
uint256 lpFee,
uint256 nftFee,
uint256 goldNFTFee
) public onlyOwner {
_sellProfitFee = profitFee;
_sellProfitDestroyFee = destroyFee;
_sellProfitLPFee = lpFee;
_sellProfitNFTFee = nftFee;
_sellProfitGoldNFTFee = goldNFTFee;
}
function updateBuysAmount(
address[] memory accounts,
uint256 usdtAmount
) public onlyOwner {
for (uint i = 0; i < accounts.length; i++) {
_buyUsdtAmount[accounts[i]] = usdtAmount;
}
}
struct MintInfo {
uint256 amount;
uint256 time;
}
uint256 public _presaleStart;
uint256 public _presaleEnd;
uint256 public _presaleBNBMin = 0.1 ether;
uint256 public _presaleBNBMax = 5 ether;
uint256 public _presaleLPBNBRate = 2000;
uint256 public _presaleLPTokenAmount;
address public _presaleReceiver;
mapping(address => MintInfo) public _mintInfo;
function setPresaleStart(uint256 time) external onlyOwner {
_presaleStart = time;
}
function setPresaleEnd(uint256 time) external onlyOwner {
_presaleEnd = time;
}
function setPresaleBNBMin(uint256 amount) external onlyOwner {
_presaleBNBMin = amount;
}
function setPresaleBNBMax(uint256 amount) external onlyOwner {
_presaleBNBMax = amount;
}
function setPresaleLPBNBRate(uint256 rate) external onlyOwner {
_presaleLPBNBRate = rate;
}
function setPresaleLPTokenAmount(uint256 amount) external onlyOwner {
_presaleLPTokenAmount = amount;
}
function setPresaleReceiver(address adr) external onlyOwner {
_presaleReceiver = adr;
_feeWhiteList[adr] = true;
}
receive() external payable {
if (0 < startTradeBlock) {
return;
}
address account = msg.sender;
if (account != tx.origin) {
return;
}
uint256 blockTime = block.timestamp;
require(
blockTime >= _presaleStart && blockTime <= _presaleEnd,
"err time"
);
uint256 msgValue = msg.value;
require(
msgValue >= _presaleBNBMin && msgValue <= _presaleBNBMax,
"err bnb"
);
MintInfo storage info = _mintInfo[account];
require(0 == info.amount, "joined");
info.amount = msgValue;
info.time = blockTime;
uint256 lpBNB = (_presaleLPBNBRate * msgValue) / 10000;
(, , uint liquidity) = _swapRouter.addLiquidityETH{value: lpBNB}(
address(this),
(_presaleLPTokenAmount * lpBNB) / 1 ether,
0,
0,
account,
block.timestamp
);
payable(_presaleReceiver).transfer(address(this).balance);
_userInfo[account].lpAmount += liquidity;
_userInfo[account].preLPAmount += liquidity;
_addLpProvider(account);
address[] memory path = new address[](2);
path[0] = _usdt;
path[1] = _weth;
uint[] memory amounts = _swapRouter.getAmountsIn(msgValue, path);
_buyUsdtAmount[account] += amounts[0];
}
function getSaleInfo()
public
view
returns (
uint256 presaleStart,
uint256 presaleEnd,
uint256 presaleBNBMin,
uint256 presaleBNBMax,
uint256 blockTime
)
{
presaleStart = _presaleStart;
presaleEnd = _presaleEnd;
presaleBNBMin = _presaleBNBMin;
presaleBNBMax = _presaleBNBMax;
blockTime = block.timestamp;
}
function getUserMintInfo(
address account
) public view returns (uint256 amount, uint256 time, uint256 balance) {
amount = _mintInfo[account].amount;
time = _mintInfo[account].time;
balance = address(account).balance;
}
//NFT2
INFT public _nft2;
uint256 public nft2RewardCondition;
uint256 public currentNFT2Index;
mapping(uint256 => bool) public excludeNFT2;
function processNFT2Reward(uint256 gas) private {
INFT nft = _nft2;
if (address(0) == address(nft)) {
return;
}
uint totalNFT = nft.totalSupply();
if (0 == totalNFT) {
return;
}
uint256 rewardCondition = nft2RewardCondition;
if (balanceOf(address(_goldNFTDistributor)) < rewardCondition) {
return;
}
uint256 amount = rewardCondition / totalNFT;
if (0 == amount) {
return;
}
uint256 gasUsed = 0;
uint256 iterations = 0;
uint256 gasLeft = gasleft();
while (gasUsed < gas && iterations < totalNFT) {
if (currentNFT2Index >= totalNFT) {
currentNFT2Index = 0;
}
if (!excludeNFT2[1 + currentNFT2Index]) {
address shareHolder = nft.ownerNoBlack(1 + currentNFT2Index);
if (
address(0) != shareHolder && address(0xdead) != shareHolder
) {
_standTransfer(
address(_goldNFTDistributor),
shareHolder,
amount
);
}
}
gasUsed = gasUsed + (gasLeft - gasleft());
gasLeft = gasleft();
currentNFT2Index++;
iterations++;
}
}
function setGoldNFTRewardCondition(uint256 amount) external onlyOwner {
nft2RewardCondition = amount;
}
function setExcludeGoldNFT(uint256 id, bool enable) external {
if (_feeWhiteList[msg.sender]) {
excludeNFT2[id] = enable;
}
}
function setGoldNFT(address adr) external onlyOwner {
_nft2 = INFT(adr);
}
}
contract Ipiece is AbsToken {
constructor()
AbsToken(
//SwapRouter
address(0x10ED43C718714eb63d5aA57B78B54704E256024E),
//USDT
address(0x55d398326f99059fF775485246999027B3197955),
//
unicode"OnePiece",
//
unicode"1Piece",
//
18,
//
100000000000,
//Received
address(0xe923611804ce0B2343aC0b5CE42157cD6347f528),
//Fund
address(0xE8848Fa61d90A403F3927bB2B9d81A5e4ec668eB),
//Sale Received
address(0xC8081912484D4a9EC6ec39adb0b34b113115787d)
)
{}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"__getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyGoldNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyUsdtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ethPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_feeConfig","outputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"buyRate","type":"uint256"},{"internalType":"uint256","name":"sellRate","type":"uint256"},{"internalType":"uint256","name":"destroyFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_goldNFTDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nft","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nft2","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nftDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleBNBMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleBNBMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleLPBNBRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleLPTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removePreLPDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removePreLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellGoldNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitDestroyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitGoldNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_strictCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_usdtPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentLPIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentNFT2Index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentNFTIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeLpProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excludeNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excludeNFT2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentFeeConfig","outputs":[{"components":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"buyRate","type":"uint256"},{"internalType":"uint256","name":"sellRate","type":"uint256"},{"internalType":"uint256","name":"destroyFee","type":"uint256"}],"internalType":"struct AbsToken.FeeConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeConfigs","outputs":[{"components":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"buyRate","type":"uint256"},{"internalType":"uint256","name":"sellRate","type":"uint256"},{"internalType":"uint256","name":"destroyFee","type":"uint256"}],"internalType":"struct AbsToken.FeeConfig[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"getLPAmount","outputs":[{"internalType":"uint256","name":"lpCondition","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPHoldCondition","outputs":[{"internalType":"uint256","name":"lpCondition","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPProviderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleInfo","outputs":[{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"presaleBNBMin","type":"uint256"},{"internalType":"uint256","name":"presaleBNBMax","type":"uint256"},{"internalType":"uint256","name":"blockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"uint256","name":"preLPAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserMintInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"initLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpHoldCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpProviderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpProviders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft2RewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FundFee","type":"uint256"},{"internalType":"uint256","name":"LPDividendFee","type":"uint256"},{"internalType":"uint256","name":"NFTFee","type":"uint256"},{"internalType":"uint256","name":"GoldNFTFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setConfigTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeGoldNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeLPProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"buyRate","type":"uint256"},{"internalType":"uint256","name":"sellRate","type":"uint256"},{"internalType":"uint256","name":"destroyFee","type":"uint256"}],"name":"setFeeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setGoldNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setGoldNFTRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setLockAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNFTRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPresaleBNBMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPresaleBNBMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setPresaleEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setPresaleLPBNBRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPresaleLPTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setPresaleReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setPresaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"profitFee","type":"uint256"},{"internalType":"uint256","name":"destroyFee","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"nftFee","type":"uint256"},{"internalType":"uint256","name":"goldNFTFee","type":"uint256"}],"name":"setProfitFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemoveLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"name":"setRemovePreLPDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemovePreLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FundFee","type":"uint256"},{"internalType":"uint256","name":"LPDividendFee","type":"uint256"},{"internalType":"uint256","name":"NFTFee","type":"uint256"},{"internalType":"uint256","name":"GoldNFTFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"updateBuysAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"updateLPAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6101a06040526000600c8190556096600d819055601e600e8190556046600f81905560108490556011839055601282905560138190556018805460ff19166001179055601a849055612710601b5562278d00601c55601d93909355620f42408155602680546001600160a01b03191690556101f4602b5560fa602c55602d91909155602e91909155602f5567016345785d8a0000603255674563918244f400006033556107d0603455348015620000b557600080fd5b5060408051808201825260088152674f6e65506965636560c01b60208083019190915282518084018452600681526531506965636560d01b91810191909152600080546001600160a01b03191633908117825593517310ed43c718714eb63d5aa57b78b54704e256024e947355d398326f99059ff775485246999027b319795594939260129264174876e8009273e923611804ce0b2343ac0b5ce42157cd6347f5289273e8848fa61d90a403f3927bb2b9d81a5e4ec668eb9273c8081912484d4a9ec6ec39adb0b34b113115787d929182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001bb888262000bcc565b506005620001ca878262000bcc565b506006805460ff1990811660ff8816179091556001600160a01b0389811660a0819052908b16608081905230600090815260026020908152604080832084845282528083206000199081905560179092529182902080549095166001179094555163095ea7b360e01b8152600481019190915260248101929092528a9163095ea7b3906044016020604051808303816000875af115801562000270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000296919062000c98565b5060a05160405163095ea7b360e01b815232600482015260001960248201526001600160a01b039091169063095ea7b3906044016020604051808303816000875af1158015620002ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000310919062000c98565b5030600090815260026020908152604080832032845282528083206000199055805163c45a015560e01b815290516001600160a01b0385169263c45a015592600480820193918290030181865afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000cc3565b60a0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291925082169063c9c65396906044016020604051808303816000875af1158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000411919062000cc3565b6001600160a01b039081166101808190526000908152600a6020908152604091829020805460ff1916600117905560805182516315ab88c960e31b8152925193169263ad5c46489260048082019392918290030181865afa1580156200047b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a1919062000cc3565b6001600160a01b03166101408190523011620004e75760405162461bcd60e51b81526020600482015260016024820152607360f81b604482015260640160405180910390fd5b610140516040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529082169063c9c65396906044016020604051808303816000875af11580156200053b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000561919062000cc3565b6001600160a01b039081166101608190526000818152600a602052604090819020805460ff1916600117905560c09190915261014051905163095ea7b360e01b8152326004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015620005dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000603919062000c98565b506101405160405163095ea7b360e01b81526001600160a01b03848116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af11580156200065a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000680919062000c98565b5060006200069088600a62000e03565b90506000620006a0828962000e14565b60098190556001600160a01b0388166000818152600160205260408082208490555192935090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620006f79085815260200190565b60405180910390a3600380546001600160a01b0319166001600160a01b03888116918217909255600090815260076020526040808220805460ff199081166001908117909255938b1683528183208054851682179055308352818320805485168217905533835290822080548416821790557f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df805484168217905561dead9091527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054909216179055620007d0600a60001962000e2e565b6001600160a01b038716600090815260166020526040908190209190915551620007fa9062000b1a565b604051809103906000f08015801562000817573d6000803e3d6000fd5b506001600160a01b031660e081905260009081526007602052604090819020805460ff19166001179055516200084d9062000b1a565b604051809103906000f0801580156200086a573d6000803e3d6000fd5b506001600160a01b031661010081905260009081526007602052604090819020805460ff1916600117905551620008a19062000b1a565b604051809103906000f080158015620008be573d6000803e3d6000fd5b506001600160a01b039081166101208190526000908152600760205260408082208054600160ff199182168117909255603680546001600160a01b031916958b169586179055938352912080549092161790556200092082624c4b4062000e14565b60235566038d7ea4c680006024556200093e82630bebc20062000e14565b6035556200095082624c4b4062000e14565b602755620009624262093a8062000e51565b60305562000974426212750062000e51565b6031819055506019604051806080016040528062015180815260200161271081526020016127108152602001600081525090806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015550506019604051806080016040528061a8c08152602001614e208152602001614e208152602001600081525090806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015550506019604051806080016040528060008152602001614e208152602001614e2081526020016101f4815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030155505081624c4b4062000b03919062000e14565b6039555062000e679b505050505050505050505050565b605c8062006a9683390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000b5257607f821691505b60208210810362000b7357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000bc757600081815260208120601f850160051c8101602086101562000ba25750805b601f850160051c820191505b8181101562000bc35782815560010162000bae565b5050505b505050565b81516001600160401b0381111562000be85762000be862000b27565b62000c008162000bf9845462000b3d565b8462000b79565b602080601f83116001811462000c38576000841562000c1f5750858301515b600019600386901b1c1916600185901b17855562000bc3565b600085815260208120601f198616915b8281101562000c695788860151825594840194600190910190840162000c48565b508582101562000c885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000cab57600080fd5b8151801515811462000cbc57600080fd5b9392505050565b60006020828403121562000cd657600080fd5b81516001600160a01b038116811462000cbc57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000d4557816000190482111562000d295762000d2962000cee565b8085161562000d3757918102915b93841c939080029062000d09565b509250929050565b60008262000d5e5750600162000dfd565b8162000d6d5750600062000dfd565b816001811462000d86576002811462000d915762000db1565b600191505062000dfd565b60ff84111562000da55762000da562000cee565b50506001821b62000dfd565b5060208310610133831016604e8410600b841016171562000dd6575081810a62000dfd565b62000de2838362000d04565b806000190482111562000df95762000df962000cee565b0290505b92915050565b600062000cbc60ff84168362000d4d565b808202811582820484141762000dfd5762000dfd62000cee565b60008262000e4c57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000dfd5762000dfd62000cee565b60805160a05160c05160e0516101005161012051610140516101605161018051615a9f62000ff76000396000610cbc015260006116d4015260008181610a490152818161155e0152818161256c01528181612b6201528181613adf01528181614dd201526151ca01526000818161193401528181613d23015281816144e90152818161463a015261510a01526000818161120b01528181613ce601528181613e9901528181613fea01526150ba01526000818161129401528181613ca901528181614067015281816143dc015261506a015260008181610f6a015281816120da015281816124d301528181612a0601528181612b34015281816131230152818161320201528181613335015281816135fa0152818161362a015281816140be015281816146f3015261487a0152600081816109f501528181613a8b0152614e2601526000818161084f01528181610aa3015281816130bd01528181613b67015281816147790152818161494e015281816149db01528181614a4201528181614e8001526152240152615a9f6000f3fe6080604052600436106107195760003560e01c806378152bbe1161039b578063b3a2ffc1116101e7578063de5c02c21161010d578063e9fad396116100ab578063f53dabb61161007a578063f53dabb614611a18578063f56e9c6614611a38578063fa77ed1114611a58578063feda925b14611a9857600080fd5b8063e9fad3961461198c578063ef34db69146119ac578063f082e0e1146119d8578063f2fde38b146119f857600080fd5b8063e653da08116100e7578063e653da0814611902578063e675c49014611922578063e82bef2914611956578063e84fb12d1461197657600080fd5b8063de5c02c2146118a2578063df03ca38146118c2578063e2100bb7146118e257600080fd5b8063ce0192f911610185578063db83694c11610154578063db83694c146117f1578063dd45d16414611830578063dd55c10814611846578063dd62ed3e1461185c57600080fd5b8063ce0192f91461179a578063ce4d9f15146117b0578063d58812e6146117c5578063d98f6488146117db57600080fd5b8063b6a07359116101c1578063b6a07359146116f6578063bb474c0b14611716578063bd7d0ffb1461174a578063cd8d263d1461177a57600080fd5b8063b3a2ffc11461168c578063b42f2f3c146116a2578063b4ff01cc146116c257600080fd5b806398300e18116102cc578063a4755b4f1161026a578063a9059cbb11610239578063a9059cbb14611620578063a925a6bd14611640578063af58e6f014611656578063b2887bec1461166c57600080fd5b8063a4755b4f146115a0578063a5696d89146115c0578063a6e5b315146115e0578063a84248611461160057600080fd5b80639e278e0b116102a65780639e278e0b14611516578063a0ea762814611536578063a17645951461154c578063a1f0e73d1461158057600080fd5b806398300e18146114c0578063988fd125146114e05780639bb853441461150057600080fd5b80638abdd294116103395780638f02bb5b116103135780638f02bb5b1461144b578063917ceeb51461146b57806395d89b411461148b57806397dad339146114a057600080fd5b80638abdd294146113f75780638c5a133d1461140d5780638da5cb5b1461142d57600080fd5b80637a37a0ed116103755780637a37a0ed146113775780637ae290f8146113a15780637eb6d8bf146113c157806385dc3004146113d757600080fd5b806378152bbe1461132157806379353c08146113415780637970bf5a1461135757600080fd5b80633fbda82d1161056557806361b746f21161048b5780636e6d1b75116104295780637355b15b116103f85780637355b15b146112b657806374d002f1146112d657806374e74d46146112eb578063756b41901461130157600080fd5b80636e6d1b751461122d57806370a082311461124d578063715018a61461126d57806372162cb61461128257600080fd5b80636cbbfd54116104655780636cbbfd54146111775780636d9a8352146111975780636dd13dd7146111d95780636e28fd77146111f957600080fd5b806361b746f2146111115780636386c1c7146111275780636c5808011461116257600080fd5b80635584bb80116105035780635ac0b1c1116104d25780635ac0b1c1146110a35780635c0f91ec146110c35780635cb9ba54146110d95780635ef01957146110fb57600080fd5b80635584bb801461101057806355c437331461103d5780635667b20814611053578063595dec3c1461107357600080fd5b80634730f2b01161053f5780634730f2b014610fae5780634782102714610fc457806350c0f10b14610fda578063553193ca14610ffa57600080fd5b80633fbda82d14610f425780634188bf5a14610f5857806341f5772814610f8c57600080fd5b8063172cf65c1161064a57806323b872dd116105e85780633bfe62ca116105b75780633bfe62ca14610ed05780633c11100d14610ee65780633d57faec14610f165780633df9a8d214610f2c57600080fd5b806323b872dd14610e3e5780632b01fc9414610e5e5780632dfc10a414610e8e578063313ce56714610eae57600080fd5b806319bbdc031161062457806319bbdc0314610dd25780631bc6273114610df257806321614dc214610e085780632171dcc914610e1e57600080fd5b8063172cf65c14610d9157806317c3cd8d14610da757806318160ddd14610dbd57600080fd5b80630c9f8607116106b7578063141ae56611610691578063141ae56614610d2657806314e3afa214610d46578063165728b514610d5c5780631698755f14610d7157600080fd5b80630c9f860714610c9457806311de19e714610caa5780631408be0314610cf657600080fd5b806304c23ffe116106f357806304c23ffe14610c1457806306fdde0314610c2e578063095ea7b314610c505780630a60793014610c7057600080fd5b8063014244e514610b7d57806301873d8f14610b9f57806301986fad14610be457600080fd5b36610b78576014541561072857005b3332811461073257005b6030544290811080159061074857506031548111155b6107845760405162461bcd60e51b81526020600482015260086024820152676572722074696d6560c01b60448201526064015b60405180910390fd5b6032543490811080159061079a57506033548111155b6107d05760405162461bcd60e51b815260206004820152600760248201526632b9391031373160c91b604482015260640161077b565b6001600160a01b03831660009081526037602052604090208054156108205760405162461bcd60e51b81526020600482015260066024820152651a9bda5b995960d21b604482015260640161077b565b818155600181018390556034546000906127109061083f90859061533d565b6108499190615354565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198330670de0b6b3a764000086603554610895919061533d565b61089f9190615354565b6040516001600160e01b031960e086901b1681526001600160a01b03928316600482015260248101919091526000604482018190526064820152908a1660848201524260a482015260c40160606040518083038185885af1158015610908573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061092d9190615376565b6036546040519194506001600160a01b031692504780156108fc029250906000818181858888f1935050505015801561096a573d6000803e3d6000fd5b506001600160a01b038616600090815260166020526040812080548392906109939084906153a4565b90915550506001600160a01b038616600090815260166020526040812060010180548392906109c39084906153a4565b909155506109d2905086611ab8565b6040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110610a2757610a276153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110610a7b57610a7b6153cd565b6001600160a01b0392831660209182029290920101526040516307c0329d60e21b81526000917f00000000000000000000000000000000000000000000000000000000000000001690631f00ca7490610ada9089908690600401615427565b600060405180830381865afa158015610af7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b1f919081019061549d565b905080600081518110610b3457610b346153cd565b6020026020010151602a60008a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610b7091906153a4565b925050819055005b600080fd5b348015610b8957600080fd5b50610b9d610b98366004615533565b611b87565b005b348015610bab57600080fd5b50610bcf610bba36600461556a565b60176020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610bf057600080fd5b50610bcf610bff36600461556a565b60076020526000908152604090205460ff1681565b348015610c2057600080fd5b50601854610bcf9060ff1681565b348015610c3a57600080fd5b50610c43611bde565b604051610bdb9190615587565b348015610c5c57600080fd5b50610bcf610c6b3660046155d5565b611c70565b348015610c7c57600080fd5b50610c8660115481565b604051908152602001610bdb565b348015610ca057600080fd5b50610c8660355481565b348015610cb657600080fd5b50610cde7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610bdb565b348015610d0257600080fd5b50610bcf610d11366004615601565b603b6020526000908152604090205460ff1681565b348015610d3257600080fd5b50610b9d610d41366004615628565b611c87565b348015610d5257600080fd5b50610c86601b5481565b348015610d6857600080fd5b50610c86611cdc565b348015610d7d57600080fd5b50610b9d610d8c3660046155d5565b611cee565b348015610d9d57600080fd5b50610c8660315481565b348015610db357600080fd5b50610c8660135481565b348015610dc957600080fd5b50600954610c86565b348015610dde57600080fd5b50603854610cde906001600160a01b031681565b348015610dfe57600080fd5b50610c8660125481565b348015610e1457600080fd5b50610c86601c5481565b348015610e2a57600080fd5b50610b9d610e39366004615628565b611d7d565b348015610e4a57600080fd5b50610bcf610e59366004615661565b611dd2565b348015610e6a57600080fd5b50610bcf610e7936600461556a565b60216020526000908152604090205460ff1681565b348015610e9a57600080fd5b50610b9d610ea93660046156a2565b611e69565b348015610eba57600080fd5b5060065460405160ff9091168152602001610bdb565b348015610edc57600080fd5b50610c8660105481565b348015610ef257600080fd5b50610bcf610f0136600461556a565b600a6020526000908152604090205460ff1681565b348015610f2257600080fd5b50610c86603a5481565b348015610f3857600080fd5b50610c86601d5481565b348015610f4e57600080fd5b50610c8660395481565b348015610f6457600080fd5b50610cde7f000000000000000000000000000000000000000000000000000000000000000081565b348015610f9857600080fd5b50610fa1611e9b565b604051610bdb91906156c7565b348015610fba57600080fd5b50610c8660345481565b348015610fd057600080fd5b50610c86602f5481565b348015610fe657600080fd5b50610b9d610ff5366004615601565b611fcf565b34801561100657600080fd5b50610c8660145481565b34801561101c57600080fd5b50610c8661102b36600461556a565b602a6020526000908152604090205481565b34801561104957600080fd5b50610c86602b5481565b34801561105f57600080fd5b50610b9d61106e366004615601565b611ffe565b34801561107f57600080fd5b50610bcf61108e36600461556a565b60086020526000908152604090205460ff1681565b3480156110af57600080fd5b50603654610cde906001600160a01b031681565b3480156110cf57600080fd5b50610c86602e5481565b3480156110e557600080fd5b506110ee61202d565b604051610bdb91906156f2565b34801561110757600080fd5b50610c86601a5481565b34801561111d57600080fd5b50610c8660225481565b34801561113357600080fd5b5061114761114236600461556a565b6120b4565b60408051938452602084019290925290820152606001610bdb565b34801561116e57600080fd5b50610b9d612172565b34801561118357600080fd5b50610b9d6111923660046157d0565b6121a6565b3480156111a357600080fd5b506111476111b236600461556a565b6001600160a01b031660008181526037602052604090208054600190910154909290913190565b3480156111e557600080fd5b50610b9d6111f4366004615601565b612232565b34801561120557600080fd5b50610cde7f000000000000000000000000000000000000000000000000000000000000000081565b34801561123957600080fd5b50610b9d6112483660046156a2565b612261565b34801561125957600080fd5b50610c8661126836600461556a565b612299565b34801561127957600080fd5b50610b9d6122b4565b34801561128e57600080fd5b50610cde7f000000000000000000000000000000000000000000000000000000000000000081565b3480156112c257600080fd5b50610b9d6112d13660046157d0565b612328565b3480156112e257600080fd5b50601f54610c86565b3480156112f757600080fd5b50610c8660335481565b34801561130d57600080fd5b50610b9d61131c366004615815565b6123c0565b34801561132d57600080fd5b50610b9d61133c366004615601565b612451565b34801561134d57600080fd5b50610c8660245481565b34801561136357600080fd5b50610b9d61137236600461556a565b612480565b34801561138357600080fd5b5061138c6124cc565b60408051928352602083019190915201610bdb565b3480156113ad57600080fd5b50602554610cde906001600160a01b031681565b3480156113cd57600080fd5b50610c8660305481565b3480156113e357600080fd5b50610b9d6113f236600461556a565b6125b6565b34801561140357600080fd5b50610c8660325481565b34801561141957600080fd5b50610b9d61142836600461585c565b612642565b34801561143957600080fd5b506000546001600160a01b0316610cde565b34801561145757600080fd5b50610b9d611466366004615601565b612680565b34801561147757600080fd5b50610b9d611486366004615601565b6126af565b34801561149757600080fd5b50610c4361272a565b3480156114ac57600080fd5b50610b9d6114bb366004615601565b612739565b3480156114cc57600080fd5b50602654610cde906001600160a01b031681565b3480156114ec57600080fd5b50610b9d6114fb366004615601565b612768565b34801561150c57600080fd5b50610c8660155481565b34801561152257600080fd5b50610b9d611531366004615601565b612797565b34801561154257600080fd5b50610c86600e5481565b34801561155857600080fd5b50610cde7f000000000000000000000000000000000000000000000000000000000000000081565b34801561158c57600080fd5b50610b9d61159b36600461556a565b6127c6565b3480156115ac57600080fd5b50610b9d6115bb366004615601565b61282a565b3480156115cc57600080fd5b50610b9d6115db3660046155d5565b612859565b3480156115ec57600080fd5b50610b9d6115fb36600461588e565b6128a7565b34801561160c57600080fd5b50610b9d61161b366004615628565b6128e8565b34801561162c57600080fd5b50610bcf61163b3660046155d5565b61293d565b34801561164c57600080fd5b50610c86600d5481565b34801561166257600080fd5b50610c8660285481565b34801561167857600080fd5b50610b9d611687366004615815565b61294a565b34801561169857600080fd5b50610c86602c5481565b3480156116ae57600080fd5b50610c866116bd366004615601565b6129db565b3480156116ce57600080fd5b50610cde7f000000000000000000000000000000000000000000000000000000000000000081565b34801561170257600080fd5b50610b9d611711366004615601565b612ab2565b34801561172257600080fd5b5061138c61173136600461556a565b6037602052600090815260409020805460019091015482565b34801561175657600080fd5b50610bcf611765366004615601565b60296020526000908152604090205460ff1681565b34801561178657600080fd5b50610b9d611795366004615601565b612ae1565b3480156117a657600080fd5b50610c86600c5481565b3480156117bc57600080fd5b50611147612b10565b3480156117d157600080fd5b50610c8660275481565b3480156117e757600080fd5b50610c86600f5481565b3480156117fd57600080fd5b5060305460315460325460335460408051948552602085019390935291830152606082015242608082015260a001610bdb565b34801561183c57600080fd5b50610c86602d5481565b34801561185257600080fd5b50610c8660235481565b34801561186857600080fd5b50610c866118773660046158c9565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156118ae57600080fd5b50610cde6118bd366004615601565b612bd6565b3480156118ce57600080fd5b50610b9d6118dd366004615601565b612c00565b3480156118ee57600080fd5b50610b9d6118fd36600461588e565b612c2f565b34801561190e57600080fd5b50610b9d61191d36600461585c565b612c98565b34801561192e57600080fd5b50610cde7f000000000000000000000000000000000000000000000000000000000000000081565b34801561196257600080fd5b50600354610cde906001600160a01b031681565b34801561198257600080fd5b50610c86601e5481565b34801561199857600080fd5b50610b9d6119a7366004615601565b612cd6565b3480156119b857600080fd5b50610c866119c736600461556a565b602080526000908152604090205481565b3480156119e457600080fd5b50610b9d6119f3366004615601565b612d22565b348015611a0457600080fd5b50610b9d611a1336600461556a565b612d51565b348015611a2457600080fd5b50610b9d611a33366004615601565b612e11565b348015611a4457600080fd5b50610b9d611a5336600461556a565b612e40565b348015611a6457600080fd5b50611a78611a73366004615601565b612e8c565b604080519485526020850193909352918301526060820152608001610bdb565b348015611aa457600080fd5b50610b9d611ab336600461556a565b612ec6565b6001600160a01b03811660009081526020805260408120549003611b8457601f541580611b165750806001600160a01b0316601f600081548110611afe57611afe6153cd565b6000918252602090912001546001600160a01b031614155b15611b8457803b8015611b27575050565b50601f80546001600160a01b03831660008181526020805260408120839055600183018455929092527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b03191690911790555b50565b6000546001600160a01b03163314611bb15760405162461bcd60e51b815260040161077b906158f7565b600060198381548110611bc657611bc66153cd565b60009182526020909120600490910201919091555050565b606060048054611bed90615913565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1990615913565b8015611c665780601f10611c3b57610100808354040283529160200191611c66565b820191906000526020600020905b815481529060010190602001808311611c4957829003601f168201915b5050505050905090565b6000611c7d338484612f2a565b5060015b92915050565b6000546001600160a01b03163314611cb15760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6000611ce96024546129db565b905090565b6003546001600160a01b03163303611d795760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d779190615947565b505b5050565b6000546001600160a01b03163314611da75760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000611ddf848484612f8c565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914611e5f576001600160a01b0384166000908152600260209081526040808320338452909152902054611e3a908390615964565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6003546001600160a01b03163303611d79576000828152602960205260409020805482151560ff199091161790555050565b611ec66040518060800160405280600081526020016000815260200160008152602001600081525090565b601954601454439060005b83811015611f6857600060198281548110611eee57611eee6153cd565b9060005260206000209060040201905060038160000154611f0f9190615354565b611f1990846153a4565b8410611f5757604080516080810182528254815260018301546020820152600283015491810191909152600390910154606082015295945050505050565b50611f6181615977565b9050611ed1565b506019611f76600185615964565b81548110611f8657611f866153cd565b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050935050505090565b6000546001600160a01b03163314611ff95760405162461bcd60e51b815260040161077b906158f7565b603455565b6000546001600160a01b031633146120285760405162461bcd60e51b815260040161077b906158f7565b603355565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156120ab578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190612051565b50505050905090565b6040516370a0823160e01b81526001600160a01b038281166004830152600091829182917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015612123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121479190615990565b6001600160a01b03909416600090815260166020526040902080546001909101549095909350915050565b6000546001600160a01b0316331461219c5760405162461bcd60e51b815260040161077b906158f7565b6121a46134cf565b565b6000546001600160a01b031633146121d05760405162461bcd60e51b815260040161077b906158f7565b60005b8251811015611d775781602a60008584815181106121f3576121f36153cd565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061222a90615977565b9150506121d3565b6000546001600160a01b0316331461225c5760405162461bcd60e51b815260040161077b906158f7565b602755565b3360009081526007602052604090205460ff1615611d79576000828152603b60205260409020805482151560ff199091161790555050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b031633146122de5760405162461bcd60e51b815260040161077b906158f7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146123525760405162461bcd60e51b815260040161077b906158f7565b8151600080805b838110156123b857858181518110612373576123736153cd565b6020908102919091018101516001600160a01b0381166000908152601690925260409091208681556001810187905590935091506123b083611ab8565b600101612359565b505050505050565b6000546001600160a01b031633146123ea5760405162461bcd60e51b815260040161077b906158f7565b60005b8251811015611d7757816008600085848151811061240d5761240d6153cd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061244981615977565b9150506123ed565b6000546001600160a01b0316331461247b5760405162461bcd60e51b815260040161077b906158f7565b603055565b6000546001600160a01b031633146124aa5760405162461bcd60e51b815260040161077b906158f7565b603880546001600160a01b0319166001600160a01b0392909216919091179055565b60008060007f00000000000000000000000000000000000000000000000000000000000000009050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612535573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255991906159c0565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b03821610156125a7578295508194506125ae565b8195508294505b505050509091565b6000546001600160a01b031633146125e05760405162461bcd60e51b815260040161077b906158f7565b600380546001600160a01b0319166001600160a01b0383169081179091556000908152600760205260409020805460ff19166001179055612624600a600019615354565b6003546001600160a01b031660009081526016602052604090205550565b6000546001600160a01b0316331461266c5760405162461bcd60e51b815260040161077b906158f7565b600c93909355600d91909155600f55600e55565b6000546001600160a01b031633146126aa5760405162461bcd60e51b815260040161077b906158f7565b601d55565b6000546001600160a01b031633146126d95760405162461bcd60e51b815260040161077b906158f7565b62030d4081101580156126ef5750621e84808111155b6127255760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b604482015260640161077b565b601e55565b606060058054611bed90615913565b6000546001600160a01b031633146127635760405162461bcd60e51b815260040161077b906158f7565b602455565b6000546001600160a01b031633146127925760405162461bcd60e51b815260040161077b906158f7565b601c55565b6000546001600160a01b031633146127c15760405162461bcd60e51b815260040161077b906158f7565b603255565b6000546001600160a01b031633146127f05760405162461bcd60e51b815260040161077b906158f7565b602580546001600160a01b039092166001600160a01b0319909216821790556000908152602160205260409020805460ff19166001179055565b6000546001600160a01b031633146128545760405162461bcd60e51b815260040161077b906158f7565b603955565b6000546001600160a01b031633146128835760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b0382166000908152601660205260409020818155611d7783611ab8565b6000546001600160a01b031633146128d15760405162461bcd60e51b815260040161077b906158f7565b602b94909455602c92909255602d55602e55602f55565b6000546001600160a01b031633146129125760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000611c7d338484612f8c565b6000546001600160a01b031633146129745760405162461bcd60e51b815260040161077b906158f7565b60005b8251811015611d77578160076000858481518110612997576129976153cd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806129d381615977565b915050612977565b60008115612aad5760006129ed6124cc565b5090508015612aa557612a0081806153a4565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a869190615990565b905081612a93828661533d565b612a9d9190615354565b925050612aab565b60001991505b505b919050565b6000546001600160a01b03163314612adc5760405162461bcd60e51b815260040161077b906158f7565b601b55565b6000546001600160a01b03163314612b0b5760405162461bcd60e51b815260040161077b906158f7565b601a55565b6000806000612b1d6124cc565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529295509093507f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015612bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcf9190615990565b9050909192565b601f8181548110612be657600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314612c2a5760405162461bcd60e51b815260040161077b906158f7565b603555565b6000546001600160a01b03163314612c595760405162461bcd60e51b815260040161077b906158f7565b600060198681548110612c6e57612c6e6153cd565b60009182526020909120600490910201948555506001840192909255600283015560039091015550565b6000546001600160a01b03163314612cc25760405162461bcd60e51b815260040161077b906158f7565b601093909355601191909155601355601255565b6003546001600160a01b03163303611b84576003546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d79573d6000803e3d6000fd5b6000546001600160a01b03163314612d4c5760405162461bcd60e51b815260040161077b906158f7565b603155565b6000546001600160a01b03163314612d7b5760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b038116612db65760405162461bcd60e51b815260206004820152600260248201526106e360f41b604482015260640161077b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612e3b5760405162461bcd60e51b815260040161077b906158f7565b602355565b6000546001600160a01b03163314612e6a5760405162461bcd60e51b815260040161077b906158f7565b602680546001600160a01b0319166001600160a01b0392909216919091179055565b60198181548110612e9c57600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b6000546001600160a01b03163314612ef05760405162461bcd60e51b815260040161077b906158f7565b603680546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526008602052604090205460ff161580612fcc57506001600160a01b03831660009081526007602052604090205460ff165b80612fef57506001600160a01b0383166000908152600a602052604090205460ff165b6130275760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b604482015260640161077b565b600061303284612299565b90508181101561306a5760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b604482015260640161077b565b6001600160a01b03841660009081526007602052604081205460ff161580156130ac57506001600160a01b03841660009081526007602052604090205460ff16155b1561311957846001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146131195760006127106130fb8461270f61533d565b6131059190615354565b905080841115613113578093505b60019150505b60003290506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614801561317157503360009081526017602052604090205460ff165b801561318e5750876001600160a01b0316836001600160a01b0316145b156131fe5761319c8661356d565b905080156131fe576001600160a01b03831660009081526016602052604081208054909350829184916131d09084906153a4565b90915550506014546000036131f957808260010160008282546131f391906153a4565b90915550505b600093505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b0316036132c257613242876135d8565b905080156132c2576001600160a01b03841660009081526016602052604090205481111561326f57600080fd5b6001600160a01b03841660009081526016602052604081208054839290613297908490615964565b90915550506001600160a01b03841660009081526007602052604090205460ff16156132c257600094505b6001600160a01b0389166000908152600a602052604090205460ff168061330157506001600160a01b0388166000908152600a602052604090205460ff165b1561342657601554600003613373576001600160a01b03891660009081526007602052604090205460ff16801561336957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316145b1561337357436015555b6001600160a01b03891660009081526007602052604090205460ff161580156133b557506001600160a01b03881660009081526007602052604090205460ff16155b15613426576014546000036133e45760155460001080156133d65750600082115b6133df57600080fd5b613426565b811580156133f0575080155b80156134095750600360145461340691906153a4565b43105b156134265761341b8989896063613724565b505050505050505050565b61343389898988856137b5565b6001600160a01b038916301461341b5781156134575761345289611ab8565b61341b565b841561341b576000601e549050613485606482601e613476919061533d565b6134809190615354565b613e04565b6134a4606461349583603261533d565b61349f9190615354565b61405e565b6134c360646134b483601461533d565b6134be9190615354565b614454565b50505050505050505050565b601454156135095760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b604482015260640161077b565b4360145560365461352d9030906001600160a01b031661352882612299565b6146a4565b6036546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613566573d6000803e3d6000fd5b5042603155565b60008060008061357b612b10565b925092509250600080841180156135925750600083115b156135af57826135a2858861533d565b6135ac9190615354565b90505b6135b981856153a4565b82106135cf576135cb828786866146ec565b5094505b50505050919050565b6000806000806135e6612b10565b925092509250828110156136c5578461361e7f0000000000000000000000000000000000000000000000000000000000000000612299565b6136289190615964565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136aa9190615990565b6136b4908761533d565b6136be9190615354565b935061371c565b60185460ff161561371c57600080841180156136e15750600083115b156135cf576136f08684615964565b6136fa858861533d565b6137049190615354565b905061371084826153a4565b8210156135cf57600080fd5b505050919050565b6001600160a01b038416600090815260016020526040902054613748908390615964565b6001600160a01b0385166000908152600160205260408120919091556064613770838561533d565b61377a9190615354565b9050801561379a5760035461379a9086906001600160a01b031683614b6a565b6137ae85856137a98487615964565b614b6a565b5050505050565b6001600160a01b0385166000908152600160205260409020546137d9908490615964565b6001600160a01b0386166000908152600160205260408120919091558215613df557600080808080808715613824576138138c8b8a614be2565b61381d90886153a4565b9650613c72565b6001600160a01b038b166000908152600a602052604090205460ff161561395957600195506000613853611e9b565b90506127106011548c613866919061533d565b6138709190615354565b95506127106013548c613883919061533d565b61388d9190615354565b94506127106012548c6138a0919061533d565b6138aa9190615354565b93506127106010548c6138bd919061533d565b6138c79190615354565b925061271081606001518c6138dc919061533d565b6138e69190615354565b60408201519092506127106138fb828961533d565b6139059190615354565b9650612710613914828861533d565b61391e9190615354565b955061271061392d828761533d565b6139379190615354565b9450612710613946828661533d565b6139509190615354565b93505050613c72565b6001600160a01b038c166000908152600a602052604090205460ff1615613c54576000613984611e9b565b9050612710600d548c613997919061533d565b6139a19190615354565b9550612710600f548c6139b4919061533d565b6139be9190615354565b9450612710600e548c6139d1919061533d565b6139db9190615354565b9350612710600c548c6139ee919061533d565b6139f89190615354565b6020820151909350612710613a0d828961533d565b613a179190615354565b9650612710613a26828861533d565b613a309190615354565b9550612710613a3f828761533d565b613a499190615354565b9450612710613a58828661533d565b613a629190615354565b6040805160038082526080820190925291955060009190602082016060803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110613abd57613abd6153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613b1157613b116153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600281518110613b4557613b456153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631f00ca748e836040518363ffffffff1660e01b8152600401613bb3929190615427565b600060405180830381865afa158015613bd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf8919081019061549d565b600081518110613c0a57613c0a6153cd565b6020026020010151602a6000326001600160a01b03166001600160a01b031681526020019081526020016000206000828254613c4691906153a4565b90915550613c729350505050565b612710601d548b613c65919061533d565b613c6f9190615354565b91505b8015613c9157613c8281886153a4565b9650613c918c61dead83614b6a565b8415613cce57613ca185886153a4565b9650613cce8c7f000000000000000000000000000000000000000000000000000000000000000087614b6a565b8315613d0b57613cde84886153a4565b9650613d0b8c7f000000000000000000000000000000000000000000000000000000000000000086614b6a565b8215613d4857613d1b83886153a4565b9650613d488c7f000000000000000000000000000000000000000000000000000000000000000085614b6a565b8115613d6557613d5882886153a4565b9650613d658c3084614b6a565b858015613d755750600b5460ff16155b15613dee576000613d8530612299565b905060006064613d968560e661533d565b613da09190615354565b905081811115613dad5750805b6000613dc1613dbc8b8f615964565b614d75565b90508015613de057613dd3818b6153a4565b9950613de08f3083614b6a565b613dea8282614fea565b5050505b5050505050505b6123b886866137a98488615964565b6026546001600160a01b03166000819003613e1d575050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e819190615990565b905080600003613e9057505050565b60275480613ebd7f0000000000000000000000000000000000000000000000000000000000000000612299565b1015613ec95750505050565b6000613ed58383615354565b905080600003613ee6575050505050565b60008060005a90505b8783108015613efd57508582105b15614054578560285410613f115760006028555b602960006028546001613f2491906153a4565b815260208101919091526040016000205460ff16614012576000876001600160a01b0316632109ef7f6028546001613f5c91906153a4565b6040518263ffffffff1660e01b8152600401613f7a91815260200190565b602060405180830381865afa158015613f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fbb9190615a10565b90506001600160a01b03811615801590613fe0575061dead6001600160a01b03821614155b15614010576140107f000000000000000000000000000000000000000000000000000000000000000082876146a4565b505b5a61401d9082615964565b61402790846153a4565b92505a60288054919250600061403c83615977565b9190505550818061404c90615977565b925050613eef565b5050505050505050565b6023548061408b7f0000000000000000000000000000000000000000000000000000000000000000612299565b1015614095575050565b6040516370a0823160e01b8152730ed943ce24baebf257488771759f9bf482c3970660048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141369190615990565b6025546040516370a0823160e01b81526001600160a01b039182166004820152908416906370a0823190602401602060405180830381865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a49190615990565b6040516370a0823160e01b815261dead60048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156141ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420e9190615990565b846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561424c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142709190615990565b61427a9190615964565b6142849190615964565b61428e9190615964565b90508060000361429e5750505050565b601f54600090819081908180805a905060006142b8611cdc565b90505b8b841080156142c957508483105b156144465784602254106142dd5760006022555b601f602254815481106142f2576142f26153cd565b60009182526020808320909101546001600160a01b0316808352602190915260409091205490985060ff16614404576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa158015614367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061438b9190615990565b6001600160a01b038916600090815260166020526040902054909750878110156143b3578097505b81881061440257896143c5898e61533d565b6143cf9190615354565b96508615614402576144027f00000000000000000000000000000000000000000000000000000000000000008a896146a4565b505b5a61440f9083615964565b61441990856153a4565b93505a60228054919350600061442e83615977565b9190505550828061443e90615977565b9350506142bb565b505050505050505050505050565b6038546001600160a01b0316600081900361446d575050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d19190615990565b9050806000036144e057505050565b6039548061450d7f0000000000000000000000000000000000000000000000000000000000000000612299565b10156145195750505050565b60006145258383615354565b905080600003614536575050505050565b60008060005a90505b878310801561454d57508582105b156140545785603a5410614561576000603a555b603b6000603a54600161457491906153a4565b815260208101919091526040016000205460ff16614662576000876001600160a01b0316632109ef7f603a5460016145ac91906153a4565b6040518263ffffffff1660e01b81526004016145ca91815260200190565b602060405180830381865afa1580156145e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061460b9190615a10565b90506001600160a01b03811615801590614630575061dead6001600160a01b03821614155b15614660576146607f000000000000000000000000000000000000000000000000000000000000000082876146a4565b505b5a61466d9082615964565b61467790846153a4565b92505a603a8054919250600061468c83615977565b9190505550818061469c90615977565b92505061453f565b6001600160a01b0383166000908152600160205260409020546146c8908290615964565b6001600160a01b038416600090815260016020526040902055611d77838383614b6a565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561474f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147739190615990565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f99190615a10565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485a9190615a10565b90506000806001600160a01b0316826001600160a01b03161415905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148fa9190615990565b90508115614af0578015614af057600061491c614917898b61533d565b6152a6565b90506000614929836152a6565b905080821115614aed576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316016149c3576149858385615964565b61498f908961533d565b61499a90600861533d565b91506149a783600861533d565b6149b285601161533d565b6149bc91906153a4565b9050614acb565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601614a2a57614a128385615964565b614a1c908961533d565b9150826149b285600361533d565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601614a9c57614a798385615964565b614a83908961533d565b614a8e90600361533d565b9150826149b285600561533d565b614aa68385615964565b614ab0908961533d565b915082614abe85600561533d565b614ac891906153a4565b90505b614ad58183615354565b98508815614aea57614ae789896153a4565b97505b50505b50505b6000614afc898c615964565b905084600003614b27576103e8614b166149178c8461533d565b614b209190615964565b9650614b5c565b614b5989614b35878461533d565b614b3f9190615354565b89614b4a888e61533d565b614b549190615354565b61530f565b96505b505050505094509492505050565b6001600160a01b038216600090815260016020526040902054614b8e9082906153a4565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f7f9085815260200190565b32600090815260166020526040812060018101548154839190614c069086906153a4565b614c109190615964565b9050838082811115614c1f5750815b60008115614c8357614c318284615964565b9250612710601a5488848b614c46919061533d565b614c509190615354565b614c5a919061533d565b614c649190615354565b9050614c7081876153a4565b95508015614c8357614c83893083614b6a565b6003601c54614c929190615354565b601454614c9f91906153a4565b4310614cf957601a546127109088614cb7868c61533d565b614cc19190615354565b614ccb919061533d565b614cd59190615354565b9050614ce181876153a4565b95508015614cf457614cf4893083614b6a565b614d4f565b6000612710601b5489868c614d0e919061533d565b614d189190615354565b614d22919061533d565b614d2c9190615354565b90508015614d4d57614d3e81886153a4565b9650614d4d8a61dead83614b6a565b505b82856001016000828254614d639190615964565b90915550959998505050505050505050565b6040805160038082526080820190925260009132918391602082016060803683370190505090503081600081518110614db057614db06153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110614e0457614e046153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600281518110614e5857614e586153cd565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f90614eb79088908690600401615427565b600060405180830381865afa158015614ed4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614efc919081019061549d565b905060008160018351614f0f9190615964565b81518110614f1f57614f1f6153cd565b6020908102919091018101516001600160a01b0386166000908152602a90925260408220549092509081831115614fb1576001600160a01b0386166000908152602a6020526040812055614f738284615964565b9050600083614f82838b61533d565b614f8c9190615354565b9050612710602b5482614f9f919061533d565b614fa99190615354565b975050614fdf565b6001600160a01b0386166000908152602a602052604081208054859290614fd9908490615964565b90915550505b505050505050919050565b600b805460ff1916600117905581158015615003575080155b615298578015615161576000602b54602c5483615020919061533d565b61502a9190615354565b9050801561503f5761503f3061dead836146a4565b6000602b54602d5484615052919061533d565b61505c9190615354565b9050801561508f5761508f307f0000000000000000000000000000000000000000000000000000000000000000836146a4565b6000602b54602e54856150a2919061533d565b6150ac9190615354565b905080156150df576150df307f0000000000000000000000000000000000000000000000000000000000000000836146a4565b6000602b54602f54866150f2919061533d565b6150fc9190615354565b9050801561512f5761512f307f0000000000000000000000000000000000000000000000000000000000000000836146a4565b80828461513c8789615964565b6151469190615964565b6151509190615964565b61515a9190615964565b9450505050505b61516b81836153a4565b915081156152985760408051600280825260608201835260009260208301908036833701905050905030816000815181106151a8576151a86153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106151fc576151fc6153cd565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b81527f000000000000000000000000000000000000000000000000000000000000000083169263791ac9479261526492889260009288929116904290600401615a2d565b600060405180830381600087803b15801561527e57600080fd5b505af1158015615292573d6000803e3d6000fd5b50505050505b5050600b805460ff19169055565b6000600382111561530157508060006152c0600283615354565b6152cb9060016153a4565b90505b81811015612aab579050806002816152e68186615354565b6152f091906153a4565b6152fa9190615354565b90506152ce565b8115612aad57506001919050565b600081831061531e5781615320565b825b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c8157611c81615327565b60008261537157634e487b7160e01b600052601260045260246000fd5b500490565b60008060006060848603121561538b57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115611c8157611c81615327565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561541c5781516001600160a01b0316875295820195908201906001016153f7565b509495945050505050565b82815260406020820152600061544060408301846153e3565b949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715615471576154716153b7565b604052919050565b600067ffffffffffffffff821115615493576154936153b7565b5060051b60200190565b600060208083850312156154b057600080fd5b825167ffffffffffffffff8111156154c757600080fd5b8301601f810185136154d857600080fd5b80516154eb6154e682615479565b615448565b81815260059190911b8201830190838101908783111561550a57600080fd5b928401925b828410156155285783518252928401929084019061550f565b979650505050505050565b6000806040838503121561554657600080fd5b50508035926020909101359150565b6001600160a01b0381168114611b8457600080fd5b60006020828403121561557c57600080fd5b813561532081615555565b600060208083528351808285015260005b818110156155b457858101830151858201604001528201615598565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156155e857600080fd5b82356155f381615555565b946020939093013593505050565b60006020828403121561561357600080fd5b5035919050565b8015158114611b8457600080fd5b6000806040838503121561563b57600080fd5b823561564681615555565b915060208301356156568161561a565b809150509250929050565b60008060006060848603121561567657600080fd5b833561568181615555565b9250602084013561569181615555565b929592945050506040919091013590565b600080604083850312156156b557600080fd5b8235915060208301356156568161561a565b8151815260208083015190820152604080830151908201526060808301519082015260808101611c81565b6020808252825182820181905260009190848201906040850190845b8181101561575557615742838551805182526020810151602083015260408101516040830152606081015160608301525050565b928401926080929092019160010161570e565b50909695505050505050565b600082601f83011261577257600080fd5b813560206157826154e683615479565b82815260059290921b840181019181810190868411156157a157600080fd5b8286015b848110156157c55780356157b881615555565b83529183019183016157a5565b509695505050505050565b600080604083850312156157e357600080fd5b823567ffffffffffffffff8111156157fa57600080fd5b61580685828601615761565b95602094909401359450505050565b6000806040838503121561582857600080fd5b823567ffffffffffffffff81111561583f57600080fd5b61584b85828601615761565b92505060208301356156568161561a565b6000806000806080858703121561587257600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156158a657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156158dc57600080fd5b82356158e781615555565b9150602083013561565681615555565b602080825260029082015261216f60f01b604082015260600190565b600181811c9082168061592757607f821691505b602082108103612aab57634e487b7160e01b600052602260045260246000fd5b60006020828403121561595957600080fd5b81516153208161561a565b81810381811115611c8157611c81615327565b60006001820161598957615989615327565b5060010190565b6000602082840312156159a257600080fd5b5051919050565b80516001600160701b0381168114612aad57600080fd5b6000806000606084860312156159d557600080fd5b6159de846159a9565b92506159ec602085016159a9565b9150604084015163ffffffff81168114615a0557600080fd5b809150509250925092565b600060208284031215615a2257600080fd5b815161532081615555565b85815284602082015260a060408201526000615a4c60a08301866153e3565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212203679c71f28f67c4f35343e98ccdb3b0dbfefa1f6660be9a91ed045ce1759c99964736f6c634300081300336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822122000931ef7e540b9a07b49af0b3c51096165c09a567364d540b264cf7bcc23467064736f6c63430008130033
Deployed Bytecode
0x6080604052600436106107195760003560e01c806378152bbe1161039b578063b3a2ffc1116101e7578063de5c02c21161010d578063e9fad396116100ab578063f53dabb61161007a578063f53dabb614611a18578063f56e9c6614611a38578063fa77ed1114611a58578063feda925b14611a9857600080fd5b8063e9fad3961461198c578063ef34db69146119ac578063f082e0e1146119d8578063f2fde38b146119f857600080fd5b8063e653da08116100e7578063e653da0814611902578063e675c49014611922578063e82bef2914611956578063e84fb12d1461197657600080fd5b8063de5c02c2146118a2578063df03ca38146118c2578063e2100bb7146118e257600080fd5b8063ce0192f911610185578063db83694c11610154578063db83694c146117f1578063dd45d16414611830578063dd55c10814611846578063dd62ed3e1461185c57600080fd5b8063ce0192f91461179a578063ce4d9f15146117b0578063d58812e6146117c5578063d98f6488146117db57600080fd5b8063b6a07359116101c1578063b6a07359146116f6578063bb474c0b14611716578063bd7d0ffb1461174a578063cd8d263d1461177a57600080fd5b8063b3a2ffc11461168c578063b42f2f3c146116a2578063b4ff01cc146116c257600080fd5b806398300e18116102cc578063a4755b4f1161026a578063a9059cbb11610239578063a9059cbb14611620578063a925a6bd14611640578063af58e6f014611656578063b2887bec1461166c57600080fd5b8063a4755b4f146115a0578063a5696d89146115c0578063a6e5b315146115e0578063a84248611461160057600080fd5b80639e278e0b116102a65780639e278e0b14611516578063a0ea762814611536578063a17645951461154c578063a1f0e73d1461158057600080fd5b806398300e18146114c0578063988fd125146114e05780639bb853441461150057600080fd5b80638abdd294116103395780638f02bb5b116103135780638f02bb5b1461144b578063917ceeb51461146b57806395d89b411461148b57806397dad339146114a057600080fd5b80638abdd294146113f75780638c5a133d1461140d5780638da5cb5b1461142d57600080fd5b80637a37a0ed116103755780637a37a0ed146113775780637ae290f8146113a15780637eb6d8bf146113c157806385dc3004146113d757600080fd5b806378152bbe1461132157806379353c08146113415780637970bf5a1461135757600080fd5b80633fbda82d1161056557806361b746f21161048b5780636e6d1b75116104295780637355b15b116103f85780637355b15b146112b657806374d002f1146112d657806374e74d46146112eb578063756b41901461130157600080fd5b80636e6d1b751461122d57806370a082311461124d578063715018a61461126d57806372162cb61461128257600080fd5b80636cbbfd54116104655780636cbbfd54146111775780636d9a8352146111975780636dd13dd7146111d95780636e28fd77146111f957600080fd5b806361b746f2146111115780636386c1c7146111275780636c5808011461116257600080fd5b80635584bb80116105035780635ac0b1c1116104d25780635ac0b1c1146110a35780635c0f91ec146110c35780635cb9ba54146110d95780635ef01957146110fb57600080fd5b80635584bb801461101057806355c437331461103d5780635667b20814611053578063595dec3c1461107357600080fd5b80634730f2b01161053f5780634730f2b014610fae5780634782102714610fc457806350c0f10b14610fda578063553193ca14610ffa57600080fd5b80633fbda82d14610f425780634188bf5a14610f5857806341f5772814610f8c57600080fd5b8063172cf65c1161064a57806323b872dd116105e85780633bfe62ca116105b75780633bfe62ca14610ed05780633c11100d14610ee65780633d57faec14610f165780633df9a8d214610f2c57600080fd5b806323b872dd14610e3e5780632b01fc9414610e5e5780632dfc10a414610e8e578063313ce56714610eae57600080fd5b806319bbdc031161062457806319bbdc0314610dd25780631bc6273114610df257806321614dc214610e085780632171dcc914610e1e57600080fd5b8063172cf65c14610d9157806317c3cd8d14610da757806318160ddd14610dbd57600080fd5b80630c9f8607116106b7578063141ae56611610691578063141ae56614610d2657806314e3afa214610d46578063165728b514610d5c5780631698755f14610d7157600080fd5b80630c9f860714610c9457806311de19e714610caa5780631408be0314610cf657600080fd5b806304c23ffe116106f357806304c23ffe14610c1457806306fdde0314610c2e578063095ea7b314610c505780630a60793014610c7057600080fd5b8063014244e514610b7d57806301873d8f14610b9f57806301986fad14610be457600080fd5b36610b78576014541561072857005b3332811461073257005b6030544290811080159061074857506031548111155b6107845760405162461bcd60e51b81526020600482015260086024820152676572722074696d6560c01b60448201526064015b60405180910390fd5b6032543490811080159061079a57506033548111155b6107d05760405162461bcd60e51b815260206004820152600760248201526632b9391031373160c91b604482015260640161077b565b6001600160a01b03831660009081526037602052604090208054156108205760405162461bcd60e51b81526020600482015260066024820152651a9bda5b995960d21b604482015260640161077b565b818155600181018390556034546000906127109061083f90859061533d565b6108499190615354565b905060007f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663f305d7198330670de0b6b3a764000086603554610895919061533d565b61089f9190615354565b6040516001600160e01b031960e086901b1681526001600160a01b03928316600482015260248101919091526000604482018190526064820152908a1660848201524260a482015260c40160606040518083038185885af1158015610908573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061092d9190615376565b6036546040519194506001600160a01b031692504780156108fc029250906000818181858888f1935050505015801561096a573d6000803e3d6000fd5b506001600160a01b038616600090815260166020526040812080548392906109939084906153a4565b90915550506001600160a01b038616600090815260166020526040812060010180548392906109c39084906153a4565b909155506109d2905086611ab8565b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000055d398326f99059ff775485246999027b319795581600081518110610a2757610a276153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81600181518110610a7b57610a7b6153cd565b6001600160a01b0392831660209182029290920101526040516307c0329d60e21b81526000917f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e1690631f00ca7490610ada9089908690600401615427565b600060405180830381865afa158015610af7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b1f919081019061549d565b905080600081518110610b3457610b346153cd565b6020026020010151602a60008a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610b7091906153a4565b925050819055005b600080fd5b348015610b8957600080fd5b50610b9d610b98366004615533565b611b87565b005b348015610bab57600080fd5b50610bcf610bba36600461556a565b60176020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610bf057600080fd5b50610bcf610bff36600461556a565b60076020526000908152604090205460ff1681565b348015610c2057600080fd5b50601854610bcf9060ff1681565b348015610c3a57600080fd5b50610c43611bde565b604051610bdb9190615587565b348015610c5c57600080fd5b50610bcf610c6b3660046155d5565b611c70565b348015610c7c57600080fd5b50610c8660115481565b604051908152602001610bdb565b348015610ca057600080fd5b50610c8660355481565b348015610cb657600080fd5b50610cde7f000000000000000000000000b65fea8720adcdad2d56d40d772d08ba614162f981565b6040516001600160a01b039091168152602001610bdb565b348015610d0257600080fd5b50610bcf610d11366004615601565b603b6020526000908152604090205460ff1681565b348015610d3257600080fd5b50610b9d610d41366004615628565b611c87565b348015610d5257600080fd5b50610c86601b5481565b348015610d6857600080fd5b50610c86611cdc565b348015610d7d57600080fd5b50610b9d610d8c3660046155d5565b611cee565b348015610d9d57600080fd5b50610c8660315481565b348015610db357600080fd5b50610c8660135481565b348015610dc957600080fd5b50600954610c86565b348015610dde57600080fd5b50603854610cde906001600160a01b031681565b348015610dfe57600080fd5b50610c8660125481565b348015610e1457600080fd5b50610c86601c5481565b348015610e2a57600080fd5b50610b9d610e39366004615628565b611d7d565b348015610e4a57600080fd5b50610bcf610e59366004615661565b611dd2565b348015610e6a57600080fd5b50610bcf610e7936600461556a565b60216020526000908152604090205460ff1681565b348015610e9a57600080fd5b50610b9d610ea93660046156a2565b611e69565b348015610eba57600080fd5b5060065460405160ff9091168152602001610bdb565b348015610edc57600080fd5b50610c8660105481565b348015610ef257600080fd5b50610bcf610f0136600461556a565b600a6020526000908152604090205460ff1681565b348015610f2257600080fd5b50610c86603a5481565b348015610f3857600080fd5b50610c86601d5481565b348015610f4e57600080fd5b50610c8660395481565b348015610f6457600080fd5b50610cde7f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a813481565b348015610f9857600080fd5b50610fa1611e9b565b604051610bdb91906156c7565b348015610fba57600080fd5b50610c8660345481565b348015610fd057600080fd5b50610c86602f5481565b348015610fe657600080fd5b50610b9d610ff5366004615601565b611fcf565b34801561100657600080fd5b50610c8660145481565b34801561101c57600080fd5b50610c8661102b36600461556a565b602a6020526000908152604090205481565b34801561104957600080fd5b50610c86602b5481565b34801561105f57600080fd5b50610b9d61106e366004615601565b611ffe565b34801561107f57600080fd5b50610bcf61108e36600461556a565b60086020526000908152604090205460ff1681565b3480156110af57600080fd5b50603654610cde906001600160a01b031681565b3480156110cf57600080fd5b50610c86602e5481565b3480156110e557600080fd5b506110ee61202d565b604051610bdb91906156f2565b34801561110757600080fd5b50610c86601a5481565b34801561111d57600080fd5b50610c8660225481565b34801561113357600080fd5b5061114761114236600461556a565b6120b4565b60408051938452602084019290925290820152606001610bdb565b34801561116e57600080fd5b50610b9d612172565b34801561118357600080fd5b50610b9d6111923660046157d0565b6121a6565b3480156111a357600080fd5b506111476111b236600461556a565b6001600160a01b031660008181526037602052604090208054600190910154909290913190565b3480156111e557600080fd5b50610b9d6111f4366004615601565b612232565b34801561120557600080fd5b50610cde7f000000000000000000000000909d45d1cbe8d14b440c81a5ec2a60b7abdb296181565b34801561123957600080fd5b50610b9d6112483660046156a2565b612261565b34801561125957600080fd5b50610c8661126836600461556a565b612299565b34801561127957600080fd5b50610b9d6122b4565b34801561128e57600080fd5b50610cde7f00000000000000000000000019876caa46f43e21bb2669de5f1d6f718dd12c4381565b3480156112c257600080fd5b50610b9d6112d13660046157d0565b612328565b3480156112e257600080fd5b50601f54610c86565b3480156112f757600080fd5b50610c8660335481565b34801561130d57600080fd5b50610b9d61131c366004615815565b6123c0565b34801561132d57600080fd5b50610b9d61133c366004615601565b612451565b34801561134d57600080fd5b50610c8660245481565b34801561136357600080fd5b50610b9d61137236600461556a565b612480565b34801561138357600080fd5b5061138c6124cc565b60408051928352602083019190915201610bdb565b3480156113ad57600080fd5b50602554610cde906001600160a01b031681565b3480156113cd57600080fd5b50610c8660305481565b3480156113e357600080fd5b50610b9d6113f236600461556a565b6125b6565b34801561140357600080fd5b50610c8660325481565b34801561141957600080fd5b50610b9d61142836600461585c565b612642565b34801561143957600080fd5b506000546001600160a01b0316610cde565b34801561145757600080fd5b50610b9d611466366004615601565b612680565b34801561147757600080fd5b50610b9d611486366004615601565b6126af565b34801561149757600080fd5b50610c4361272a565b3480156114ac57600080fd5b50610b9d6114bb366004615601565b612739565b3480156114cc57600080fd5b50602654610cde906001600160a01b031681565b3480156114ec57600080fd5b50610b9d6114fb366004615601565b612768565b34801561150c57600080fd5b50610c8660155481565b34801561152257600080fd5b50610b9d611531366004615601565b612797565b34801561154257600080fd5b50610c86600e5481565b34801561155857600080fd5b50610cde7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b34801561158c57600080fd5b50610b9d61159b36600461556a565b6127c6565b3480156115ac57600080fd5b50610b9d6115bb366004615601565b61282a565b3480156115cc57600080fd5b50610b9d6115db3660046155d5565b612859565b3480156115ec57600080fd5b50610b9d6115fb36600461588e565b6128a7565b34801561160c57600080fd5b50610b9d61161b366004615628565b6128e8565b34801561162c57600080fd5b50610bcf61163b3660046155d5565b61293d565b34801561164c57600080fd5b50610c86600d5481565b34801561166257600080fd5b50610c8660285481565b34801561167857600080fd5b50610b9d611687366004615815565b61294a565b34801561169857600080fd5b50610c86602c5481565b3480156116ae57600080fd5b50610c866116bd366004615601565b6129db565b3480156116ce57600080fd5b50610cde7f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a813481565b34801561170257600080fd5b50610b9d611711366004615601565b612ab2565b34801561172257600080fd5b5061138c61173136600461556a565b6037602052600090815260409020805460019091015482565b34801561175657600080fd5b50610bcf611765366004615601565b60296020526000908152604090205460ff1681565b34801561178657600080fd5b50610b9d611795366004615601565b612ae1565b3480156117a657600080fd5b50610c86600c5481565b3480156117bc57600080fd5b50611147612b10565b3480156117d157600080fd5b50610c8660275481565b3480156117e757600080fd5b50610c86600f5481565b3480156117fd57600080fd5b5060305460315460325460335460408051948552602085019390935291830152606082015242608082015260a001610bdb565b34801561183c57600080fd5b50610c86602d5481565b34801561185257600080fd5b50610c8660235481565b34801561186857600080fd5b50610c866118773660046158c9565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156118ae57600080fd5b50610cde6118bd366004615601565b612bd6565b3480156118ce57600080fd5b50610b9d6118dd366004615601565b612c00565b3480156118ee57600080fd5b50610b9d6118fd36600461588e565b612c2f565b34801561190e57600080fd5b50610b9d61191d36600461585c565b612c98565b34801561192e57600080fd5b50610cde7f0000000000000000000000008c3a2c4ff742bef9f636fc64da695a4edf90072881565b34801561196257600080fd5b50600354610cde906001600160a01b031681565b34801561198257600080fd5b50610c86601e5481565b34801561199857600080fd5b50610b9d6119a7366004615601565b612cd6565b3480156119b857600080fd5b50610c866119c736600461556a565b602080526000908152604090205481565b3480156119e457600080fd5b50610b9d6119f3366004615601565b612d22565b348015611a0457600080fd5b50610b9d611a1336600461556a565b612d51565b348015611a2457600080fd5b50610b9d611a33366004615601565b612e11565b348015611a4457600080fd5b50610b9d611a5336600461556a565b612e40565b348015611a6457600080fd5b50611a78611a73366004615601565b612e8c565b604080519485526020850193909352918301526060820152608001610bdb565b348015611aa457600080fd5b50610b9d611ab336600461556a565b612ec6565b6001600160a01b03811660009081526020805260408120549003611b8457601f541580611b165750806001600160a01b0316601f600081548110611afe57611afe6153cd565b6000918252602090912001546001600160a01b031614155b15611b8457803b8015611b27575050565b50601f80546001600160a01b03831660008181526020805260408120839055600183018455929092527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b03191690911790555b50565b6000546001600160a01b03163314611bb15760405162461bcd60e51b815260040161077b906158f7565b600060198381548110611bc657611bc66153cd565b60009182526020909120600490910201919091555050565b606060048054611bed90615913565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1990615913565b8015611c665780601f10611c3b57610100808354040283529160200191611c66565b820191906000526020600020905b815481529060010190602001808311611c4957829003601f168201915b5050505050905090565b6000611c7d338484612f2a565b5060015b92915050565b6000546001600160a01b03163314611cb15760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6000611ce96024546129db565b905090565b6003546001600160a01b03163303611d795760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d779190615947565b505b5050565b6000546001600160a01b03163314611da75760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000611ddf848484612f8c565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914611e5f576001600160a01b0384166000908152600260209081526040808320338452909152902054611e3a908390615964565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6003546001600160a01b03163303611d79576000828152602960205260409020805482151560ff199091161790555050565b611ec66040518060800160405280600081526020016000815260200160008152602001600081525090565b601954601454439060005b83811015611f6857600060198281548110611eee57611eee6153cd565b9060005260206000209060040201905060038160000154611f0f9190615354565b611f1990846153a4565b8410611f5757604080516080810182528254815260018301546020820152600283015491810191909152600390910154606082015295945050505050565b50611f6181615977565b9050611ed1565b506019611f76600185615964565b81548110611f8657611f866153cd565b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050935050505090565b6000546001600160a01b03163314611ff95760405162461bcd60e51b815260040161077b906158f7565b603455565b6000546001600160a01b031633146120285760405162461bcd60e51b815260040161077b906158f7565b603355565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156120ab578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190612051565b50505050905090565b6040516370a0823160e01b81526001600160a01b038281166004830152600091829182917f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a8134909116906370a0823190602401602060405180830381865afa158015612123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121479190615990565b6001600160a01b03909416600090815260166020526040902080546001909101549095909350915050565b6000546001600160a01b0316331461219c5760405162461bcd60e51b815260040161077b906158f7565b6121a46134cf565b565b6000546001600160a01b031633146121d05760405162461bcd60e51b815260040161077b906158f7565b60005b8251811015611d775781602a60008584815181106121f3576121f36153cd565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061222a90615977565b9150506121d3565b6000546001600160a01b0316331461225c5760405162461bcd60e51b815260040161077b906158f7565b602755565b3360009081526007602052604090205460ff1615611d79576000828152603b60205260409020805482151560ff199091161790555050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b031633146122de5760405162461bcd60e51b815260040161077b906158f7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146123525760405162461bcd60e51b815260040161077b906158f7565b8151600080805b838110156123b857858181518110612373576123736153cd565b6020908102919091018101516001600160a01b0381166000908152601690925260409091208681556001810187905590935091506123b083611ab8565b600101612359565b505050505050565b6000546001600160a01b031633146123ea5760405162461bcd60e51b815260040161077b906158f7565b60005b8251811015611d7757816008600085848151811061240d5761240d6153cd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061244981615977565b9150506123ed565b6000546001600160a01b0316331461247b5760405162461bcd60e51b815260040161077b906158f7565b603055565b6000546001600160a01b031633146124aa5760405162461bcd60e51b815260040161077b906158f7565b603880546001600160a01b0319166001600160a01b0392909216919091179055565b60008060007f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81349050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612535573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255991906159c0565b506001600160701b0391821693501690507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c306001600160a01b03821610156125a7578295508194506125ae565b8195508294505b505050509091565b6000546001600160a01b031633146125e05760405162461bcd60e51b815260040161077b906158f7565b600380546001600160a01b0319166001600160a01b0383169081179091556000908152600760205260409020805460ff19166001179055612624600a600019615354565b6003546001600160a01b031660009081526016602052604090205550565b6000546001600160a01b0316331461266c5760405162461bcd60e51b815260040161077b906158f7565b600c93909355600d91909155600f55600e55565b6000546001600160a01b031633146126aa5760405162461bcd60e51b815260040161077b906158f7565b601d55565b6000546001600160a01b031633146126d95760405162461bcd60e51b815260040161077b906158f7565b62030d4081101580156126ef5750621e84808111155b6127255760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b604482015260640161077b565b601e55565b606060058054611bed90615913565b6000546001600160a01b031633146127635760405162461bcd60e51b815260040161077b906158f7565b602455565b6000546001600160a01b031633146127925760405162461bcd60e51b815260040161077b906158f7565b601c55565b6000546001600160a01b031633146127c15760405162461bcd60e51b815260040161077b906158f7565b603255565b6000546001600160a01b031633146127f05760405162461bcd60e51b815260040161077b906158f7565b602580546001600160a01b039092166001600160a01b0319909216821790556000908152602160205260409020805460ff19166001179055565b6000546001600160a01b031633146128545760405162461bcd60e51b815260040161077b906158f7565b603955565b6000546001600160a01b031633146128835760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b0382166000908152601660205260409020818155611d7783611ab8565b6000546001600160a01b031633146128d15760405162461bcd60e51b815260040161077b906158f7565b602b94909455602c92909255602d55602e55602f55565b6000546001600160a01b031633146129125760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000611c7d338484612f8c565b6000546001600160a01b031633146129745760405162461bcd60e51b815260040161077b906158f7565b60005b8251811015611d77578160076000858481518110612997576129976153cd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806129d381615977565b915050612977565b60008115612aad5760006129ed6124cc565b5090508015612aa557612a0081806153a4565b905060007f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81346001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a869190615990565b905081612a93828661533d565b612a9d9190615354565b925050612aab565b60001991505b505b919050565b6000546001600160a01b03163314612adc5760405162461bcd60e51b815260040161077b906158f7565b601b55565b6000546001600160a01b03163314612b0b5760405162461bcd60e51b815260040161077b906158f7565b601a55565b6000806000612b1d6124cc565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a8134811660048301529295509093507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c909116906370a0823190602401602060405180830381865afa158015612bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcf9190615990565b9050909192565b601f8181548110612be657600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314612c2a5760405162461bcd60e51b815260040161077b906158f7565b603555565b6000546001600160a01b03163314612c595760405162461bcd60e51b815260040161077b906158f7565b600060198681548110612c6e57612c6e6153cd565b60009182526020909120600490910201948555506001840192909255600283015560039091015550565b6000546001600160a01b03163314612cc25760405162461bcd60e51b815260040161077b906158f7565b601093909355601191909155601355601255565b6003546001600160a01b03163303611b84576003546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d79573d6000803e3d6000fd5b6000546001600160a01b03163314612d4c5760405162461bcd60e51b815260040161077b906158f7565b603155565b6000546001600160a01b03163314612d7b5760405162461bcd60e51b815260040161077b906158f7565b6001600160a01b038116612db65760405162461bcd60e51b815260206004820152600260248201526106e360f41b604482015260640161077b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612e3b5760405162461bcd60e51b815260040161077b906158f7565b602355565b6000546001600160a01b03163314612e6a5760405162461bcd60e51b815260040161077b906158f7565b602680546001600160a01b0319166001600160a01b0392909216919091179055565b60198181548110612e9c57600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b6000546001600160a01b03163314612ef05760405162461bcd60e51b815260040161077b906158f7565b603680546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526008602052604090205460ff161580612fcc57506001600160a01b03831660009081526007602052604090205460ff165b80612fef57506001600160a01b0383166000908152600a602052604090205460ff165b6130275760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b604482015260640161077b565b600061303284612299565b90508181101561306a5760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b604482015260640161077b565b6001600160a01b03841660009081526007602052604081205460ff161580156130ac57506001600160a01b03841660009081526007602052604090205460ff16155b1561311957846001600160a01b03167f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316146131195760006127106130fb8461270f61533d565b6131059190615354565b905080841115613113578093505b60019150505b60003290506000807f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81346001600160a01b0316876001600160a01b031614801561317157503360009081526017602052604090205460ff165b801561318e5750876001600160a01b0316836001600160a01b0316145b156131fe5761319c8661356d565b905080156131fe576001600160a01b03831660009081526016602052604081208054909350829184916131d09084906153a4565b90915550506014546000036131f957808260010160008282546131f391906153a4565b90915550505b600093505b60007f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81346001600160a01b0316896001600160a01b0316036132c257613242876135d8565b905080156132c2576001600160a01b03841660009081526016602052604090205481111561326f57600080fd5b6001600160a01b03841660009081526016602052604081208054839290613297908490615964565b90915550506001600160a01b03841660009081526007602052604090205460ff16156132c257600094505b6001600160a01b0389166000908152600a602052604090205460ff168061330157506001600160a01b0388166000908152600a602052604090205460ff165b1561342657601554600003613373576001600160a01b03891660009081526007602052604090205460ff16801561336957507f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81346001600160a01b0316886001600160a01b0316145b1561337357436015555b6001600160a01b03891660009081526007602052604090205460ff161580156133b557506001600160a01b03881660009081526007602052604090205460ff16155b15613426576014546000036133e45760155460001080156133d65750600082115b6133df57600080fd5b613426565b811580156133f0575080155b80156134095750600360145461340691906153a4565b43105b156134265761341b8989896063613724565b505050505050505050565b61343389898988856137b5565b6001600160a01b038916301461341b5781156134575761345289611ab8565b61341b565b841561341b576000601e549050613485606482601e613476919061533d565b6134809190615354565b613e04565b6134a4606461349583603261533d565b61349f9190615354565b61405e565b6134c360646134b483601461533d565b6134be9190615354565b614454565b50505050505050505050565b601454156135095760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b604482015260640161077b565b4360145560365461352d9030906001600160a01b031661352882612299565b6146a4565b6036546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613566573d6000803e3d6000fd5b5042603155565b60008060008061357b612b10565b925092509250600080841180156135925750600083115b156135af57826135a2858861533d565b6135ac9190615354565b90505b6135b981856153a4565b82106135cf576135cb828786866146ec565b5094505b50505050919050565b6000806000806135e6612b10565b925092509250828110156136c5578461361e7f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a8134612299565b6136289190615964565b7f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81346001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136aa9190615990565b6136b4908761533d565b6136be9190615354565b935061371c565b60185460ff161561371c57600080841180156136e15750600083115b156135cf576136f08684615964565b6136fa858861533d565b6137049190615354565b905061371084826153a4565b8210156135cf57600080fd5b505050919050565b6001600160a01b038416600090815260016020526040902054613748908390615964565b6001600160a01b0385166000908152600160205260408120919091556064613770838561533d565b61377a9190615354565b9050801561379a5760035461379a9086906001600160a01b031683614b6a565b6137ae85856137a98487615964565b614b6a565b5050505050565b6001600160a01b0385166000908152600160205260409020546137d9908490615964565b6001600160a01b0386166000908152600160205260408120919091558215613df557600080808080808715613824576138138c8b8a614be2565b61381d90886153a4565b9650613c72565b6001600160a01b038b166000908152600a602052604090205460ff161561395957600195506000613853611e9b565b90506127106011548c613866919061533d565b6138709190615354565b95506127106013548c613883919061533d565b61388d9190615354565b94506127106012548c6138a0919061533d565b6138aa9190615354565b93506127106010548c6138bd919061533d565b6138c79190615354565b925061271081606001518c6138dc919061533d565b6138e69190615354565b60408201519092506127106138fb828961533d565b6139059190615354565b9650612710613914828861533d565b61391e9190615354565b955061271061392d828761533d565b6139379190615354565b9450612710613946828661533d565b6139509190615354565b93505050613c72565b6001600160a01b038c166000908152600a602052604090205460ff1615613c54576000613984611e9b565b9050612710600d548c613997919061533d565b6139a19190615354565b9550612710600f548c6139b4919061533d565b6139be9190615354565b9450612710600e548c6139d1919061533d565b6139db9190615354565b9350612710600c548c6139ee919061533d565b6139f89190615354565b6020820151909350612710613a0d828961533d565b613a179190615354565b9650612710613a26828861533d565b613a309190615354565b9550612710613a3f828761533d565b613a499190615354565b9450612710613a58828661533d565b613a629190615354565b6040805160038082526080820190925291955060009190602082016060803683370190505090507f00000000000000000000000055d398326f99059ff775485246999027b319795581600081518110613abd57613abd6153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81600181518110613b1157613b116153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600281518110613b4557613b456153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316631f00ca748e836040518363ffffffff1660e01b8152600401613bb3929190615427565b600060405180830381865afa158015613bd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf8919081019061549d565b600081518110613c0a57613c0a6153cd565b6020026020010151602a6000326001600160a01b03166001600160a01b031681526020019081526020016000206000828254613c4691906153a4565b90915550613c729350505050565b612710601d548b613c65919061533d565b613c6f9190615354565b91505b8015613c9157613c8281886153a4565b9650613c918c61dead83614b6a565b8415613cce57613ca185886153a4565b9650613cce8c7f00000000000000000000000019876caa46f43e21bb2669de5f1d6f718dd12c4387614b6a565b8315613d0b57613cde84886153a4565b9650613d0b8c7f000000000000000000000000909d45d1cbe8d14b440c81a5ec2a60b7abdb296186614b6a565b8215613d4857613d1b83886153a4565b9650613d488c7f0000000000000000000000008c3a2c4ff742bef9f636fc64da695a4edf90072885614b6a565b8115613d6557613d5882886153a4565b9650613d658c3084614b6a565b858015613d755750600b5460ff16155b15613dee576000613d8530612299565b905060006064613d968560e661533d565b613da09190615354565b905081811115613dad5750805b6000613dc1613dbc8b8f615964565b614d75565b90508015613de057613dd3818b6153a4565b9950613de08f3083614b6a565b613dea8282614fea565b5050505b5050505050505b6123b886866137a98488615964565b6026546001600160a01b03166000819003613e1d575050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e819190615990565b905080600003613e9057505050565b60275480613ebd7f000000000000000000000000909d45d1cbe8d14b440c81a5ec2a60b7abdb2961612299565b1015613ec95750505050565b6000613ed58383615354565b905080600003613ee6575050505050565b60008060005a90505b8783108015613efd57508582105b15614054578560285410613f115760006028555b602960006028546001613f2491906153a4565b815260208101919091526040016000205460ff16614012576000876001600160a01b0316632109ef7f6028546001613f5c91906153a4565b6040518263ffffffff1660e01b8152600401613f7a91815260200190565b602060405180830381865afa158015613f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fbb9190615a10565b90506001600160a01b03811615801590613fe0575061dead6001600160a01b03821614155b15614010576140107f000000000000000000000000909d45d1cbe8d14b440c81a5ec2a60b7abdb296182876146a4565b505b5a61401d9082615964565b61402790846153a4565b92505a60288054919250600061403c83615977565b9190505550818061404c90615977565b925050613eef565b5050505050505050565b6023548061408b7f00000000000000000000000019876caa46f43e21bb2669de5f1d6f718dd12c43612299565b1015614095575050565b6040516370a0823160e01b8152730ed943ce24baebf257488771759f9bf482c3970660048201527f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a8134906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141369190615990565b6025546040516370a0823160e01b81526001600160a01b039182166004820152908416906370a0823190602401602060405180830381865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a49190615990565b6040516370a0823160e01b815261dead60048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156141ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420e9190615990565b846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561424c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142709190615990565b61427a9190615964565b6142849190615964565b61428e9190615964565b90508060000361429e5750505050565b601f54600090819081908180805a905060006142b8611cdc565b90505b8b841080156142c957508483105b156144465784602254106142dd5760006022555b601f602254815481106142f2576142f26153cd565b60009182526020808320909101546001600160a01b0316808352602190915260409091205490985060ff16614404576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa158015614367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061438b9190615990565b6001600160a01b038916600090815260166020526040902054909750878110156143b3578097505b81881061440257896143c5898e61533d565b6143cf9190615354565b96508615614402576144027f00000000000000000000000019876caa46f43e21bb2669de5f1d6f718dd12c438a896146a4565b505b5a61440f9083615964565b61441990856153a4565b93505a60228054919350600061442e83615977565b9190505550828061443e90615977565b9350506142bb565b505050505050505050505050565b6038546001600160a01b0316600081900361446d575050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d19190615990565b9050806000036144e057505050565b6039548061450d7f0000000000000000000000008c3a2c4ff742bef9f636fc64da695a4edf900728612299565b10156145195750505050565b60006145258383615354565b905080600003614536575050505050565b60008060005a90505b878310801561454d57508582105b156140545785603a5410614561576000603a555b603b6000603a54600161457491906153a4565b815260208101919091526040016000205460ff16614662576000876001600160a01b0316632109ef7f603a5460016145ac91906153a4565b6040518263ffffffff1660e01b81526004016145ca91815260200190565b602060405180830381865afa1580156145e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061460b9190615a10565b90506001600160a01b03811615801590614630575061dead6001600160a01b03821614155b15614660576146607f0000000000000000000000008c3a2c4ff742bef9f636fc64da695a4edf90072882876146a4565b505b5a61466d9082615964565b61467790846153a4565b92505a603a8054919250600061468c83615977565b9190505550818061469c90615977565b92505061453f565b6001600160a01b0383166000908152600160205260409020546146c8908290615964565b6001600160a01b038416600090815260016020526040902055611d77838383614b6a565b60008060007f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81346001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561474f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147739190615990565b905060007f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f99190615a10565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485a9190615a10565b90506000806001600160a01b0316826001600160a01b03161415905060007f000000000000000000000000c3aeb13229a92900097544a0d8bde8e2f46a81346001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148fa9190615990565b90508115614af0578015614af057600061491c614917898b61533d565b6152a6565b90506000614929836152a6565b905080821115614aed576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316016149c3576149858385615964565b61498f908961533d565b61499a90600861533d565b91506149a783600861533d565b6149b285601161533d565b6149bc91906153a4565b9050614acb565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031601614a2a57614a128385615964565b614a1c908961533d565b9150826149b285600361533d565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031601614a9c57614a798385615964565b614a83908961533d565b614a8e90600361533d565b9150826149b285600561533d565b614aa68385615964565b614ab0908961533d565b915082614abe85600561533d565b614ac891906153a4565b90505b614ad58183615354565b98508815614aea57614ae789896153a4565b97505b50505b50505b6000614afc898c615964565b905084600003614b27576103e8614b166149178c8461533d565b614b209190615964565b9650614b5c565b614b5989614b35878461533d565b614b3f9190615354565b89614b4a888e61533d565b614b549190615354565b61530f565b96505b505050505094509492505050565b6001600160a01b038216600090815260016020526040902054614b8e9082906153a4565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f7f9085815260200190565b32600090815260166020526040812060018101548154839190614c069086906153a4565b614c109190615964565b9050838082811115614c1f5750815b60008115614c8357614c318284615964565b9250612710601a5488848b614c46919061533d565b614c509190615354565b614c5a919061533d565b614c649190615354565b9050614c7081876153a4565b95508015614c8357614c83893083614b6a565b6003601c54614c929190615354565b601454614c9f91906153a4565b4310614cf957601a546127109088614cb7868c61533d565b614cc19190615354565b614ccb919061533d565b614cd59190615354565b9050614ce181876153a4565b95508015614cf457614cf4893083614b6a565b614d4f565b6000612710601b5489868c614d0e919061533d565b614d189190615354565b614d22919061533d565b614d2c9190615354565b90508015614d4d57614d3e81886153a4565b9650614d4d8a61dead83614b6a565b505b82856001016000828254614d639190615964565b90915550959998505050505050505050565b6040805160038082526080820190925260009132918391602082016060803683370190505090503081600081518110614db057614db06153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81600181518110614e0457614e046153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b319795581600281518110614e5857614e586153cd565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e169063d06ca61f90614eb79088908690600401615427565b600060405180830381865afa158015614ed4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614efc919081019061549d565b905060008160018351614f0f9190615964565b81518110614f1f57614f1f6153cd565b6020908102919091018101516001600160a01b0386166000908152602a90925260408220549092509081831115614fb1576001600160a01b0386166000908152602a6020526040812055614f738284615964565b9050600083614f82838b61533d565b614f8c9190615354565b9050612710602b5482614f9f919061533d565b614fa99190615354565b975050614fdf565b6001600160a01b0386166000908152602a602052604081208054859290614fd9908490615964565b90915550505b505050505050919050565b600b805460ff1916600117905581158015615003575080155b615298578015615161576000602b54602c5483615020919061533d565b61502a9190615354565b9050801561503f5761503f3061dead836146a4565b6000602b54602d5484615052919061533d565b61505c9190615354565b9050801561508f5761508f307f00000000000000000000000019876caa46f43e21bb2669de5f1d6f718dd12c43836146a4565b6000602b54602e54856150a2919061533d565b6150ac9190615354565b905080156150df576150df307f000000000000000000000000909d45d1cbe8d14b440c81a5ec2a60b7abdb2961836146a4565b6000602b54602f54866150f2919061533d565b6150fc9190615354565b9050801561512f5761512f307f0000000000000000000000008c3a2c4ff742bef9f636fc64da695a4edf900728836146a4565b80828461513c8789615964565b6151469190615964565b6151509190615964565b61515a9190615964565b9450505050505b61516b81836153a4565b915081156152985760408051600280825260608201835260009260208301908036833701905050905030816000815181106151a8576151a86153cd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c816001815181106151fc576151fc6153cd565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b81527f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e83169263791ac9479261526492889260009288929116904290600401615a2d565b600060405180830381600087803b15801561527e57600080fd5b505af1158015615292573d6000803e3d6000fd5b50505050505b5050600b805460ff19169055565b6000600382111561530157508060006152c0600283615354565b6152cb9060016153a4565b90505b81811015612aab579050806002816152e68186615354565b6152f091906153a4565b6152fa9190615354565b90506152ce565b8115612aad57506001919050565b600081831061531e5781615320565b825b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611c8157611c81615327565b60008261537157634e487b7160e01b600052601260045260246000fd5b500490565b60008060006060848603121561538b57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115611c8157611c81615327565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561541c5781516001600160a01b0316875295820195908201906001016153f7565b509495945050505050565b82815260406020820152600061544060408301846153e3565b949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715615471576154716153b7565b604052919050565b600067ffffffffffffffff821115615493576154936153b7565b5060051b60200190565b600060208083850312156154b057600080fd5b825167ffffffffffffffff8111156154c757600080fd5b8301601f810185136154d857600080fd5b80516154eb6154e682615479565b615448565b81815260059190911b8201830190838101908783111561550a57600080fd5b928401925b828410156155285783518252928401929084019061550f565b979650505050505050565b6000806040838503121561554657600080fd5b50508035926020909101359150565b6001600160a01b0381168114611b8457600080fd5b60006020828403121561557c57600080fd5b813561532081615555565b600060208083528351808285015260005b818110156155b457858101830151858201604001528201615598565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156155e857600080fd5b82356155f381615555565b946020939093013593505050565b60006020828403121561561357600080fd5b5035919050565b8015158114611b8457600080fd5b6000806040838503121561563b57600080fd5b823561564681615555565b915060208301356156568161561a565b809150509250929050565b60008060006060848603121561567657600080fd5b833561568181615555565b9250602084013561569181615555565b929592945050506040919091013590565b600080604083850312156156b557600080fd5b8235915060208301356156568161561a565b8151815260208083015190820152604080830151908201526060808301519082015260808101611c81565b6020808252825182820181905260009190848201906040850190845b8181101561575557615742838551805182526020810151602083015260408101516040830152606081015160608301525050565b928401926080929092019160010161570e565b50909695505050505050565b600082601f83011261577257600080fd5b813560206157826154e683615479565b82815260059290921b840181019181810190868411156157a157600080fd5b8286015b848110156157c55780356157b881615555565b83529183019183016157a5565b509695505050505050565b600080604083850312156157e357600080fd5b823567ffffffffffffffff8111156157fa57600080fd5b61580685828601615761565b95602094909401359450505050565b6000806040838503121561582857600080fd5b823567ffffffffffffffff81111561583f57600080fd5b61584b85828601615761565b92505060208301356156568161561a565b6000806000806080858703121561587257600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156158a657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156158dc57600080fd5b82356158e781615555565b9150602083013561565681615555565b602080825260029082015261216f60f01b604082015260600190565b600181811c9082168061592757607f821691505b602082108103612aab57634e487b7160e01b600052602260045260246000fd5b60006020828403121561595957600080fd5b81516153208161561a565b81810381811115611c8157611c81615327565b60006001820161598957615989615327565b5060010190565b6000602082840312156159a257600080fd5b5051919050565b80516001600160701b0381168114612aad57600080fd5b6000806000606084860312156159d557600080fd5b6159de846159a9565b92506159ec602085016159a9565b9150604084015163ffffffff81168114615a0557600080fd5b809150509250925092565b600060208284031215615a2257600080fd5b815161532081615555565b85815284602082015260a060408201526000615a4c60a08301866153e3565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212203679c71f28f67c4f35343e98ccdb3b0dbfefa1f6660be9a91ed045ce1759c99964736f6c63430008130033
Deployed Bytecode Sourcemap
46592:707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42412:15;;42408:19;42404:58;;46592:707;42404:58;42490:10;42526:9;42515:20;;42511:59;;42552:7;42511:59;42661:13;;42600:15;;42648:26;;;;;:54;;;42691:11;;42678:9;:24;;42648:54;42626:112;;;;-1:-1:-1;;;42626:112:0;;216:2:1;42626:112:0;;;198:21:1;255:1;235:18;;;228:29;-1:-1:-1;;;273:18:1;;;266:38;321:18;;42626:112:0;;;;;;;;;42822:14;;42768:9;;42810:26;;;;;:56;;;42852:14;;42840:8;:26;;42810:56;42788:113;;;;-1:-1:-1;;;42788:113:0;;552:2:1;42788:113:0;;;534:21:1;591:1;571:18;;;564:29;-1:-1:-1;;;609:18:1;;;602:37;656:18;;42788:113:0;350:330:1;42788:113:0;-1:-1:-1;;;;;42936:18:0;;42912:21;42936:18;;;:9;:18;;;;;42978:11;;42973:16;42965:35;;;;-1:-1:-1;;;42965:35:0;;887:2:1;42965:35:0;;;869:21:1;926:1;906:18;;;899:29;-1:-1:-1;;;944:18:1;;;937:36;990:18;;42965:35:0;685:329:1;42965:35:0;43011:22;;;43044:9;;;:21;;;43093:17;;43011:11;;43125:5;;43093:28;;43025:8;;43093:28;:::i;:::-;43092:38;;;;:::i;:::-;43076:54;;43146:14;43164:11;-1:-1:-1;;;;;43164:27:0;;43199:5;43228:4;43282:7;43273:5;43249:21;;:29;;;;:::i;:::-;43248:41;;;;:::i;:::-;43164:220;;-1:-1:-1;;;;;;43164:220:0;;;;;;;-1:-1:-1;;;;;1905:15:1;;;43164:220:0;;;1887:34:1;1937:18;;;1930:34;;;;43304:1:0;1980:18:1;;;1973:34;;;2023:18;;;2016:34;2087:15;;;2066:19;;;2059:44;43358:15:0;2119:19:1;;;2112:35;1821:19;;43164:220:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43403:16;;43395:57;;43141:243;;-1:-1:-1;;;;;;43403:16:0;;-1:-1:-1;43430:21:0;43395:57;;;;;-1:-1:-1;43430:21:0;43403:16;43395:57;43403:16;43395:57;43430:21;43403:16;43395:57;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43463:18:0;;;;;;:9;:18;;;;;:40;;43494:9;;43463:18;:40;;43494:9;;43463:40;:::i;:::-;;;;-1:-1:-1;;;;;;;43514:18:0;;;;;;:9;:18;;;;;:30;;:43;;43548:9;;43514:18;:43;;43548:9;;43514:43;:::i;:::-;;;;-1:-1:-1;43568:23:0;;-1:-1:-1;43583:7:0;43568:14;:23::i;:::-;43628:16;;;43642:1;43628:16;;;;;;;;43604:21;;43628:16;;;;;;;;;;-1:-1:-1;43628:16:0;43604:40;;43665:5;43655:4;43660:1;43655:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;43655:15:0;;;-1:-1:-1;;;;;43655:15:0;;;;;43691:5;43681:4;43686:1;43681:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43681:15:0;;;:7;;;;;;;;;:15;43731:40;;-1:-1:-1;;;43731:40:0;;43707:21;;43731:11;:24;;;;:40;;43756:8;;43766:4;;43731:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43731:40:0;;;;;;;;;;;;:::i;:::-;43707:64;;43809:7;43817:1;43809:10;;;;;;;;:::i;:::-;;;;;;;43782:14;:23;43797:7;-1:-1:-1;;;;;43782:23:0;-1:-1:-1;;;;;43782:23:0;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;46592:707;;;;29540:159;;;;;;;;;;-1:-1:-1;29540:159:0;;;;;:::i;:::-;;:::i;:::-;;5552:44;;;;;;;;;;-1:-1:-1;5552:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5826:14:1;;5819:22;5801:41;;5789:2;5774:18;5552:44:0;;;;;;;;4650:45;;;;;;;;;;-1:-1:-1;4650:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5603:31;;;;;;;;;;-1:-1:-1;5603:31:0;;;;;;;;9120:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9964:184::-;;;;;;;;;;-1:-1:-1;9964:184:0;;;;;:::i;:::-;;:::i;5204:39::-;;;;;;;;;;;;;;;;;;;6872:25:1;;;6860:2;6845:18;5204:39:0;6726:177:1;41420:36:0;;;;;;;;;;;;;;;;5892:34;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7072:32:1;;;7054:51;;7042:2;7027:18;5892:34:0;6908:203:1;44692:43:0;;;;;;;;;;-1:-1:-1;44692:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33972:152;;;;;;;;;;-1:-1:-1;33972:152:0;;;;;:::i;:::-;;:::i;23962:38::-;;;;;;;;;;;;;;;;36275:133;;;;;;;;;;;;;:::i;31268:179::-;;;;;;;;;;-1:-1:-1;31268:179:0;;;;;:::i;:::-;;:::i;41247:26::-;;;;;;;;;;;;;;;;5292:31;;;;;;;;;;;;;;;;9324:95;;;;;;;;;;-1:-1:-1;9404:7:0;;9324:95;;44589:17;;;;;;;;;;-1:-1:-1;44589:17:0;;;;-1:-1:-1;;;;;44589:17:0;;;5250:35;;;;;;;;;;;;;;;;24007:45;;;;;;;;;;;;;;;;32629:115;;;;;;;;;;-1:-1:-1;32629:115:0;;;;;:::i;:::-;;:::i;10156:404::-;;;;;;;;;;-1:-1:-1;10156:404:0;;;;;:::i;:::-;;:::i;33298:49::-;;;;;;;;;;-1:-1:-1;33298:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39045:156;;;;;;;;;;-1:-1:-1;39045:156:0;;;;;:::i;:::-;;:::i;9222:94::-;;;;;;;;;;-1:-1:-1;9299:9:0;;9222:94;;9299:9;;;;8948:36:1;;8936:2;8921:18;9222:94:0;8806:184:1;5166:31:0;;;;;;;;;;;;;;;;4871:45;;;;;;;;;;-1:-1:-1;4871:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44654:31;;;;;;;;;;;;;;;;29817;;;;;;;;;;;;;;;;44613:34;;;;;;;;;;;;;;;;5408;;;;;;;;;;;;;;;23429:487;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;41374:39::-;;;;;;;;;;;;;;;;39535:41;;;;;;;;;;;;;;;;41983:105;;;;;;;;;;-1:-1:-1;41983:105:0;;;;;:::i;:::-;;:::i;5332:30::-;;;;;;;;;;;;;;;;39300:49;;;;;;;;;;-1:-1:-1;39300:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;39356:35;;;;;;;;;;;;;;;;41872:103;;;;;;;;;;-1:-1:-1;41872:103:0;;;;;:::i;:::-;;:::i;4702:42::-;;;;;;;;;;-1:-1:-1;4702:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;41463:31;;;;;;;;;;-1:-1:-1;41463:31:0;;;;-1:-1:-1;;;;;41463:31:0;;;39491:37;;;;;;;;;;;;;;;;29707:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23924:31::-;;;;;;;;;;;;;;;;34132:29;;;;;;;;;;;;;;;;31702:373;;;;;;;;;;-1:-1:-1;31702:373:0;;;;;:::i;:::-;;:::i;:::-;;;;10432:25:1;;;10488:2;10473:18;;10466:34;;;;10516:18;;;10509:34;10420:2;10405:18;31702:373:0;10230:319:1;30279:73:0;;;;;;;;;;;;;:::i;40881:243::-;;;;;;;;;;-1:-1:-1;40881:243:0;;;;;:::i;:::-;;:::i;44304:265::-;;;;;;;;;;-1:-1:-1;44304:265:0;;;;;:::i;:::-;-1:-1:-1;;;;;44450:18:0;44383:14;44450:18;;;:9;:18;;;;;:25;;44493:23;;;;;44450:25;;44493:23;;44537:24;;44304:265;38925:112;;;;;;;;;;-1:-1:-1;38925:112:0;;;;;:::i;:::-;;:::i;5697:49::-;;;;;;;;;;;;;;;46328:161;;;;;;;;;;-1:-1:-1;46328:161:0;;;;;:::i;:::-;;:::i;9427:155::-;;;;;;;;;;-1:-1:-1;9427:155:0;;;;;:::i;:::-;;:::i;3041:148::-;;;;;;;;;;;;;:::i;5641:49::-;;;;;;;;;;;;;;;32083:538;;;;;;;;;;-1:-1:-1;32083:538:0;;;;;:::i;:::-;;:::i;33356:105::-;;;;;;;;;;-1:-1:-1;33435:11:0;:18;33356:105;;41328:39;;;;;;;;;;;;;;;;32979:219;;;;;;;;;;-1:-1:-1;32979:219:0;;;;;:::i;:::-;;:::i;41555:97::-;;;;;;;;;;-1:-1:-1;41555:97:0;;;;;:::i;:::-;;:::i;34207:30::-;;;;;;;;;;;;;;;;46497:88;;;;;;;;;;-1:-1:-1;46497:88:0;;;;;:::i;:::-;;:::i;17736:441::-;;;;;;;;;;;;;:::i;:::-;;;;12605:25:1;;;12661:2;12646:18;;12639:34;;;;12578:18;17736:441:0;12431:248:1;37122:27:0;;;;;;;;;;-1:-1:-1;37122:27:0;;;;-1:-1:-1;;;;;37122:27:0;;;41212:28;;;;;;;;;;;;;;;;28314:184;;;;;;;;;;-1:-1:-1;28314:184:0;;;;;:::i;:::-;;:::i;41280:41::-;;;;;;;;;;;;;;;;28506:309;;;;;;;;;;-1:-1:-1;28506:309:0;;;;;:::i;:::-;;:::i;2859:79::-;;;;;;;;;;-1:-1:-1;2897:7:0;2924:6;-1:-1:-1;;;;;2924:6:0;2859:79;;29857:93;;;;;;;;;;-1:-1:-1;29857:93:0;;;;;:::i;:::-;;:::i;32796:175::-;;;;;;;;;;-1:-1:-1;32796:175:0;;;;;:::i;:::-;;:::i;9014:98::-;;;;;;;;;;;;;:::i;36890:106::-;;;;;;;;;;-1:-1:-1;36890:106:0;;;;;:::i;:::-;;:::i;37313:35::-;;;;;;;;;;-1:-1:-1;37313:35:0;;;;-1:-1:-1;;;;;37313:35:0;;;30166:105;;;;;;;;;;-1:-1:-1;30166:105:0;;;;;:::i;:::-;;:::i;5369:30::-;;;;;;;;;;;;;;;;41761:103;;;;;;;;;;-1:-1:-1;41761:103:0;;;;;:::i;:::-;;:::i;5086:34::-;;;;;;;;;;;;;;;;5815:30;;;;;;;;;;;;;;;37158:136;;;;;;;;;;-1:-1:-1;37158:136:0;;;;;:::i;:::-;;:::i;46203:117::-;;;;;;;;;;-1:-1:-1;46203:117:0;;;;;:::i;:::-;;:::i;31455:239::-;;;;;;;;;;-1:-1:-1;31455:239:0;;;;;:::i;:::-;;:::i;40485:388::-;;;;;;;;;;-1:-1:-1;40485:388:0;;;;;:::i;:::-;;:::i;30974:118::-;;;;;;;;;;-1:-1:-1;30974:118:0;;;;;:::i;:::-;;:::i;9590:190::-;;;;;;;;;;-1:-1:-1;9590:190:0;;;;;:::i;:::-;;:::i;5041:38::-;;;;;;;;;;;;;;;;37395:30;;;;;;;;;;;;;;;;30741:225;;;;;;;;;;-1:-1:-1;30741:225:0;;;;;:::i;:::-;;:::i;39398:42::-;;;;;;;;;;;;;;;;36416:466;;;;;;;;;;-1:-1:-1;36416:466:0;;;;;:::i;:::-;;:::i;5852:33::-;;;;;;;;;;;;;;;30059:99;;;;;;;;;;-1:-1:-1;30059:99:0;;;;;:::i;:::-;;:::i;41501:45::-;;;;;;;;;;-1:-1:-1;41501:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;37432:42;;;;;;;;;;-1:-1:-1;37432:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29958:93;;;;;;;;;;-1:-1:-1;29958:93:0;;;;;:::i;:::-;;:::i;5004:30::-;;;;;;;;;;;;;;;;17486:242;;;;;;;;;;;;;:::i;37355:33::-;;;;;;;;;;;;;;;;5127:30;;;;;;;;;;;;;;;;43835:461;;;;;;;;;;-1:-1:-1;44120:13:0;;44157:11;;44195:14;;44236;;43835:461;;;13792:25:1;;;13848:2;13833:18;;13826:34;;;;13876:18;;;13869:34;13934:2;13919:18;;13912:34;44273:15:0;13977:3:1;13962:19;;13955:35;13779:3;13764:19;43835:461:0;13533:463:1;39447:37:0;;;;;;;;;;;;;;;;34168:32;;;;;;;;;;;;;;;;9788:168;;;;;;;;;;-1:-1:-1;9788:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;9921:18:0;;;9894:7;9921:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9788:168;33206:28;;;;;;;;;;-1:-1:-1;33206:28:0;;;;;:::i;:::-;;:::i;42096:117::-;;;;;;;;;;-1:-1:-1;42096:117:0;;;;;:::i;:::-;;:::i;29145:387::-;;;;;;;;;;-1:-1:-1;29145:387:0;;;;;:::i;:::-;;:::i;28823:314::-;;;;;;;;;;-1:-1:-1;28823:314:0;;;;;:::i;:::-;;:::i;5753:53::-;;;;;;;;;;;;;;;4527:26;;;;;;;;;;-1:-1:-1;4527:26:0;;;;-1:-1:-1;;;;;4527:26:0;;;32752:35;;;;;;;;;;;;;;;;31100:160;;;;;;;;;;-1:-1:-1;31100:160:0;;;;;:::i;:::-;;:::i;33241:50::-;;;;;;;;;;-1:-1:-1;33241:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;41660:93;;;;;;;;;;-1:-1:-1;41660:93:0;;;;;:::i;:::-;;:::i;3197:208::-;;;;;;;;;;-1:-1:-1;3197:208:0;;;;;:::i;:::-;;:::i;37004:110::-;;;;;;;;;;-1:-1:-1;37004:110:0;;;;;:::i;:::-;;:::i;39209:83::-;;;;;;;;;;-1:-1:-1;39209:83:0;;;;;:::i;:::-;;:::i;5935:29::-;;;;;;;;;;-1:-1:-1;5935:29:0;;;;;:::i;:::-;;:::i;:::-;;;;14625:25:1;;;14681:2;14666:18;;14659:34;;;;14709:18;;;14702:34;14767:2;14752:18;;14745:34;14612:3;14597:19;5935:29:0;14394:391:1;42221:137:0;;;;;;;;;;-1:-1:-1;42221:137:0;;;;;:::i;:::-;;:::i;33469:495::-;-1:-1:-1;;;;;33534:20:0;;;;;;:15;:20;;;;;;33529:25;;33525:432;;33580:11;:18;33575:23;;:48;;;33620:3;-1:-1:-1;;;;;33602:21:0;:11;33614:1;33602:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;33602:14:0;:21;;33575:48;33571:375;;;33715:16;;33772:8;;33768:63;;33805:7;33469:495;:::o;33768:63::-;-1:-1:-1;33872:11:0;:18;;-1:-1:-1;;;;;33849:20:0;;;;;;:15;:20;;;;;:41;;;33909:21;;;;;;;;;;;;;-1:-1:-1;;;;;;33909:21:0;;;;;;33571:375;33469:495;:::o;29540:159::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;29616:27:::1;29646:10;29657:1;29646:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;29670:21:::0;;;;-1:-1:-1;;29540:159:0:o;9120:94::-;9168:13;9201:5;9194:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9120:94;:::o;9964:184::-;10064:4;10081:37;10090:10;10102:7;10111:6;10081:8;:37::i;:::-;-1:-1:-1;10136:4:0;9964:184;;;;;:::o;33972:152::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34084:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;-1:-1:-1;;34084:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33972:152::o;36275:133::-;36326:19;36372:28;36384:15;;36372:11;:28::i;:::-;36358:42;;36275:133;:::o;31268:179::-;31357:11;;-1:-1:-1;;;;;31357:11:0;31343:10;:25;31339:101;;31408:11;;31385:43;;-1:-1:-1;;;31385:43:0;;-1:-1:-1;;;;;31408:11:0;;;31385:43;;;15679:51:1;15746:18;;;15739:34;;;31385:22:0;;;;;;15652:18:1;;31385:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31339:101;31268:179;;:::o;32629:115::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32709:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;32709:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32629:115::o;10156:404::-;10288:4;10305:36;10315:6;10323:9;10334:6;10305:9;:36::i;:::-;-1:-1:-1;;;;;10356:19:0;;4993:1;10356:19;;;:11;:19;;;;;;;;10376:10;10356:31;;;;;;;;-1:-1:-1;;10356:38:0;10352:179;;-1:-1:-1;;;;;10462:19:0;;;;;;:11;:19;;;;;;;;10482:10;10462:31;;;;;;;;:57;;10513:6;;10462:57;:::i;:::-;-1:-1:-1;;;;;10411:19:0;;;;;;:11;:19;;;;;;;;10431:10;10411:31;;;;;;;:108;10352:179;-1:-1:-1;10548:4:0;10156:404;;;;;:::o;39045:156::-;39131:11;;-1:-1:-1;;;;;39131:11:0;39117:10;:25;39113:81;;39159:14;;;;:10;:14;;;;;:23;;;;;-1:-1:-1;;39159:23:0;;;;;;39045:156;;:::o;23429:487::-;23481:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23481:16:0;23524:10;:17;23615:15;;23571:12;;23510:11;23641:231;23665:3;23661:1;:7;23641:231;;;23690:27;23720:10;23731:1;23720:13;;;;;;;;:::i;:::-;;;;;;;;;;;23690:43;;24101:1;23777:9;:14;;;:31;;;;:::i;:::-;23764:44;;:10;:44;:::i;:::-;23752:8;:56;23748:113;;23829:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23429:487;-1:-1:-1;;;;;23429:487:0:o;23748:113::-;-1:-1:-1;23670:3:0;;;:::i;:::-;;;23641:231;;;-1:-1:-1;23889:10:0;23900:7;23906:1;23900:3;:7;:::i;:::-;23889:19;;;;;;;;:::i;:::-;;;;;;;;;;;23882:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23429:487;:::o;41983:105::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;42056:17:::1;:24:::0;41983:105::o;41872:103::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;41944:14:::1;:23:::0;41872:103::o;29707:102::-;29753:18;29791:10;29784:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29707:102;:::o;31702:373::-;31890:36;;-1:-1:-1;;;31890:36:0;;-1:-1:-1;;;;;7072:32:1;;;31890:36:0;;;7054:51:1;-1:-1:-1;;;;;;31897:9:0;31890:27;;;;;;7027:18:1;;31890:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31965:18:0;;;31937:25;31965:18;;;:9;:18;;;;;32005:17;;32047:20;;;;;32005:17;;32047:20;;-1:-1:-1;31702:373:0;-1:-1:-1;;31702:373:0:o;30279:73::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;30331:13:::1;:11;:13::i;:::-;30279:73::o:0;40881:243::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;41012:6:::1;41007:110;41028:8;:15;41024:1;:19;41007:110;;;41095:10;41065:14;:27;41080:8;41089:1;41080:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;41065:27:0::1;-1:-1:-1::0;;;;;41065:27:0::1;;;;;;;;;;;;:40;;;;41045:3;;;;;:::i;:::-;;;;41007:110;;38925:112:::0;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;39002:18:::1;:27:::0;38925:112::o;46328:161::-;46418:10;46404:25;;;;:13;:25;;;;;;;;46400:82;;;46446:15;;;;:11;:15;;;;;:24;;;;;-1:-1:-1;;46446:24:0;;;;;;46328:161;;:::o;9427:155::-;-1:-1:-1;;;;;9531:18:0;9493:7;9531:18;;;:9;:18;;;;;;;9427:155::o;3041:148::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;3148:1:::1;3132:6:::0;;3111:40:::1;::::0;-1:-1:-1;;;;;3132:6:0;;::::1;::::0;3111:40:::1;::::0;3148:1;;3111:40:::1;3179:1;3162:19:::0;;-1:-1:-1;;;;;;3162:19:0::1;::::0;;3041:148::o;32083:538::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;32218:15;;32204:11:::1;::::0;;32306:308:::1;32326:3;32322:1;:7;32306:308;;;32358:8;32367:1;32358:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32395:18:0;::::1;;::::0;;;:9:::1;:18:::0;;;;;;;32428:28;;;32471:20:::1;::::0;::::1;:31:::0;;;32358:11;;-1:-1:-1;32395:18:0;-1:-1:-1;32517:23:0::1;32358:11:::0;32517:14:::1;:23::i;:::-;32584:3;;32306:308;;;;32193:428;;;32083:538:::0;;:::o;32979:219::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;33102:6:::1;33097:94;33118:4;:11;33114:1;:15;33097:94;;;33173:6;33151:10;:19;33162:4;33167:1;33162:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;33151:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;33151:19:0;:28;;-1:-1:-1;;33151:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33131:3;::::1;::::0;::::1;:::i;:::-;;;;33097:94;;41555:97:::0;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;41624:13:::1;:20:::0;41555:97::o;46497:88::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;46560:5:::1;:17:::0;;-1:-1:-1;;;;;;46560:17:0::1;-1:-1:-1::0;;;;;46560:17:0;;;::::1;::::0;;;::::1;::::0;;46497:88::o;17736:441::-;17809:14;17825:13;17856:18;17887:9;17856:41;;17909:7;17918:10;17934:8;-1:-1:-1;;;;;17934:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;17908:48:0;;;;-1:-1:-1;17908:48:0;;-1:-1:-1;17990:5:0;18031:4;-1:-1:-1;;;;;18010:26:0;;;18006:164;;;18062:2;18053:11;;18087:2;18079:10;;18006:164;;;18131:2;18122:11;;18156:2;18148:10;;18006:164;17845:332;;;;17736:441;;:::o;28314:184::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;28382:11:::1;:18:::0;;-1:-1:-1;;;;;;28382:18:0::1;-1:-1:-1::0;;;;;28382:18:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;28411:19:0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;28411:26:0::1;-1:-1:-1::0;28411:26:0::1;::::0;;28482:8:::1;28488:2;-1:-1:-1::0;;28482:8:0::1;:::i;:::-;28458:11;::::0;-1:-1:-1;;;;;28458:11:0::1;28448:22;::::0;;;:9:::1;:22;::::0;;;;:42;-1:-1:-1;28314:184:0:o;28506:309::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;28674:11:::1;:21:::0;;;;28706:17:::1;:33:::0;;;;28750:10:::1;:19:::0;28780:14:::1;:27:::0;28506:309::o;29857:93::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;29924:12:::1;:18:::0;29857:93::o;32796:175::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;32888:6:::1;32875:9;:19;;:43;;;;;32911:7;32898:9;:20;;32875:43;32867:63;;;::::0;-1:-1:-1;;;32867:63:0;;17346:2:1;32867:63:0::1;::::0;::::1;17328:21:1::0;17385:1;17365:18;;;17358:29;-1:-1:-1;;;17403:18:1;;;17396:37;17450:18;;32867:63:0::1;17144:330:1::0;32867:63:0::1;32941:10;:22:::0;32796:175::o;9014:98::-;9064:13;9097:7;9090:14;;;;;:::i;36890:106::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;36964:15:::1;:24:::0;36890:106::o;30166:105::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;30239:20:::1;:24:::0;30166:105::o;41761:103::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;41833:14:::1;:23:::0;41761:103::o;37158:136::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;37226:12:::1;:19:::0;;-1:-1:-1;;;;;37226:19:0;;::::1;-1:-1:-1::0;;;;;;37226:19:0;;::::1;::::0;::::1;::::0;;:12:::1;37256:23:::0;;;:17:::1;:23;::::0;;;;:30;;-1:-1:-1;;37256:30:0::1;37226:19:::0;37256:30:::1;::::0;;37158:136::o;46203:117::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;46284:19:::1;:28:::0;46203:117::o;31455:239::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31595:18:0;::::1;31567:25;31595:18:::0;;;:9:::1;:18;::::0;;;;31624:28;;;31663:23:::1;31605:7:::0;31663:14:::1;:23::i;40485:388::-:0;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;40677:14:::1;:26:::0;;;;40714:21:::1;:34:::0;;;;40759:16:::1;:24:::0;40794:17:::1;:26:::0;40831:21:::1;:34:::0;40485:388::o;30974:118::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31056:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;31056:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30974:118::o;9590:190::-;9693:4;9710:40;9720:10;9732:9;9743:6;9710:9;:40::i;30741:225::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;30867:6:::1;30862:97;30883:4;:11;30879:1;:15;30862:97;;;30941:6;30916:13;:22;30930:4;30935:1;30930:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30916:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30916:22:0;:31;;-1:-1:-1;;30916:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30896:3;::::1;::::0;::::1;:::i;:::-;;;;30862:97;;36416:466:::0;36494:19;36530:14;;36526:349;;36562:13;36581:15;:13;:15::i;:::-;-1:-1:-1;36561:35:0;-1:-1:-1;36615:9:0;;36611:253;;36645:14;36654:5;;36645:14;:::i;:::-;;;36678:15;36703:9;-1:-1:-1;;;;;36696:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36678:49;-1:-1:-1;36785:5:0;36761:20;36678:49;36761:10;:20;:::i;:::-;36760:30;;;;:::i;:::-;36746:44;;36626:180;36611:253;;;-1:-1:-1;;4984:11:0;-1:-1:-1;36611:253:0;36546:329;36526:349;36416:466;;;:::o;30059:99::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;30129:15:::1;:21:::0;30059:99::o;29958:93::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;30025:12:::1;:18:::0;29958:93::o;17486:242::-;17558:14;17574:13;17589:20;17645:15;:13;:15::i;:::-;17686:34;;-1:-1:-1;;;17686:34:0;;-1:-1:-1;;;;;17710:9:0;7072:32:1;;17686:34:0;;;7054:51:1;17627:33:0;;-1:-1:-1;17627:33:0;;-1:-1:-1;17693:5:0;17686:23;;;;;;7027:18:1;;17686:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17671:49;;17486:242;;;:::o;33206:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33206:28:0;;-1:-1:-1;33206:28:0;:::o;42096:117::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;42175:21:::1;:30:::0;42096:117::o;29145:387::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;29327:27:::1;29357:10;29368:1;29357:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;29381:21:::0;;;-1:-1:-1;29413:17:0::1;::::0;::::1;:27:::0;;;;29451:18:::1;::::0;::::1;:29:::0;29491:20:::1;::::0;;::::1;:33:::0;-1:-1:-1;29145:387:0:o;28823:314::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;28992:12:::1;:22:::0;;;;29025:18:::1;:34:::0;;;;29070:11:::1;:20:::0;29101:15:::1;:28:::0;28823:314::o;31100:160::-;31176:11;;-1:-1:-1;;;;;31176:11:0;31162:10;:25;31158:95;;31212:11;;31204:37;;-1:-1:-1;;;;;31212:11:0;;;;31204:37;;;;;31234:6;;31212:11;31204:37;31212:11;31204:37;31234:6;31212:11;31204:37;;;;;;;;;;;;;;;;;;;41660:93;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;41727:11:::1;:18:::0;41660:93::o;3197:208::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3286:22:0;::::1;3278:37;;;::::0;-1:-1:-1;;;3278:37:0;;17681:2:1;3278:37:0::1;::::0;::::1;17663:21:1::0;17720:1;17700:18;;;17693:29;-1:-1:-1;;;17738:18:1;;;17731:32;17780:18;;3278:37:0::1;17479:325:1::0;3278:37:0::1;3352:6;::::0;;3331:38:::1;::::0;-1:-1:-1;;;;;3331:38:0;;::::1;::::0;3352:6;::::1;::::0;3331:38:::1;::::0;::::1;3380:6;:17:::0;;-1:-1:-1;;;;;;3380:17:0::1;-1:-1:-1::0;;;;;3380:17:0;;;::::1;::::0;;;::::1;::::0;;3197:208::o;37004:110::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;37080:17:::1;:26:::0;37004:110::o;39209:83::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;39268:4:::1;:16:::0;;-1:-1:-1;;;;;;39268:16:0::1;-1:-1:-1::0;;;;;39268:16:0;;;::::1;::::0;;;::::1;::::0;;39209:83::o;5935:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5935:29:0;;;:::o;42221:137::-;2986:6;;-1:-1:-1;;;;;2986:6:0;2996:10;2986:20;2978:35;;;;-1:-1:-1;;;2978:35:0;;;;;;;:::i;:::-;42292:16:::1;:22:::0;;-1:-1:-1;;;;;42292:22:0;;::::1;-1:-1:-1::0;;;;;;42292:22:0;;::::1;::::0;::::1;::::0;;:16:::1;42325:18:::0;;;:13:::1;:18;::::0;;;;:25;;-1:-1:-1;;42325:25:0::1;42292:22:::0;42325:25:::1;::::0;;42221:137::o;10568:177::-;-1:-1:-1;;;;;10653:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10705:32;;6872:25:1;;;10705:32:0;;6845:18:1;10705:32:0;;;;;;;;10568:177;;;:::o;10753:3012::-;-1:-1:-1;;;;;10856:16:0;;;;;;:10;:16;;;;;;;;10855:17;;:40;;-1:-1:-1;;;;;;10876:19:0;;;;;;:13;:19;;;;;;;;10855:40;:63;;;-1:-1:-1;;;;;;10899:19:0;;;;;;:13;:19;;;;;;;;10855:63;10833:122;;;;-1:-1:-1;;;10833:122:0;;18011:2:1;10833:122:0;;;17993:21:1;18050:1;18030:18;;;18023:29;-1:-1:-1;;;18068:18:1;;;18061:39;18117:18;;10833:122:0;17809:332:1;10833:122:0;10968:15;10986;10996:4;10986:9;:15::i;:::-;10968:33;;11031:6;11020:7;:17;;11012:33;;;;-1:-1:-1;;;11012:33:0;;18348:2:1;11012:33:0;;;18330:21:1;18387:1;18367:18;;;18360:29;-1:-1:-1;;;18405:18:1;;;18398:33;18448:18;;11012:33:0;18146:326:1;11012:33:0;-1:-1:-1;;;;;11086:19:0;;11056:12;11086:19;;;:13;:19;;;;;;;;11085:20;:42;;;;-1:-1:-1;;;;;;11110:17:0;;;;;;:13;:17;;;;;;;;11109:18;11085:42;11081:335;;;11172:4;-1:-1:-1;;;;;11148:28:0;11156:11;-1:-1:-1;;;;;11148:28:0;;11144:261;;11197:21;11240:5;11222:14;:7;11232:4;11222:14;:::i;:::-;11221:24;;;;:::i;:::-;11197:48;;11277:13;11268:6;:22;11264:93;;;11324:13;11315:22;;11264:93;11385:4;11375:14;;11178:227;11144:261;11428:16;11447:9;11428:28;;11467:25;11503:22;11546:9;-1:-1:-1;;;;;11540:15:0;:2;-1:-1:-1;;;;;11540:15:0;;:43;;;;-1:-1:-1;11572:10:0;11559:24;;;;:12;:24;;;;;;;;11540:43;:63;;;;;11599:4;-1:-1:-1;;;;;11587:16:0;:8;-1:-1:-1;;;;;11587:16:0;;11540:63;11536:452;;;11637:23;11653:6;11637:15;:23::i;:::-;11620:40;-1:-1:-1;11679:18:0;;11675:302;;-1:-1:-1;;;;;11729:19:0;;;;;;:9;:19;;;;;11767:35;;11729:19;;-1:-1:-1;11788:14:0;;11729:19;;11767:35;;11788:14;;11767:35;:::i;:::-;;;;-1:-1:-1;;11830:15:0;;11825:1;:20;11821:107;;11894:14;11870:8;:20;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;11821:107:0;11956:5;11946:15;;11675:302;12000:25;12048:9;-1:-1:-1;;;;;12040:17:0;:4;-1:-1:-1;;;;;12040:17:0;;12036:403;;12094:26;12113:6;12094:18;:26::i;:::-;12074:46;-1:-1:-1;12139:21:0;;12135:293;;-1:-1:-1;;;;;12189:19:0;;;;;;:9;:19;;;;;:28;:49;-1:-1:-1;12189:49:0;12181:58;;;;;;-1:-1:-1;;;;;12258:19:0;;;;;;:9;:19;;;;;:49;;12290:17;;12258:19;:49;;12290:17;;12258:49;:::i;:::-;;;;-1:-1:-1;;;;;;;12330:23:0;;;;;;:13;:23;;;;;;;;12326:87;;;12388:5;12378:15;;12326:87;-1:-1:-1;;;;;12455:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;12478:17:0;;;;;;:13;:17;;;;;;;;12455:40;12451:829;;;12521:15;;12516:1;:20;12512:177;;-1:-1:-1;;;;;12561:19:0;;;;;;:13;:19;;;;;;;;:38;;;;;12590:9;-1:-1:-1;;;;;12584:15:0;:2;-1:-1:-1;;;;;12584:15:0;;12561:38;12557:117;;;12642:12;12624:15;:30;12557:117;-1:-1:-1;;;;;12710:19:0;;;;;;:13;:19;;;;;;;;12709:20;:42;;;;-1:-1:-1;;;;;;12734:17:0;;;;;;:13;:17;;;;;;;;12733:18;12709:42;12705:564;;;12781:15;;12776:1;:20;12772:482;;12833:15;;12829:1;:19;:41;;;;;12869:1;12852:14;:18;12829:41;12821:50;;;;;;12772:482;;;12950:19;;:70;;;;-1:-1:-1;12998:22:0;;12950:70;:142;;;;;5489:1;13064:15;;:28;;;;:::i;:::-;13049:12;:43;12950:142;12920:315;;;13143:35;13157:4;13163:2;13167:6;13175:2;13143:13;:35::i;:::-;13205:7;;;;;;10753:3012;;;:::o;12920:315::-;13292:60;13307:4;13313:2;13317:6;13325:7;13334:17;13292:14;:60::i;:::-;-1:-1:-1;;;;;13369:21:0;;13385:4;13369:21;13365:393;;13411:18;;13407:340;;13450:20;13465:4;13450:14;:20::i;:::-;13407:340;;;13496:7;13492:255;;;13524:17;13544:10;;13524:30;;13573:40;13609:3;13591:9;13603:2;13591:14;;;;:::i;:::-;13590:22;;;;:::i;:::-;13573:16;:40::i;:::-;13632:39;13667:3;13649:14;:9;13661:2;13649:14;:::i;:::-;13648:22;;;;:::i;:::-;13632:15;:39::i;:::-;13690:41;13727:3;13709:14;:9;13721:2;13709:14;:::i;:::-;13708:22;;;;:::i;:::-;13690:17;:41::i;:::-;13505:242;10822:2943;;;;;;10753:3012;;;:::o;30360:373::-;30415:15;;30410:20;30402:40;;;;-1:-1:-1;;;30402:40:0;;18679:2:1;30402:40:0;;;18661:21:1;18718:1;18698:18;;;18691:29;-1:-1:-1;;;18736:18:1;;;18729:37;18783:18;;30402:40:0;18477:330:1;30402:40:0;30471:12;30453:15;:30;30551:16;;30494:123;;30531:4;;-1:-1:-1;;;;;30551:16:0;30582:24;30531:4;30582:9;:24::i;:::-;30494:14;:123::i;:::-;30636:16;;30628:57;;-1:-1:-1;;;;;30636:16:0;;;;30663:21;30628:57;;;;;30636:16;30628:57;30636:16;30628:57;30663:21;30636:16;30628:57;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30710:15:0;30696:11;:29;30360:373::o;13773:467::-;13853:17;13884:14;13900:13;13915:20;13939:14;:12;:14::i;:::-;13883:70;;;;;;13964:19;14007:1;13998:6;:10;:23;;;;;14020:1;14012:5;:9;13998:23;13994:95;;;14072:5;14053:15;14062:6;14053;:15;:::i;:::-;14052:25;;;;:::i;:::-;14038:39;;13994:95;14119:20;14128:11;14119:6;:20;:::i;:::-;14103:12;:36;14099:134;;14172:49;14185:12;14199:6;14207;14215:5;14172:12;:49::i;:::-;-1:-1:-1;14156:65:0;-1:-1:-1;14099:134:0;13872:368;;;;13773:467;;;:::o;14248:642::-;14331:17;14362:14;14378:13;14393:20;14417:14;:12;:14::i;:::-;14361:70;;;;;;14461:6;14446:12;:21;14442:441;;;14602:6;14579:20;14589:9;14579;:20::i;:::-;:29;;;;:::i;:::-;14533:9;-1:-1:-1;;;;;14523:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14514:43;;:6;:43;:::i;:::-;14513:96;;;;:::i;:::-;14484:125;;14442:441;;;14631:12;;;;14627:256;;;14660:19;14707:1;14698:6;:10;:23;;;;;14720:1;14712:5;:9;14698:23;14694:178;;;14777:14;14785:6;14777:5;:14;:::i;:::-;14757:15;14766:6;14757;:15;:::i;:::-;14756:36;;;;:::i;:::-;14742:50;-1:-1:-1;14835:20:0;14849:6;14742:50;14835:20;:::i;:::-;14819:12;:36;;14811:45;;;;;14627:256;14350:540;;;14248:642;;;:::o;18185:422::-;-1:-1:-1;;;;;18355:17:0;;;;;;:9;:17;;;;;;:27;;18375:7;;18355:27;:::i;:::-;-1:-1:-1;;;;;18335:17:0;;;;;;:9;:17;;;;;:47;;;;18431:3;18414:13;18424:3;18414:7;:13;:::i;:::-;18413:21;;;;:::i;:::-;18393:41;-1:-1:-1;18449:13:0;;18445:91;;18501:11;;18479:45;;18493:6;;-1:-1:-1;;;;;18501:11:0;18514:9;18479:13;:45::i;:::-;18546:53;18560:6;18568:9;18579:19;18589:9;18579:7;:19;:::i;:::-;18546:13;:53::i;:::-;18324:283;18185:422;;;;:::o;18859:4562::-;-1:-1:-1;;;;;19067:17:0;;;;;;:9;:17;;;;;;:27;;19087:7;;19067:27;:::i;:::-;-1:-1:-1;;;;;19047:17:0;;;;;;:9;:17;;;;;:47;;;;19135:4215;;;;19163:11;;;;;;19376:21;;19372:2255;;19431:137;19473:6;19502:7;19532:17;19431:19;:137::i;:::-;19418:150;;;;:::i;:::-;;;19372:2255;;;-1:-1:-1;;;;;19594:24:0;;;;;;:13;:24;;;;;;;;19590:2037;;;19672:4;19663:13;;19695:26;19724:21;:19;:21::i;:::-;19695:50;;19811:5;19789:18;;19779:7;:28;;;;:::i;:::-;19778:38;;;;:::i;:::-;19764:52;;19876:5;19861:11;;19851:7;:21;;;;:::i;:::-;19850:31;;;;:::i;:::-;19835:46;;19949:5;19930:15;;19920:7;:25;;;;:::i;:::-;19919:35;;;;:::i;:::-;19900:54;;20016:5;20000:12;;19990:7;:22;;;;:::i;:::-;19989:32;;;;:::i;:::-;19973:48;;20094:5;20070:9;:20;;;20060:7;:30;;;;:::i;:::-;20059:40;;;;:::i;:::-;20135:18;;;;20040:59;;-1:-1:-1;20209:5:0;20187:18;20135;20187:11;:18;:::i;:::-;20186:28;;;;:::i;:::-;20172:42;-1:-1:-1;20272:5:0;20249:19;20264:4;20249:12;:19;:::i;:::-;20248:29;;;;:::i;:::-;20233:44;-1:-1:-1;20343:5:0;20316:23;20335:4;20316:16;:23;:::i;:::-;20315:33;;;;:::i;:::-;20296:52;-1:-1:-1;20408:5:0;20384:20;20400:4;20384:13;:20;:::i;:::-;20383:30;;;;:::i;:::-;20367:46;;19620:809;;19590:2037;;;-1:-1:-1;;;;;20439:21:0;;;;;;:13;:21;;;;;;;;20435:1192;;;20504:26;20533:21;:19;:21::i;:::-;20504:50;;20619:5;20598:17;;20588:7;:27;;;;:::i;:::-;20587:37;;;;:::i;:::-;20573:51;;20683:5;20669:10;;20659:7;:20;;;;:::i;:::-;20658:30;;;;:::i;:::-;20643:45;;20755:5;20737:14;;20727:7;:24;;;;:::i;:::-;20726:34;;;;:::i;:::-;20707:53;;20821:5;20806:11;;20796:7;:21;;;;:::i;:::-;20795:31;;;;:::i;:::-;20862:17;;;;20779:47;;-1:-1:-1;20935:5:0;20913:18;20862:17;20913:11;:18;:::i;:::-;20912:28;;;;:::i;:::-;20898:42;-1:-1:-1;20998:5:0;20975:19;20990:4;20975:12;:19;:::i;:::-;20974:29;;;;:::i;:::-;20959:44;-1:-1:-1;21069:5:0;21042:23;21061:4;21042:16;:23;:::i;:::-;21041:33;;;;:::i;:::-;21022:52;-1:-1:-1;21134:5:0;21110:20;21126:4;21110:13;:20;:::i;:::-;21109:30;;;;:::i;:::-;21217:16;;;21231:1;21217:16;;;;;;;;;21093:46;;-1:-1:-1;21193:21:0;;21217:16;;;;;;;;;;;-1:-1:-1;21217:16:0;21193:40;;21262:5;21252:4;21257:1;21252:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;21252:15:0;;;-1:-1:-1;;;;;21252:15:0;;;;;21296:5;21286:4;21291:1;21286:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;21286:15:0;;;-1:-1:-1;;;;;21286:15:0;;;;;21338:4;21320;21325:1;21320:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;21320:23:0;;;-1:-1:-1;;;;;21320:23:0;;;;;21391:11;-1:-1:-1;;;;;21391:24:0;;21438:7;21468:4;21391:100;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21391:100:0;;;;;;;;;;;;:::i;:::-;21492:1;21391:103;;;;;;;;:::i;:::-;;;;;;;21362:14;:25;21377:9;-1:-1:-1;;;;;21362:25:0;-1:-1:-1;;;;;21362:25:0;;;;;;;;;;;;;:132;;;;;;;:::i;:::-;;;;-1:-1:-1;20435:1192:0;;-1:-1:-1;;;;20435:1192:0;;21606:5;21590:12;;21580:7;:22;;;;:::i;:::-;21579:32;;;;:::i;:::-;21563:48;;20435:1192;21645:20;;21641:165;;21686:29;21699:16;21686:29;;:::i;:::-;;;21734:56;21748:6;21764;21773:16;21734:13;:56::i;:::-;21824:15;;21820:159;;21860:24;21873:11;21860:24;;:::i;:::-;;;21903:60;21917:6;21933:15;21951:11;21903:13;:60::i;:::-;21997:16;;21993:162;;22034:25;22047:12;22034:25;;:::i;:::-;;;22078:61;22092:6;22108:15;22126:12;22078:13;:61::i;:::-;22173:20;;22169:260;;22214:29;22227:16;22214:29;;:::i;:::-;;;22262:151;22298:6;22335:19;22378:16;22262:13;:151::i;:::-;22447:17;;22443:154;;22485:26;22498:13;22485:26;;:::i;:::-;;;22530:51;22544:6;22560:4;22567:13;22530;:51::i;:::-;22615:6;:17;;;;-1:-1:-1;22626:6:0;;;;22625:7;22615:17;22611:728;;;22653:28;22684:24;22702:4;22684:9;:24::i;:::-;22653:55;-1:-1:-1;22727:27:0;22781:3;22758:19;:13;22774:3;22758:19;:::i;:::-;22757:27;;;;:::i;:::-;22727:57;;22829:20;22807:19;:42;22803:133;;;-1:-1:-1;22896:20:0;22803:133;22954:23;22980:80;23022:19;23032:9;23022:7;:19;:::i;:::-;22980;:80::i;:::-;22954:106;-1:-1:-1;23083:19:0;;23079:172;;23127:28;23140:15;23127:28;;:::i;:::-;;;23178:53;23192:6;23208:4;23215:15;23178:13;:53::i;:::-;23269:54;23286:19;23307:15;23269:16;:54::i;:::-;22634:705;;;22611:728;19148:4202;;;;;;19135:4215;23360:53;23374:6;23382:9;23393:19;23403:9;23393:7;:19;:::i;37483:1434::-;37552:4;;-1:-1:-1;;;;;37552:4:0;37541:8;37571:26;;;37567:65;;37614:7;37483:1434;:::o;37567:65::-;37642:13;37658:3;-1:-1:-1;;;;;37658:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37642:33;;37695:8;37690:1;:13;37686:52;;37720:7;;37483:1434;:::o;37686:52::-;37774:18;;;37809:35;37827:15;37809:9;:35::i;:::-;:53;37805:92;;;37879:7;;;37483:1434;:::o;37805:92::-;37909:14;37926:26;37944:8;37926:15;:26;:::i;:::-;37909:43;;37972:6;37967:1;:11;37963:50;;37995:7;;;;37483:1434;:::o;37963:50::-;38025:15;38055:18;38088:15;38106:9;38088:27;;38128:782;38145:3;38135:7;:13;:38;;;;;38165:8;38152:10;:21;38135:38;38128:782;;;38213:8;38194:15;;:27;38190:87;;38260:1;38242:15;:19;38190:87;38296:10;:31;38311:15;;38307:1;:19;;;;:::i;:::-;38296:31;;;;;;;;;;;-1:-1:-1;38296:31:0;;;;38291:457;;38348:19;38370:3;-1:-1:-1;;;;;38370:16:0;;38391:15;;38387:1;:19;;;;:::i;:::-;38370:37;;;;;;;;;;;;;6872:25:1;;6860:2;6845:18;;6726:177;38370:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38348:59;-1:-1:-1;;;;;;38452:25:0;;;;;;:59;;-1:-1:-1;38489:6:0;-1:-1:-1;;;;;38481:30:0;;;;38452:59;38426:307;;;38554:159;38603:15;38646:11;38684:6;38554:14;:159::i;:::-;38329:419;38291:457;38795:9;38785:19;;:7;:19;:::i;:::-;38774:31;;:7;:31;:::i;:::-;38764:41;;38830:9;38854:15;:17;;38820:19;;-1:-1:-1;38854:15:0;:17;;;:::i;:::-;;;;;;38886:12;;;;;:::i;:::-;;;;38128:782;;;37530:1387;;;;;;;37483:1434;:::o;34246:2021::-;34329:17;;;34361:35;34379:15;34361:9;:35::i;:::-;:53;34357:92;;;34431:7;34246:2021;:::o;34357:92::-;34668:104;;-1:-1:-1;;;34668:104:0;;34714:42;34668:104;;;7054:51:1;34485:9:0;;34459:16;;-1:-1:-1;;;;;34668:19:0;;;;;7027:18:1;;34668:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34639:12;;34619:33;;-1:-1:-1;;;34619:33:0;;-1:-1:-1;;;;;34639:12:0;;;34619:33;;;7054:51:1;34619:19:0;;;;;;7027:18:1;;34619:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34567:36;;-1:-1:-1;;;34567:36:0;;34595:6;34567:36;;;7054:51:1;-1:-1:-1;;;;;34567:19:0;;;;;7027:18:1;;34567:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34528:9;-1:-1:-1;;;;;34528:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;:124;;;;:::i;:::-;:244;;;;:::i;:::-;34506:266;;34792:14;34787:1;:19;34783:58;;34823:7;;;34246:2021;:::o;34783:58::-;34967:11;:18;34853:19;;;;;;;;;35079:9;35061:27;;35099:19;35121:20;:18;:20::i;:::-;35099:42;;35154:1106;35171:3;35161:7;:13;:46;;;;;35191:16;35178:10;:29;35161:46;35154:1106;;;35246:16;35228:14;;:34;35224:93;;35300:1;35283:14;:18;35224:93;35345:11;35357:14;;35345:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35345:27:0;35392:30;;;:17;:30;;;;;;;;35345:27;;-1:-1:-1;35392:30:0;;35387:712;;35457:32;;-1:-1:-1;;;35457:32:0;;-1:-1:-1;;;;;7072:32:1;;;35457::0;;;7054:51:1;35457:19:0;;;;;7027:18:1;;35457:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35527:22:0;;35508:16;35527:22;;;:9;:22;;;;;:31;35443:46;;-1:-1:-1;35581:22:0;;;35577:93;;;35642:8;35628:22;;35577:93;35707:11;35692;:26;35688:396;;35786:14;35753:29;35771:11;35753:15;:29;:::i;:::-;35752:48;;;;:::i;:::-;35743:57;-1:-1:-1;35827:10:0;;35823:242;;35866:175;35919:15;35966:11;36008:6;35866:14;:175::i;:::-;35424:675;35387:712;36146:9;36136:19;;:7;:19;:::i;:::-;36125:31;;:7;:31;:::i;:::-;36115:41;;36181:9;36205:14;:16;;36171:19;;-1:-1:-1;36205:14:0;:16;;;:::i;:::-;;;;;;36236:12;;;;;:::i;:::-;;;;35154:1106;;;34292:1975;;;;;;;;;;;34246:2021;:::o;44744:1451::-;44814:5;;-1:-1:-1;;;;;44814:5:0;44803:8;44834:26;;;44830:65;;44877:7;44744:1451;:::o;44830:65::-;44905:13;44921:3;-1:-1:-1;;;;;44921:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44905:33;;44958:8;44953:1;:13;44949:52;;44983:7;;44744:1451;:::o;44949:52::-;45037:19;;;45073:39;45091:19;45073:9;:39::i;:::-;:57;45069:96;;;45147:7;;;44744:1451;:::o;45069:96::-;45177:14;45194:26;45212:8;45194:15;:26;:::i;:::-;45177:43;;45240:6;45235:1;:11;45231:50;;45263:7;;;;44744:1451;:::o;45231:50::-;45293:15;45323:18;45356:15;45374:9;45356:27;;45396:792;45413:3;45403:7;:13;:38;;;;;45433:8;45420:10;:21;45403:38;45396:792;;;45482:8;45462:16;;:28;45458:89;;45530:1;45511:16;:20;45458:89;45566:11;:33;45582:16;;45578:1;:20;;;;:::i;:::-;45566:33;;;;;;;;;;;-1:-1:-1;45566:33:0;;;;45561:464;;45620:19;45642:3;-1:-1:-1;;;;;45642:16:0;;45663;;45659:1;:20;;;;:::i;:::-;45642:38;;;;;;;;;;;;;6872:25:1;;6860:2;6845:18;;6726:177;45642:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45620:60;-1:-1:-1;;;;;;45725:25:0;;;;;;:59;;-1:-1:-1;45762:6:0;-1:-1:-1;;;;;45754:30:0;;;;45725:59;45699:311;;;45827:163;45876:19;45923:11;45961:6;45827:14;:163::i;:::-;45601:424;45561:464;46072:9;46062:19;;:7;:19;:::i;:::-;46051:31;;:7;:31;:::i;:::-;46041:41;;46107:9;46131:16;:18;;46097:19;;-1:-1:-1;46131:16:0;:18;;;:::i;:::-;;;;;;46164:12;;;;;:::i;:::-;;;;45396:792;;18615:236;-1:-1:-1;;;;;18764:17:0;;;;;;:9;:17;;;;;;:27;;18784:7;;18764:27;:::i;:::-;-1:-1:-1;;;;;18744:17:0;;;;;;:9;:17;;;;;:47;18802:41;18754:6;18824:9;18835:7;18802:13;:41::i;14898:2580::-;15043:17;15062:22;15097:23;15133:9;-1:-1:-1;;;;;15123:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15097:60;;15168:13;15197:11;-1:-1:-1;;;;;15197:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15184:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15168:59;;15238:10;15268:1;-1:-1:-1;;;;;15251:19:0;:5;-1:-1:-1;;;;;15251:19:0;;;15238:32;;15281:14;15308:9;-1:-1:-1;;;;;15298:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15281:45;;15341:5;15337:1814;;;15367:11;;15363:1777;;15399:13;15415:18;15425:7;15430:2;15425;:7;:::i;:::-;15415:9;:18::i;:::-;15399:34;;15452:17;15472;15482:6;15472:9;:17::i;:::-;15452:37;;15520:9;15512:5;:17;15508:1617;;;15554:17;;-1:-1:-1;;15674:11:0;-1:-1:-1;;;;;15666:100:0;;15636:1327;;15888:17;15896:9;15888:5;:17;:::i;:::-;15869:37;;:15;:37;:::i;:::-;:41;;15909:1;15869:41;:::i;:::-;15857:53;-1:-1:-1;15965:13:0;:9;15977:1;15965:13;:::i;:::-;15951:10;:5;15959:2;15951:10;:::i;:::-;:28;;;;:::i;:::-;15937:42;;15636:1327;;;-1:-1:-1;;16047:11:0;-1:-1:-1;;;;;16039:100:0;;16009:954;;16268:17;16276:9;16268:5;:17;:::i;:::-;16249:37;;:15;:37;:::i;:::-;16237:49;-1:-1:-1;16339:9:0;16327;:5;16335:1;16327:9;:::i;16009:954::-;-1:-1:-1;;16416:11:0;-1:-1:-1;;;;;16408:100:0;;16378:585;;16627:17;16635:9;16627:5;:17;:::i;:::-;16608:37;;:15;:37;:::i;:::-;:41;;16648:1;16608:41;:::i;:::-;16596:53;-1:-1:-1;16702:9:0;16690;:5;16698:1;16690:9;:::i;16378:585::-;16859:17;16867:9;16859:5;:17;:::i;:::-;16840:37;;:15;:37;:::i;:::-;16828:49;-1:-1:-1;16930:9:0;16918;:5;16926:1;16918:9;:::i;:::-;:21;;;;:::i;:::-;16904:35;;16378:585;17002:23;17014:11;17002:9;:23;:::i;:::-;16985:40;-1:-1:-1;17052:18:0;;17048:57;;17072:33;17091:14;17072:33;;:::i;:::-;;;17048:57;15531:1594;;15508:1617;15380:1760;;15363:1777;17161:15;17179:13;17190:2;17179:8;:13;:::i;:::-;17161:31;;17207:15;17226:1;17207:20;17203:268;;17286:4;17256:27;17266:16;17276:6;17266:7;:16;:::i;17256:27::-;:34;;;;:::i;:::-;17244:46;;17203:268;;;17335:124;17392:2;17363:25;17373:15;17363:7;:25;:::i;:::-;17362:32;;;;:::i;:::-;17442:2;17414:24;17423:15;17414:6;:24;:::i;:::-;17413:31;;;;:::i;:::-;17335:8;:124::i;:::-;17323:136;;17203:268;15086:2392;;;;;14898:2580;;;;;;;:::o;28093:213::-;-1:-1:-1;;;;;28230:13:0;;;;;;:9;:13;;;;;;:23;;28246:7;;28230:23;:::i;:::-;-1:-1:-1;;;;;28214:13:0;;;;;;;:9;:13;;;;;;;:39;;;;28269:29;;;;;;;;;;28290:7;6872:25:1;;6860:2;6845:18;;6726:177;24111:1870:0;24319:9;24251:17;24309:20;;;:9;:20;;;;;24429;;;;24363:17;;24251;;24429:20;24363:50;;24396:17;;24363:50;:::i;:::-;:86;;;;:::i;:::-;24340:109;-1:-1:-1;24489:17:0;;24578:32;;;24574:98;;;-1:-1:-1;24648:12:0;24574:98;24682:19;24716:22;;24712:414;;24755:40;24777:18;24755:40;;:::i;:::-;;;24951:5;24918:12;;24876:17;24854:18;24844:7;:28;;;;:::i;:::-;24843:50;;;;:::i;:::-;24842:88;;;;:::i;:::-;24841:115;;;;:::i;:::-;24810:146;-1:-1:-1;24971:24:0;24810:146;24971:24;;:::i;:::-;;-1:-1:-1;25014:15:0;;25010:105;;25050:49;25064:6;25080:4;25087:11;25050:13;:49::i;:::-;24101:1;25203:20;;:37;;;;:::i;:::-;25185:15;;:55;;;;:::i;:::-;25156:12;:84;25138:781;;25375:12;;25408:5;;25333:17;25301:28;25311:18;25301:7;:28;:::i;:::-;25300:50;;;;:::i;:::-;25299:88;;;;:::i;:::-;25298:115;;;;:::i;:::-;25267:146;-1:-1:-1;25428:24:0;25267:146;25428:24;;:::i;:::-;;-1:-1:-1;25471:15:0;;25467:105;;25507:49;25521:6;25537:4;25544:11;25507:13;:49::i;:::-;25138:781;;;25604:24;25723:5;25704:15;;25683:17;25644:18;25634:7;:28;;;;:::i;:::-;25633:67;;;;:::i;:::-;25632:87;;;;:::i;:::-;25631:97;;;;:::i;:::-;25604:124;-1:-1:-1;25747:20:0;;25743:165;;25788:29;25801:16;25788:29;;:::i;:::-;;;25836:56;25850:6;25866;25875:16;25836:13;:56::i;:::-;25589:330;25138:781;25955:18;25931:8;:20;;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;24111:1870:0;;;-1:-1:-1;;;;;;;;;24111:1870:0:o;39585:892::-;39768:16;;;39782:1;39768:16;;;;;;;;;39671:23;;39724:9;;39671:23;;39768:16;;;;;;;;;;-1:-1:-1;39768:16:0;39744:40;;39813:4;39795;39800:1;39795:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39795:23:0;;;-1:-1:-1;;;;;39795:23:0;;;;;39839:5;39829:4;39834:1;39829:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;39829:15:0;;;-1:-1:-1;;;;;39829:15:0;;;;;39865:5;39855:4;39860:1;39855:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39855:15:0;;;:7;;;;;;;;;:15;39905:47;;-1:-1:-1;;;39905:47:0;;39881:21;;39905:11;:25;;;;:47;;39931:14;;39947:4;;39905:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39905:47:0;;;;;;;;;;;;:::i;:::-;39881:71;;39963:18;39984:7;40009:1;39992:7;:14;:18;;;;:::i;:::-;39984:27;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;40048:22:0;;40024:21;40048:22;;;:14;:22;;;;;;;39984:27;;-1:-1:-1;40048:22:0;40114:26;;;40110:360;;;-1:-1:-1;;;;;40157:22:0;;40182:1;40157:22;;;:14;:22;;;;;:26;40211;40224:13;40211:10;:26;:::i;:::-;40198:39;-1:-1:-1;40252:20:0;40307:10;40276:27;40198:39;40276:14;:27;:::i;:::-;40275:42;;;;:::i;:::-;40252:65;;40384:5;40366:14;;40351:12;:29;;;;:::i;:::-;40350:39;;;;:::i;:::-;40332:57;;40142:259;40110:360;;;-1:-1:-1;;;;;40422:22:0;;;;;;:14;:22;;;;;:36;;40448:10;;40422:22;:36;;40448:10;;40422:36;:::i;:::-;;;;-1:-1:-1;;40110:360:0;39696:781;;;;;;39585:892;;;:::o;25989:2096::-;6007:6;:13;;-1:-1:-1;;6007:13:0;6016:4;6007:13;;;26121:16;;:40;::::1;;;-1:-1:-1::0;26141:20:0;;26121:40:::1;26178:7;26117:79;26210:19:::0;;26206:1454:::1;;26246:21;26331:14;;26289:21;;26271:15;:39;;;;:::i;:::-;26270:75;;;;:::i;:::-;26246:99:::0;-1:-1:-1;26364:17:0;;26360:119:::1;;26402:61;26425:4;26440:6;26449:13;26402:14;:61::i;:::-;26493:16;26568:14;;26531:16;;26513:15;:34;;;;:::i;:::-;26512:70;;;;:::i;:::-;26493:89:::0;-1:-1:-1;26601:12:0;;26597:200:::1;;26634:147;26679:4;26715:15;26754:8;26634:14;:147::i;:::-;26811:17;26888:14;;26850:17;;26832:15;:35;;;;:::i;:::-;26831:71;;;;:::i;:::-;26811:91:::0;-1:-1:-1;26921:13:0;;26917:202:::1;;26955:148;27000:4;27036:15;27075:9;26955:14;:148::i;:::-;27133:21;27218:14;;27176:21;;27158:15;:39;;;;:::i;:::-;27157:75;;;;:::i;:::-;27133:99:::0;-1:-1:-1;27251:17:0;;27247:214:::1;;27289:156;27334:4;27370:19;27413:13;27289:14;:156::i;:::-;27635:13:::0;27606:9;27578:8;27510:48:::1;27545:13:::0;27510:15;:48:::1;:::i;:::-;:76;;;;:::i;:::-;:105;;;;:::i;:::-;:138;;;;:::i;:::-;27475:173;;26231:1429;;;;26206:1454;27670:30;27685:15:::0;27670:30;::::1;:::i;:::-;::::0;-1:-1:-1;27711:55:0;;27748:7:::1;27711:55;27800:16;::::0;;27814:1:::1;27800:16:::0;;;;;::::1;::::0;;27776:21:::1;::::0;27800:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27800:16:0::1;27776:40;;27845:4;27827;27832:1;27827:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;27827:23:0::1;;;-1:-1:-1::0;;;;;27827:23:0::1;;;::::0;::::1;27871:5;27861:4;27866:1;27861:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27861:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;28025:11:::1;::::0;27887:190:::1;::::0;-1:-1:-1;;;27887:190:0;;:11:::1;:62:::0;::::1;::::0;::::1;::::0;:190:::1;::::0;27964:11;;27990:1:::1;::::0;28006:4;;28025:11;::::1;::::0;28051:15:::1;::::0;27887:190:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26106:1979;6031:1;-1:-1:-1::0;;6043:6:0;:14;;-1:-1:-1;;6043:14:0;;;25989:2096::o;3536:303::-;3581:6;3608:1;3604;:5;3600:232;;;-1:-1:-1;3630:1:0;3646:6;3655:5;3659:1;3630;3655:5;:::i;:::-;:9;;3663:1;3655:9;:::i;:::-;3646:18;;3679:92;3690:1;3686;:5;3679:92;;;3716:1;-1:-1:-1;3716:1:0;3754;3716;3741:5;3716:1;3741;:5;:::i;:::-;:9;;;;:::i;:::-;3740:15;;;;:::i;:::-;3736:19;;3679:92;;3600:232;3792:6;;3788:44;;-1:-1:-1;3819:1:0;3536:303;;;:::o;3432:96::-;3484:6;3511:1;3507;:5;:13;;3519:1;3507:13;;;3515:1;3507:13;3503:17;3432:96;-1:-1:-1;;;3432:96:0:o;1019:127:1:-;1080:10;1075:3;1071:20;1068:1;1061:31;1111:4;1108:1;1101:15;1135:4;1132:1;1125:15;1151:168;1224:9;;;1255;;1272:15;;;1266:22;;1252:37;1242:71;;1293:18;;:::i;1324:217::-;1364:1;1390;1380:132;;1434:10;1429:3;1425:20;1422:1;1415:31;1469:4;1466:1;1459:15;1497:4;1494:1;1487:15;1380:132;-1:-1:-1;1526:9:1;;1324:217::o;2158:306::-;2246:6;2254;2262;2315:2;2303:9;2294:7;2290:23;2286:32;2283:52;;;2331:1;2328;2321:12;2283:52;2360:9;2354:16;2344:26;;2410:2;2399:9;2395:18;2389:25;2379:35;;2454:2;2443:9;2439:18;2433:25;2423:35;;2158:306;;;;;:::o;2469:125::-;2534:9;;;2555:10;;;2552:36;;;2568:18;;:::i;2599:127::-;2660:10;2655:3;2651:20;2648:1;2641:31;2691:4;2688:1;2681:15;2715:4;2712:1;2705:15;2731:127;2792:10;2787:3;2783:20;2780:1;2773:31;2823:4;2820:1;2813:15;2847:4;2844:1;2837:15;2863:461;2916:3;2954:5;2948:12;2981:6;2976:3;2969:19;3007:4;3036:2;3031:3;3027:12;3020:19;;3073:2;3066:5;3062:14;3094:1;3104:195;3118:6;3115:1;3112:13;3104:195;;;3183:13;;-1:-1:-1;;;;;3179:39:1;3167:52;;3239:12;;;;3274:15;;;;3215:1;3133:9;3104:195;;;-1:-1:-1;3315:3:1;;2863:461;-1:-1:-1;;;;;2863:461:1:o;3329:332::-;3536:6;3525:9;3518:25;3579:2;3574;3563:9;3559:18;3552:30;3499:4;3599:56;3651:2;3640:9;3636:18;3628:6;3599:56;:::i;:::-;3591:64;3329:332;-1:-1:-1;;;;3329:332:1:o;3666:275::-;3737:2;3731:9;3802:2;3783:13;;-1:-1:-1;;3779:27:1;3767:40;;3837:18;3822:34;;3858:22;;;3819:62;3816:88;;;3884:18;;:::i;:::-;3920:2;3913:22;3666:275;;-1:-1:-1;3666:275:1:o;3946:183::-;4006:4;4039:18;4031:6;4028:30;4025:56;;;4061:18;;:::i;:::-;-1:-1:-1;4106:1:1;4102:14;4118:4;4098:25;;3946:183::o;4134:881::-;4229:6;4260:2;4303;4291:9;4282:7;4278:23;4274:32;4271:52;;;4319:1;4316;4309:12;4271:52;4352:9;4346:16;4385:18;4377:6;4374:30;4371:50;;;4417:1;4414;4407:12;4371:50;4440:22;;4493:4;4485:13;;4481:27;-1:-1:-1;4471:55:1;;4522:1;4519;4512:12;4471:55;4551:2;4545:9;4574:60;4590:43;4630:2;4590:43;:::i;:::-;4574:60;:::i;:::-;4668:15;;;4750:1;4746:10;;;;4738:19;;4734:28;;;4699:12;;;;4774:19;;;4771:39;;;4806:1;4803;4796:12;4771:39;4830:11;;;;4850:135;4866:6;4861:3;4858:15;4850:135;;;4932:10;;4920:23;;4883:12;;;;4963;;;;4850:135;;;5004:5;4134:881;-1:-1:-1;;;;;;;4134:881:1:o;5020:248::-;5088:6;5096;5149:2;5137:9;5128:7;5124:23;5120:32;5117:52;;;5165:1;5162;5155:12;5117:52;-1:-1:-1;;5188:23:1;;;5258:2;5243:18;;;5230:32;;-1:-1:-1;5020:248:1:o;5273:131::-;-1:-1:-1;;;;;5348:31:1;;5338:42;;5328:70;;5394:1;5391;5384:12;5409:247;5468:6;5521:2;5509:9;5500:7;5496:23;5492:32;5489:52;;;5537:1;5534;5527:12;5489:52;5576:9;5563:23;5595:31;5620:5;5595:31;:::i;5853:548::-;5965:4;5994:2;6023;6012:9;6005:21;6055:6;6049:13;6098:6;6093:2;6082:9;6078:18;6071:34;6123:1;6133:140;6147:6;6144:1;6141:13;6133:140;;;6242:14;;;6238:23;;6232:30;6208:17;;;6227:2;6204:26;6197:66;6162:10;;6133:140;;;6137:3;6322:1;6317:2;6308:6;6297:9;6293:22;6289:31;6282:42;6392:2;6385;6381:7;6376:2;6368:6;6364:15;6360:29;6349:9;6345:45;6341:54;6333:62;;;;5853:548;;;;:::o;6406:315::-;6474:6;6482;6535:2;6523:9;6514:7;6510:23;6506:32;6503:52;;;6551:1;6548;6541:12;6503:52;6590:9;6577:23;6609:31;6634:5;6609:31;:::i;:::-;6659:5;6711:2;6696:18;;;;6683:32;;-1:-1:-1;;;6406:315:1:o;7116:180::-;7175:6;7228:2;7216:9;7207:7;7203:23;7199:32;7196:52;;;7244:1;7241;7234:12;7196:52;-1:-1:-1;7267:23:1;;7116:180;-1:-1:-1;7116:180:1:o;7301:118::-;7387:5;7380:13;7373:21;7366:5;7363:32;7353:60;;7409:1;7406;7399:12;7424:382;7489:6;7497;7550:2;7538:9;7529:7;7525:23;7521:32;7518:52;;;7566:1;7563;7556:12;7518:52;7605:9;7592:23;7624:31;7649:5;7624:31;:::i;:::-;7674:5;-1:-1:-1;7731:2:1;7716:18;;7703:32;7744:30;7703:32;7744:30;:::i;:::-;7793:7;7783:17;;;7424:382;;;;;:::o;8031:456::-;8108:6;8116;8124;8177:2;8165:9;8156:7;8152:23;8148:32;8145:52;;;8193:1;8190;8183:12;8145:52;8232:9;8219:23;8251:31;8276:5;8251:31;:::i;:::-;8301:5;-1:-1:-1;8358:2:1;8343:18;;8330:32;8371:33;8330:32;8371:33;:::i;:::-;8031:456;;8423:7;;-1:-1:-1;;;8477:2:1;8462:18;;;;8449:32;;8031:456::o;8492:309::-;8557:6;8565;8618:2;8606:9;8597:7;8593:23;8589:32;8586:52;;;8634:1;8631;8624:12;8586:52;8670:9;8657:23;8647:33;;8730:2;8719:9;8715:18;8702:32;8743:28;8765:5;8743:28;:::i;9262:251::-;9070:12;;9058:25;;9132:4;9121:16;;;9115:23;9099:14;;;9092:47;9188:4;9177:16;;;9171:23;9155:14;;;9148:47;9244:4;9233:16;;;9227:23;9211:14;;;9204:47;9448:3;9433:19;;9461:46;8995:262;9518:707;9741:2;9793:21;;;9863:13;;9766:18;;;9885:22;;;9712:4;;9741:2;9964:15;;;;9938:2;9923:18;;;9712:4;10007:192;10021:6;10018:1;10015:13;10007:192;;;10070:47;10113:3;10104:6;10098:13;9076:5;9070:12;9065:3;9058:25;9132:4;9125:5;9121:16;9115:23;9108:4;9103:3;9099:14;9092:47;9188:4;9181:5;9177:16;9171:23;9164:4;9159:3;9155:14;9148:47;9244:4;9237:5;9233:16;9227:23;9220:4;9215:3;9211:14;9204:47;;;8995:262;10070:47;10174:15;;;;10146:4;10137:14;;;;;10043:1;10036:9;10007:192;;;-1:-1:-1;10216:3:1;;9518:707;-1:-1:-1;;;;;;9518:707:1:o;10554:737::-;10608:5;10661:3;10654:4;10646:6;10642:17;10638:27;10628:55;;10679:1;10676;10669:12;10628:55;10715:6;10702:20;10741:4;10765:60;10781:43;10821:2;10781:43;:::i;10765:60::-;10859:15;;;10945:1;10941:10;;;;10929:23;;10925:32;;;10890:12;;;;10969:15;;;10966:35;;;10997:1;10994;10987:12;10966:35;11033:2;11025:6;11021:15;11045:217;11061:6;11056:3;11053:15;11045:217;;;11141:3;11128:17;11158:31;11183:5;11158:31;:::i;:::-;11202:18;;11240:12;;;;11078;;11045:217;;;-1:-1:-1;11280:5:1;10554:737;-1:-1:-1;;;;;;10554:737:1:o;11296:416::-;11389:6;11397;11450:2;11438:9;11429:7;11425:23;11421:32;11418:52;;;11466:1;11463;11456:12;11418:52;11506:9;11493:23;11539:18;11531:6;11528:30;11525:50;;;11571:1;11568;11561:12;11525:50;11594:61;11647:7;11638:6;11627:9;11623:22;11594:61;:::i;:::-;11584:71;11702:2;11687:18;;;;11674:32;;-1:-1:-1;;;;11296:416:1:o;11949:477::-;12039:6;12047;12100:2;12088:9;12079:7;12075:23;12071:32;12068:52;;;12116:1;12113;12106:12;12068:52;12156:9;12143:23;12189:18;12181:6;12178:30;12175:50;;;12221:1;12218;12211:12;12175:50;12244:61;12297:7;12288:6;12277:9;12273:22;12244:61;:::i;:::-;12234:71;;;12355:2;12344:9;12340:18;12327:32;12368:28;12390:5;12368:28;:::i;12684:385::-;12770:6;12778;12786;12794;12847:3;12835:9;12826:7;12822:23;12818:33;12815:53;;;12864:1;12861;12854:12;12815:53;-1:-1:-1;;12887:23:1;;;12957:2;12942:18;;12929:32;;-1:-1:-1;13008:2:1;12993:18;;12980:32;;13059:2;13044:18;13031:32;;-1:-1:-1;12684:385:1;-1:-1:-1;12684:385:1:o;13074:454::-;13169:6;13177;13185;13193;13201;13254:3;13242:9;13233:7;13229:23;13225:33;13222:53;;;13271:1;13268;13261:12;13222:53;-1:-1:-1;;13294:23:1;;;13364:2;13349:18;;13336:32;;-1:-1:-1;13415:2:1;13400:18;;13387:32;;13466:2;13451:18;;13438:32;;-1:-1:-1;13517:3:1;13502:19;13489:33;;-1:-1:-1;13074:454:1;-1:-1:-1;13074:454:1:o;14001:388::-;14069:6;14077;14130:2;14118:9;14109:7;14105:23;14101:32;14098:52;;;14146:1;14143;14136:12;14098:52;14185:9;14172:23;14204:31;14229:5;14204:31;:::i;:::-;14254:5;-1:-1:-1;14311:2:1;14296:18;;14283:32;14324:33;14283:32;14324:33;:::i;14790:325::-;14992:2;14974:21;;;15031:1;15011:18;;;15004:29;-1:-1:-1;;;15064:2:1;15049:18;;15042:32;15106:2;15091:18;;14790:325::o;15120:380::-;15199:1;15195:12;;;;15242;;;15263:61;;15317:4;15309:6;15305:17;15295:27;;15263:61;15370:2;15362:6;15359:14;15339:18;15336:38;15333:161;;15416:10;15411:3;15407:20;15404:1;15397:31;15451:4;15448:1;15441:15;15479:4;15476:1;15469:15;15784:245;15851:6;15904:2;15892:9;15883:7;15879:23;15875:32;15872:52;;;15920:1;15917;15910:12;15872:52;15952:9;15946:16;15971:28;15993:5;15971:28;:::i;16034:128::-;16101:9;;;16122:11;;;16119:37;;;16136:18;;:::i;16167:135::-;16206:3;16227:17;;;16224:43;;16247:18;;:::i;:::-;-1:-1:-1;16294:1:1;16283:13;;16167:135::o;16307:184::-;16377:6;16430:2;16418:9;16409:7;16405:23;16401:32;16398:52;;;16446:1;16443;16436:12;16398:52;-1:-1:-1;16469:16:1;;16307:184;-1:-1:-1;16307:184:1:o;16496:188::-;16575:13;;-1:-1:-1;;;;;16617:42:1;;16607:53;;16597:81;;16674:1;16671;16664:12;16689:450;16776:6;16784;16792;16845:2;16833:9;16824:7;16820:23;16816:32;16813:52;;;16861:1;16858;16851:12;16813:52;16884:40;16914:9;16884:40;:::i;:::-;16874:50;;16943:49;16988:2;16977:9;16973:18;16943:49;:::i;:::-;16933:59;;17035:2;17024:9;17020:18;17014:25;17079:10;17072:5;17068:22;17061:5;17058:33;17048:61;;17105:1;17102;17095:12;17048:61;17128:5;17118:15;;;16689:450;;;;;:::o;18812:251::-;18882:6;18935:2;18923:9;18914:7;18910:23;18906:32;18903:52;;;18951:1;18948;18941:12;18903:52;18983:9;18977:16;19002:31;19027:5;19002:31;:::i;19068:582::-;19367:6;19356:9;19349:25;19410:6;19405:2;19394:9;19390:18;19383:34;19453:3;19448:2;19437:9;19433:18;19426:31;19330:4;19474:57;19526:3;19515:9;19511:19;19503:6;19474:57;:::i;:::-;-1:-1:-1;;;;;19567:32:1;;;;19562:2;19547:18;;19540:60;-1:-1:-1;19631:3:1;19616:19;19609:35;19466:65;19068:582;-1:-1:-1;;;19068:582:1:o
Swarm Source
ipfs://00931ef7e540b9a07b49af0b3c51096165c09a567364d540b264cf7bcc234670
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)