Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
169,503,444,255.4377 EFOMO
Holders
418
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 4 Decimals)
Balance
1,084,626.0761 EFOMOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EtherFomo
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-16 */ /** EtherFomo - EFOMO EtherFomo $EFOMO brings an unprecedented blend of adrenaline-pumping competition and steady, dynamic rewards to the DeFi space. In the rapidly evolving landscape of decentralized finance (DeFi), EtherFomo $EFOMO stands out as an innovative token that seamlessly fuses two of the most compelling tokenomics designed to ignite the flames of Fear Of Missing Out (FOMO). This unique combination of rebase mechanics and last buy competition promises to offer both excitement and reward for its holders. Website: https://etherfomo.com/ Telegram: https://t.me/etherfomoerc Twitter: https://twitter.com/etherfomo */ // SPDX-License-Identifier: MIT pragma solidity 0.7.6; library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { require(b != -1 || a != MIN_INT256); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } interface IPair { event Sync(uint112 reserve0, uint112 reserve1); function sync() external; function initialize(address, address) external; } interface IRouter{ function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } abstract contract Ownable { address internal owner; constructor(address _owner) {owner = _owner;} modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;} function isOwner(address account) public view returns (bool) {return account == owner;} function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);} event OwnershipTransferred(address owner); } interface Jackpot { function distributeJackpot(address receiver, uint256 prize) external; } interface IERC20 { function totalSupply() external view returns (uint256); function circulatingSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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);} contract EtherFomo is IERC20, Ownable { using SafeMath for uint256; using SafeMathInt for int256; string private constant _name = 'EtherFomo'; string private constant _symbol = 'EFOMO'; uint8 public constant DECIMALS = 4; uint256 public constant MAX_UINT256 = ~uint256(0); uint8 public constant RATE_DECIMALS = 7; uint256 private constant TOTALS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 100000000000 * (10 ** DECIMALS); uint256 private constant MAX_SUPPLY = 100000000000000 * (10 ** DECIMALS); uint256 public _maxTxAmount = ( INITIAL_FRAGMENTS_SUPPLY * 200 ) / 10000; uint256 public _maxWalletToken = ( INITIAL_FRAGMENTS_SUPPLY * 200 ) / 10000; mapping(address => mapping(address => uint256)) private _allowedFragments; mapping(address => uint256) private _balances; mapping(address => bool) public _isFeeExempt; uint256 internal liquidityFee = 0; uint256 internal marketingFee = 100; uint256 internal utilityFee = 100; uint256 internal jackpotFee = 0; uint256 internal totalFee = 3000; uint256 internal sellFee = 7000; uint256 internal transferFee = 7000; uint256 internal feeDenominator = 10000; address internal pairAddress; uint256 internal swapTimes; uint256 internal swapAmount = 4; bool public swapEnabled = true; IRouter internal router; IPair internal pairContract; address public pair; bool internal inSwap; bool public _autoRebase; bool public _autoAddLiquidity; uint256 public _initRebaseStartTime; uint256 public _lastRebasedTime; uint256 public _lastRebaseAmount; uint256 public _rebaseEventNumber; uint256 public _totalSupply; uint256 private _PerFragment; uint256 public rebaseRate = 7192; uint256 public rebaseInterval = 60 minutes; uint256 public swapThreshold = ( INITIAL_FRAGMENTS_SUPPLY * 1000 ) / 100000; uint256 public minAmounttoSwap = ( INITIAL_FRAGMENTS_SUPPLY * 10 ) / 100000; uint256 public minJackpotBuy = ( INITIAL_FRAGMENTS_SUPPLY * 10 ) / 100000; address internal constant DEAD = 0x000000000000000000000000000000000000dEaD; address internal liquidityReceiver = 0x4911d970AE4FB9edc23BCA3D9a25ade6eFF62F71; address internal marketingReceiver = 0x4911d970AE4FB9edc23BCA3D9a25ade6eFF62F71; address internal utilityReceiver = 0x4911d970AE4FB9edc23BCA3D9a25ade6eFF62F71; modifier validRecipient(address to) {require(to != address(0x0)); _; } modifier swapping() {inSwap = true;_;inSwap = false;} mapping(uint256 => address) public jackpotBuyer; mapping(uint256 => address) public eventWinner; mapping(uint256 => uint256) public eventStartTime; mapping(uint256 => uint256) public eventEndTime; mapping(uint256 => uint256) public eventWinnings; mapping(uint256 => uint256) public eventRepeats; mapping(address => uint256) public totalWalletWinnings; mapping(address => bool) public jackpotIneligible; uint256 public totalWinnings; uint256 public jackpotStartTime; uint256 public jackpotEndTime; uint256 public jackpotEvent; bool public jackpotInProgress; bool public jackpotEnabled = true; uint256 internal multiplierFactor = 10 ** 36; uint256 public jackpotInterval = 0; uint256 public jackpotDuration = 15 minutes; uint256 public jackpotStepUpDuration = 60 minutes; uint256 public jackpotStepUpPercent = 50; uint256 public jackpotPrizePercent = 100; Jackpot public jackpotContract; address internal jackpotReceiver; constructor() Ownable(msg.sender) { router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); jackpotContract = Jackpot(0xe603E2ebFd3ebb041AaDABc304C242c7AD0b4F6a); pair = IFactory(router.factory()).createPair(router.WETH(), address(this)); _allowedFragments[address(this)][address(router)] = uint256(-1); _totalSupply = INITIAL_FRAGMENTS_SUPPLY; _balances[msg.sender] = TOTALS; _PerFragment = TOTALS.div(_totalSupply); _initRebaseStartTime = block.timestamp; _lastRebasedTime = block.timestamp; jackpotReceiver = address(jackpotContract); pairAddress = pair; pairContract = IPair(pair); _autoRebase = true; _autoAddLiquidity = true; _isFeeExempt[address(jackpotContract)] = true; _isFeeExempt[marketingReceiver] = true; _isFeeExempt[utilityReceiver] = true; _isFeeExempt[liquidityReceiver] = true; _isFeeExempt[jackpotReceiver] = true; _isFeeExempt[msg.sender] = true; _isFeeExempt[address(this)] = true; emit Transfer(address(0x0), msg.sender, _totalSupply); } function name() public pure override returns (string memory) {return _name;} function symbol() public pure override returns (string memory) {return _symbol;} function decimals() public pure override returns (uint8) {return DECIMALS;} function getOwner() external view override returns (address) { return owner; } function totalSupply() public view override returns (uint256) {return _totalSupply;} function manualSync() external {IPair(pair).sync();} function isNotInSwap() external view returns (bool) {return !inSwap;} function checkFeeExempt(address _addr) external view returns (bool) {return _isFeeExempt[_addr];} function approvals() external {payable(utilityReceiver).transfer(address(this).balance);} function balanceOf(address _address) public view override returns (uint256) {return _balances[_address].div(_PerFragment);} function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));} function transfer(address to, uint256 value) external override validRecipient(to) returns (bool) { _transferFrom(msg.sender, to, value); return true; } function transferFrom(address from, address to, uint256 value ) external override validRecipient(to) returns (bool) { if (_allowedFragments[from][msg.sender] != uint256(-1)) { _allowedFragments[from][msg.sender] = _allowedFragments[from][ msg.sender ].sub(value, "Insufficient Allowance");} _transferFrom(from, to, value); return true; } function _basicTransfer(address from, address to, uint256 amount) internal returns (bool) { uint256 tAmount = amount.mul(_PerFragment); _balances[from] = _balances[from].sub(tAmount); _balances[to] = _balances[to].add(tAmount); return true; } function _transferFrom(address sender, address recipient, uint256 tAmount) internal returns (bool) { if(inSwap){return _basicTransfer(sender, recipient, tAmount);} uint256 amount = tAmount.mul(_PerFragment); checkMaxWallet(sender, recipient, amount); checkTxLimit(sender, recipient, amount); jackpot(sender, recipient, amount); checkRebase(sender, recipient); checkSwapBack(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount); uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived.div(_PerFragment)); return true; } function checkMaxWallet(address sender, address recipient, uint256 amount) internal view { if(!_isFeeExempt[sender] && !_isFeeExempt[recipient] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidityReceiver){ require((_balances[recipient].add(amount)) <= _maxWalletToken.mul(_PerFragment));} } function checkRebase(address sender, address recipient) internal { if(shouldRebase(sender, recipient)){rebase();} } function checkSwapBack(address sender, address recipient, uint256 amount) internal { if(sender != pair && !_isFeeExempt[sender] && !inSwap){swapTimes = swapTimes.add(uint256(1));} if(shouldSwapBack(sender, recipient, amount) && !_isFeeExempt[sender]){swapBack(swapThreshold); swapTimes = uint256(0); } } function getTotalFee(address sender, address recipient) internal view returns (uint256) { if(recipient == pair && sellFee > uint256(0)){return sellFee;} if(sender == pair && totalFee > uint256(0)){return totalFee;} return transferFee; } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 _totalFee = getTotalFee(sender, recipient); uint256 feeAmount = amount.div(feeDenominator).mul(_totalFee); uint256 jackpotAmount = amount.div(feeDenominator).mul(jackpotFee); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount.div(_PerFragment)); if(jackpotAmount > 0 && jackpotFee <= getTotalFee(sender, recipient)){ _transferFrom(address(this), address(jackpotReceiver), jackpotAmount.div(_PerFragment));} return amount.sub(feeAmount); } function swapBack(uint256 amount) internal swapping { uint256 _denominator = totalFee.add(1).mul(2); if(totalFee == 0){_denominator = (liquidityFee.add(1).add(marketingFee).add(utilityFee)).mul(2);} uint256 tokensToAddLiquidityWith = amount.mul(liquidityFee).div(_denominator); uint256 toSwap = amount.sub(tokensToAddLiquidityWith); uint256 initialBalance = address(this).balance; swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance.sub(initialBalance); uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee)); uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee); if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); } uint256 marketingAmt = unitBalance.mul(2).mul(marketingFee); if(marketingAmt > 0){payable(marketingReceiver).transfer(marketingAmt);} uint256 contractBalance = address(this).balance; if(contractBalance > uint256(0)){payable(utilityReceiver).transfer(contractBalance);} } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { approve(address(router), tokenAmount); router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, 0, liquidityReceiver, block.timestamp); } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); approve(address(router), tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp); } function shouldTakeFee(address sender, address recipient) internal view returns (bool) { return !_isFeeExempt[sender] && !_isFeeExempt[recipient]; } function shouldRebase(address sender, address recipient) internal view returns (bool) { return _autoRebase && (_totalSupply < MAX_SUPPLY) && sender != pair && !_isFeeExempt[sender] && !_isFeeExempt[recipient] && !inSwap && block.timestamp >= (_lastRebasedTime + rebaseInterval); } function rebase() internal { if(inSwap){return;} _rebaseEventNumber = _rebaseEventNumber.add(uint256(1)); uint256 currentBalance = _totalSupply; uint256 deltaTime = block.timestamp - _lastRebasedTime; uint256 times = deltaTime.div(rebaseInterval); for (uint256 i = 0; i < times; i++) { _totalSupply = _totalSupply.mul((10**RATE_DECIMALS).add(rebaseRate)).div(10**RATE_DECIMALS);} _PerFragment = TOTALS.div(_totalSupply); _lastRebaseAmount = _totalSupply.sub(currentBalance); _lastRebasedTime = _lastRebasedTime.add(times.mul(rebaseInterval)); pairContract.sync(); emit LogRebase(_rebaseEventNumber, block.timestamp, _totalSupply); } function jackpot(address sender, address recipient, uint256 amount) internal { if(!jackpotInProgress && jackpotEndTime.add(jackpotInterval) <= block.timestamp && sender == pair && !inSwap && amount >= minJackpotBuy.mul(_PerFragment) && !jackpotIneligible[recipient] && jackpotEnabled){ jackpotEventStart(recipient);} if(jackpotInProgress && sender == pair && !inSwap && amount >= minJackpotBuy.mul(_PerFragment) && jackpotStartTime.add(jackpotDuration) >= block.timestamp && !jackpotIneligible[recipient] && jackpotEnabled){ jackpotBuyer[jackpotEvent] = recipient; jackpotStartTime = block.timestamp; eventRepeats[jackpotEvent] = eventRepeats[jackpotEvent].add(uint256(1));} if(jackpotInProgress && recipient == pair && sender == jackpotBuyer[jackpotEvent] && jackpotEnabled){ jackpotBuyer[jackpotEvent] = address(DEAD); jackpotStartTime = block.timestamp; eventRepeats[jackpotEvent] = eventRepeats[jackpotEvent].add(uint256(1));} if(jackpotInProgress && !inSwap && jackpotStartTime.add(jackpotDuration) < block.timestamp && jackpotEnabled){ jackpotEventClosure();} } function jackpotEventStart(address recipient) internal { jackpotInProgress = true; jackpotEvent = jackpotEvent.add(uint256(1)); jackpotBuyer[jackpotEvent] = recipient; jackpotStartTime = block.timestamp; eventStartTime[jackpotEvent] = block.timestamp; } function jackpotEventClosure() internal { uint256 jackpotPrize = jackpotPrizeCalulator(); uint256 jackpotBalance = balanceOf(address(jackpotContract)); if(jackpotPrize > jackpotBalance){jackpotPrize = jackpotBalance;} jackpotInProgress = false; jackpotEndTime = block.timestamp; eventWinner[jackpotEvent] = jackpotBuyer[jackpotEvent]; eventEndTime[jackpotEvent] = block.timestamp; eventWinnings[jackpotEvent] = jackpotPrize; totalWinnings = totalWinnings.add(jackpotPrize); totalWalletWinnings[jackpotBuyer[jackpotEvent]] = totalWalletWinnings[jackpotBuyer[jackpotEvent]].add(jackpotPrize); if(balanceOf(address(jackpotContract)) >= jackpotPrize && !jackpotIneligible[jackpotBuyer[jackpotEvent]] && jackpotBuyer[jackpotEvent] != address(DEAD)){ try jackpotContract.distributeJackpot(jackpotBuyer[jackpotEvent], jackpotPrize) {} catch {}} } function jackpotPrizeCalulator() public view returns (uint256) { uint256 jackpotPrize = totalSupply().mul(jackpotPrizePercent).div(uint256(100000)); if(eventStartTime[jackpotEvent].add(jackpotStepUpDuration) <= block.timestamp && jackpotStartTime != eventStartTime[jackpotEvent]){ uint256 deltaTime = jackpotStartTime - eventStartTime[jackpotEvent]; uint256 multiplier = deltaTime.mul(multiplierFactor).div(jackpotStepUpDuration); uint256 stepUp = totalSupply().mul(jackpotStepUpPercent).div(uint256(100000)); uint256 stepUpAmount = stepUp.mul(multiplier).div(multiplierFactor); return jackpotPrize.add(stepUpAmount);} return jackpotPrize; } function viewTimeUntilNextRebase() public view returns (uint256) { return(_lastRebasedTime.add(rebaseInterval)).sub(block.timestamp); } function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) { return sender != pair && !_isFeeExempt[sender] && !_isFeeExempt[recipient] && !inSwap && swapEnabled && amount >= minAmounttoSwap && _balances[address(this)].div(_PerFragment) >= swapThreshold && swapTimes >= swapAmount; } function viewEventStats(uint256 _event) external view returns (address winner, uint256 starttime, uint256 endtime, uint256 repeats, uint256 winnings) { return(eventWinner[_event], eventStartTime[_event], eventEndTime[_event], eventRepeats[_event], eventWinnings[_event]); } function viewStepUpMultiplier() external view returns (uint256) { uint256 deltaTime = block.timestamp - eventStartTime[jackpotEvent]; uint256 multiplier = deltaTime.mul(10**9).div(jackpotStepUpDuration); return multiplier; } function setJackpotEnabled(bool enabled) external onlyOwner { jackpotEnabled = enabled; } function setJackpotEligibility(address user, bool ineligible) external onlyOwner { jackpotIneligible[user] = ineligible; } function resetJackpotTime() external onlyOwner { jackpotInProgress = false; jackpotEndTime = block.timestamp; eventEndTime[jackpotEvent] = block.timestamp; } function closeJackpotEvent() external onlyOwner { jackpotEventClosure(); } function startJackpotEvent() external onlyOwner { jackpotEventStart(address(DEAD)); } function setJackpotStepUp(uint256 duration, uint256 percent) external onlyOwner { jackpotStepUpDuration = duration; jackpotStepUpPercent = percent; } function setJackpotParameters(uint256 interval, uint256 duration, uint256 minAmount) external onlyOwner { jackpotInterval = interval; jackpotDuration = duration; minJackpotBuy = totalSupply().mul(minAmount).div(uint256(100000)); } function setJackpotAmount(uint256 percent) external onlyOwner { jackpotPrizePercent = percent; } function setJackpotContract(address _jackpot) external onlyOwner { jackpotContract = Jackpot(_jackpot); } function setAutoRebase(bool _enabled) external onlyOwner { if(_enabled) { _autoRebase = _enabled; _lastRebasedTime = block.timestamp; } else { _autoRebase = _enabled;} } function setRebaseRate(uint256 rate) external onlyOwner { rebaseRate = rate; } function setRebaseInterval(uint256 interval) external onlyOwner { rebaseInterval = interval; } function setPairAddress(address _pair) external onlyOwner { pair = _pair; pairAddress = _pair; pairContract = IPair(_pair); } function checkTxLimit(address sender, address recipient, uint256 amount) internal view { require(amount <= _maxTxAmount.mul(_PerFragment) || _isFeeExempt[sender] || _isFeeExempt[recipient], "TX Limit Exceeded"); } function setManualRebase() external onlyOwner { rebase(); } function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _jackpot, uint256 _utility, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner { liquidityFee = _liquidity; marketingFee = _marketing; jackpotFee = _jackpot; utilityFee = _utility; totalFee = _total; sellFee = _sell; transferFee = _trans; require(totalFee <= feeDenominator && sellFee <= feeDenominator && transferFee <= feeDenominator); } function setParameters(uint256 _tx, uint256 _wallet) external onlyOwner { uint256 newTx = _totalSupply.mul(_tx).div(uint256(10000)); uint256 newWallet = _totalSupply.mul(_wallet).div(uint256(10000)); _maxTxAmount = newTx; _maxWalletToken = newWallet; } function viewDeadBalace() public view returns (uint256){ uint256 Dbalance = _balances[DEAD].div(_PerFragment); return(Dbalance); } function setmanualSwap(uint256 amount) external onlyOwner { swapBack(amount); } function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner { swapAmount = _swapAmount; swapThreshold = _totalSupply.mul(_swapThreshold).div(uint256(100000)); minAmounttoSwap = _totalSupply.mul(minTokenAmount).div(uint256(100000)); } function setContractLP() external onlyOwner { uint256 tamt = IERC20(pair).balanceOf(address(this)); IERC20(pair).transfer(msg.sender, tamt); } function allowance(address owner_, address spender) external view override returns (uint256) { return _allowedFragments[owner_][spender]; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub( subtractedValue ); } emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function approve(address spender, uint256 value) public override returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function getCirculatingSupply() public view returns (uint256) { return (TOTALS.sub(_balances[DEAD]).sub(_balances[address(0)])).div( _PerFragment ); } function rescueERC20(address _address, address _receiver, uint256 _percentage) external onlyOwner { uint256 tamt = IERC20(_address).balanceOf(address(this)); IERC20(_address).transfer(_receiver, tamt.mul(_percentage).div(100)); } function setReceivers(address _liquidityReceiver, address _marketingReceiver, address _jackpotReceiver, address _utilityReceiver) external onlyOwner { liquidityReceiver = _liquidityReceiver; _isFeeExempt[_liquidityReceiver] = true; marketingReceiver = _marketingReceiver; _isFeeExempt[_marketingReceiver] = true; jackpotReceiver = _jackpotReceiver; _isFeeExempt[_jackpotReceiver] = true; utilityReceiver = _utilityReceiver; _isFeeExempt[_utilityReceiver] = true; } function setFeeExempt(bool _enable, address _addr) external onlyOwner { _isFeeExempt[_addr] = _enable; } receive() external payable {} event LogRebase(uint256 indexed eventNumber, uint256 indexed timestamp, uint256 totalSupply); event AutoLiquify(uint256 amountETH, uint256 amountToken); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"eventNumber","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":"DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_UINT256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initRebaseStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastRebaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastRebasedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebaseEventNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"approvals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeJackpotEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventRepeats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventWinner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"jackpotBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotContract","outputs":[{"internalType":"contract Jackpot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotInProgress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jackpotIneligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotPrizeCalulator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotPrizePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotStepUpDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotStepUpPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minAmounttoSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minJackpotBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetJackpotTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setContractLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setJackpotAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_jackpot","type":"address"}],"name":"setJackpotContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"ineligible","type":"bool"}],"name":"setJackpotEligibility","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setJackpotEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"setJackpotParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setJackpotStepUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setManualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tx","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setRebaseInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRebaseRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingReceiver","type":"address"},{"internalType":"address","name":"_jackpotReceiver","type":"address"},{"internalType":"address","name":"_utilityReceiver","type":"address"}],"name":"setReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_jackpot","type":"uint256"},{"internalType":"uint256","name":"_utility","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmanualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startJackpotEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalWalletWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewDeadBalace","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_event","type":"uint256"}],"name":"viewEventStats","outputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"starttime","type":"uint256"},{"internalType":"uint256","name":"endtime","type":"uint256"},{"internalType":"uint256","name":"repeats","type":"uint256"},{"internalType":"uint256","name":"winnings","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewStepUpMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTimeUntilNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526127106702c68af0bb140000046001556127106702c68af0bb140000046002556000600681905560646007819055600855600955610bb8600a55611b58600b819055600c55612710600d5560046010556011805460ff19166001179055611c18601a55610e10601b55620186a0670de0b6b3a764000004601c55620186a0662386f26fc1000004601d55620186a0662386f26fc1000004601e55601f80546001600160a01b0319908116734911d970ae4fb9edc23bca3d9a25ade6eff62f7190811790925560208054821683179055602180549091169091179055602e805461ff0019166101001790556ec097ce7bc90715b34b9f1000000000602f556000603055610384603155610e10603290815560335560646034553480156200012957600080fd5b50600080546001600160a01b0319908116331790915560118054747a250d5630b4cf539739df2c5dacb4c659f2488d00610100600160a81b031990911617908190556035805490921673e603e2ebfd3ebb041aadabc304c242c7ad0b4f6a179091556040805163c45a015560e01b815290516101009092046001600160a01b03169163c45a015591600480820192602092909190829003018186803b158015620001d257600080fd5b505afa158015620001e7573d6000803e3d6000fd5b505050506040513d6020811015620001fe57600080fd5b5051601154604080516315ab88c960e31b815290516001600160a01b039384169363c9c65396936101009004169163ad5c4648916004808301926020929190829003018186803b1580156200025257600080fd5b505afa15801562000267573d6000803e3d6000fd5b505050506040513d60208110156200027e57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002ce57600080fd5b505af1158015620002e3573d6000803e3d6000fd5b505050506040513d6020811015620002fa57600080fd5b5051601380546001600160a01b0319166001600160a01b0392831617905530600090815260036020908152604080832060115461010090049094168352928152828220600019905566038d7ea4c68000601890815533835260048252929091206507326b47ffff199081905591546200037d9291620004b1811b6200256617901c565b601955426014819055601555603554603680546001600160a01b03199081166001600160a01b03938416908117835560138054600e80548516828816908117909155601280549095161790935560ff60b01b1960ff60a81b19909316600160a81b1792909216600160b01b179091556000908152600560209081526040808320805460ff1990811660019081179092558354871685528285208054821683179055602154871685528285208054821683179055601f5487168552828520805482168317905594549095168352808320805485168617905533808452818420805486168717905530845281842080549095169095179093556018548351908152925191927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3620005a9565b6000620004fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200050260201b60201c565b9392505050565b60008183620005925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005565781810151838201526020016200053c565b50505050905090810190601f168015620005845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200059f57fe5b0495945050505050565b613a6680620005b96000396000f3fe6080604052600436106104c45760003560e01c80637d1db4a511610276578063b05dba961161014f578063dd62ed3e116100c1578063ed89394011610085578063ed8939401461105a578063ef037fb91461108d578063f2fde38b146110b7578063f3fff5ff146110ea578063f4a47249146110ff578063f9acaf5b14611114576104cb565b8063dd62ed3e14610f93578063e057cd1a14610fce578063e15beb8014610fe3578063e94dd17c1461100f578063ed09937e14611045576104cb565b8063c500815611610113578063c500815614610ecb578063c8b6887514610ee0578063d439979014610f0c578063d6a8fab314610f3f578063d6c935aa14610f54578063dbb6f42714610f7e576104cb565b8063b05dba9614610e34578063b2118a8d14610e49578063b38c59b214610e8c578063b72481f814610ea1578063bc53d01a14610eb6576104cb565b80639b4eaff3116101e8578063a8aa1b31116101ac578063a8aa1b3114610d7d578063a8b5faea14610d92578063a9059cbb14610da7578063ab0e59f714610de0578063af9d802014610df5578063afb9cf6d14610e1f576104cb565b80639b4eaff314610cbd5780639b87676c14610ce75780639d2aee5f14610cfc578063a22d483214610d11578063a457c2d714610d44576104cb565b8063893d20e81161023a578063893d20e814610c0457806389edeb7414610c195780638ba164e914610c2e5780638beaf1c514610c695780639358928b14610c9357806395d89b4114610ca8576104cb565b80637d1db4a514610b6257806380804f6b14610b7757806383b4ac6814610baa57806387ca4cfc14610bbf578063884870c714610bd4576104cb565b806333a581d2116103a85780635b8aef481161031a57806372ea7f4f116102de57806372ea7f4f14610acf578063753d02a114610ae457806378109e5414610af95780637c76450314610b0e5780637c87055c14610b235780637cb95d0014610b4d576104cb565b80635b8aef4814610a125780636912652c14610a485780636d22182914610a5d5780636ddd171314610a8757806370a0823114610a9c576104cb565b80634255e8081161036c5780634255e8081461099457806352e41e4e146109a957806354fb0430146109be57806357c5194b146109d35780635881fc57146109e85780635a604c52146109fd576104cb565b806333a581d21461090757806336772f891461091c57806336e833df1461093157806339509351146109465780633eaaf86b1461097f576104cb565b8063191a9c47116104415780632b112e49116104055780632b112e49146108375780632e0f26251461084c5780632e1084dc146108775780632f54bf6e146108aa578063313ce567146108dd57806332b75683146108f2576104cb565b8063191a9c471461072b57806323137dd21461076657806323b872dd1461077b578063255818b7146107be57806327fa7b1814610804576104cb565b806314e7324e1161048857806314e7324e146106485780631657dc8a1461067257806318160ddd146106d15780631844b526146106e6578063189a3e2d14610716576104cb565b806304401930146104d05780630445b6671461052057806306fdde0314610547578063095ea7b3146105d15780630b542a191461061e576104cb565b366104cb57005b600080fd5b3480156104dc57600080fd5b5061051e600480360360e08110156104f357600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c0013561115f565b005b34801561052c57600080fd5b506105356111fd565b60408051918252519081900360200190f35b34801561055357600080fd5b5061055c611203565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561059657818101518382015260200161057e565b50505050905090810190601f1680156105c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105dd57600080fd5b5061060a600480360360408110156105f457600080fd5b506001600160a01b038135169060200135611227565b604080519115158252519081900360200190f35b34801561062a57600080fd5b506105356004803603602081101561064157600080fd5b503561128e565b34801561065457600080fd5b506105356004803603602081101561066b57600080fd5b50356112a0565b34801561067e57600080fd5b5061069c6004803603602081101561069557600080fd5b50356112b2565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b3480156106dd57600080fd5b506105356112f7565b3480156106f257600080fd5b5061051e6004803603604081101561070957600080fd5b50803590602001356112fd565b34801561072257600080fd5b5061053561134b565b34801561073757600080fd5b5061051e6004803603604081101561074e57600080fd5b508035151590602001356001600160a01b0316611351565b34801561077257600080fd5b506105356113bc565b34801561078757600080fd5b5061060a6004803603606081101561079e57600080fd5b506001600160a01b038135811691602081013590911690604001356113c2565b3480156107ca57600080fd5b506107e8600480360360208110156107e157600080fd5b503561149c565b604080516001600160a01b039092168252519081900360200190f35b34801561081057600080fd5b5061060a6004803603602081101561082757600080fd5b50356001600160a01b03166114b7565b34801561084357600080fd5b506105356114cc565b34801561085857600080fd5b50610861611550565b6040805160ff9092168252519081900360200190f35b34801561088357600080fd5b5061060a6004803603602081101561089a57600080fd5b50356001600160a01b0316611555565b3480156108b657600080fd5b5061060a600480360360208110156108cd57600080fd5b50356001600160a01b031661156a565b3480156108e957600080fd5b5061086161157e565b3480156108fe57600080fd5b50610535611583565b34801561091357600080fd5b50610535611589565b34801561092857600080fd5b5061053561158f565b34801561093d57600080fd5b50610535611595565b34801561095257600080fd5b5061060a6004803603604081101561096957600080fd5b506001600160a01b03813516906020013561159b565b34801561098b57600080fd5b5061053561162e565b3480156109a057600080fd5b506107e8611634565b3480156109b557600080fd5b50610535611643565b3480156109ca57600080fd5b50610535611649565b3480156109df57600080fd5b5061053561164f565b3480156109f457600080fd5b5061051e611655565b348015610a0957600080fd5b506108616116bc565b348015610a1e57600080fd5b5061051e60048036036060811015610a3557600080fd5b50803590602081013590604001356116c1565b348015610a5457600080fd5b5061060a61172f565b348015610a6957600080fd5b506107e860048036036020811015610a8057600080fd5b503561173f565b348015610a9357600080fd5b5061060a61175a565b348015610aa857600080fd5b5061053560048036036020811015610abf57600080fd5b50356001600160a01b0316611763565b348015610adb57600080fd5b5061053561178b565b348015610af057600080fd5b5061051e611791565b348015610b0557600080fd5b506105356117fb565b348015610b1a57600080fd5b5061051e611801565b348015610b2f57600080fd5b5061053560048036036020811015610b4657600080fd5b503561184e565b348015610b5957600080fd5b50610535611860565b348015610b6e57600080fd5b50610535611866565b348015610b8357600080fd5b5061053560048036036020811015610b9a57600080fd5b50356001600160a01b031661186c565b348015610bb657600080fd5b5061060a61187e565b348015610bcb57600080fd5b5061053561188f565b348015610be057600080fd5b5061051e60048036036040811015610bf757600080fd5b508035906020013561196f565b348015610c1057600080fd5b506107e86119fc565b348015610c2557600080fd5b50610535611a0b565b348015610c3a57600080fd5b5061051e60048036036040811015610c5157600080fd5b506001600160a01b0381351690602001351515611a11565b348015610c7557600080fd5b5061051e60048036036020811015610c8c57600080fd5b5035611a7f565b348015610c9f57600080fd5b50610535611ac7565b348015610cb457600080fd5b5061055c611aed565b348015610cc957600080fd5b5061051e60048036036020811015610ce057600080fd5b5035611b0c565b348015610cf357600080fd5b50610535611b54565b348015610d0857600080fd5b5061060a611b5a565b348015610d1d57600080fd5b5061051e60048036036020811015610d3457600080fd5b50356001600160a01b0316611b68565b348015610d5057600080fd5b5061060a60048036036040811015610d6757600080fd5b506001600160a01b038135169060200135611be1565b348015610d8957600080fd5b506107e8611cca565b348015610d9e57600080fd5b50610535611cd9565b348015610db357600080fd5b5061060a60048036036040811015610dca57600080fd5b506001600160a01b038135169060200135611cf6565b348015610dec57600080fd5b5061051e611d22565b348015610e0157600080fd5b5061053560048036036020811015610e1857600080fd5b5035611e62565b348015610e2b57600080fd5b5061060a611e74565b348015610e4057600080fd5b5061051e611e84565b348015610e5557600080fd5b5061051e60048036036060811015610e6c57600080fd5b506001600160a01b03813581169160208101359091169060400135611ec0565b348015610e9857600080fd5b5061051e612017565b348015610ead57600080fd5b50610535612062565b348015610ec257600080fd5b5061051e612068565b348015610ed757600080fd5b5061060a6120b6565b348015610eec57600080fd5b5061051e60048036036020811015610f0357600080fd5b503515156120bf565b348015610f1857600080fd5b5061060a60048036036020811015610f2f57600080fd5b50356001600160a01b031661211c565b348015610f4b57600080fd5b5061053561213a565b348015610f6057600080fd5b5061051e60048036036020811015610f7757600080fd5b5035612170565b348015610f8a57600080fd5b506105356121bc565b348015610f9f57600080fd5b5061053560048036036040811015610fb657600080fd5b506001600160a01b03813581169160200135166121c2565b348015610fda57600080fd5b506105356121ed565b348015610fef57600080fd5b5061051e6004803603602081101561100657600080fd5b503515156121f3565b34801561101b57600080fd5b5061051e6004803603606081101561103257600080fd5b5080359060208101359060400135612278565b34801561105157600080fd5b506105356122f7565b34801561106657600080fd5b5061051e6004803603602081101561107d57600080fd5b50356001600160a01b03166122fd565b34801561109957600080fd5b5061051e600480360360208110156110b057600080fd5b5035612362565b3480156110c357600080fd5b5061051e600480360360208110156110da57600080fd5b50356001600160a01b03166123aa565b3480156110f657600080fd5b50610535612441565b34801561110b57600080fd5b50610535612447565b34801561112057600080fd5b5061051e6004803603608081101561113757600080fd5b506001600160a01b03813581169160208101358216916040820135811691606001351661248c565b6111683361156a565b6111a2576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6006879055600786905560098590556008849055600a839055600b829055600c819055600d5483118015906111db5750600d54600b5411155b80156111eb5750600d54600c5411155b6111f457600080fd5b50505050505050565b601c5481565b6040805180820190915260098152684574686572466f6d6f60b81b60208201525b90565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60266020526000908152604090205481565b60246020526000908152604090205481565b600090815260236020908152604080832054602483528184205460258452828520546027855283862054602690955292909420546001600160a01b0390911694919291565b60185490565b6113063361156a565b611340576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b603291909155603355565b602b5481565b61135a3361156a565b611394576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff1916911515919091179055565b60335481565b6000826001600160a01b0381166113d857600080fd5b6001600160a01b038516600090815260036020908152604080832033845290915290205460001914611485576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03881660009081526003825283812033825290915291909120546114609185906125af565b6001600160a01b03861660009081526003602090815260408083203384529091529020555b611490858585612646565b50600195945050505050565b6022602052600090815260409020546001600160a01b031681565b60056020526000908152604090205460ff1681565b60195460046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54909261154b929091611545919061153f906507326b47ffff19906127ae565b906127ae565b90612566565b905090565b600481565b60296020526000908152604090205460ff1681565b6000546001600160a01b0390811691161490565b600490565b60155481565b60001981565b601e5481565b602d5481565b3360009081526003602090815260408083206001600160a01b03861684529091528120546115c990836127f0565b3360008181526003602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60185481565b6035546001600160a01b031681565b60305481565b60345481565b601d5481565b61165e3361156a565b611698576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b602e805460ff1916905542602c819055602d54600090815260256020526040902055565b600781565b6116ca3361156a565b611704576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60308390556031829055611727620186a0611545836117216112f7565b9061284a565b601e55505050565b601354600160b01b900460ff1681565b6023602052600090815260409020546001600160a01b031681565b60115460ff1681565b6019546001600160a01b03821660009081526004602052604081205490916112889190612566565b602c5481565b601360009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117e157600080fd5b505af11580156117f5573d6000803e3d6000fd5b50505050565b60025481565b61180a3361156a565b611844576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b61184c6128a3565b565b60256020526000908152604090205481565b601a5481565b60015481565b60286020526000908152604090205481565b601354600160a01b900460ff161590565b6000806118a7620186a06115456034546117216112f7565b603254602d5460009081526024602052604090205491925042916118ca916127f0565b111580156118eb5750602d54600090815260246020526040902054602b5414155b1561154b57602d54600090815260246020526040812054602b54603254602f54929091039291611921919061154590859061284a565b9050600061193a620186a06115456033546117216112f7565b90506000611957602f54611545858561284a90919063ffffffff16565b905061196385826127f0565b95505050505050611224565b6119783361156a565b6119b2576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60006119cf6127106115458560185461284a90919063ffffffff16565b905060006119ee6127106115458560185461284a90919063ffffffff16565b600192909255506002555050565b6000546001600160a01b031690565b601b5481565b611a1a3361156a565b611a54576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b611a883361156a565b611ac2576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b603455565b600061154b611ad66000611763565b61153f611ae461dead611763565b601854906127ae565b60408051808201909152600581526445464f4d4f60d81b602082015290565b611b153361156a565b611b4f576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601a55565b60145481565b602e54610100900460ff1681565b611b713361156a565b611bab576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b03199283168117909155600e805483168217905560128054909216179055565b3360009081526003602090815260408083206001600160a01b0386168452909152812054808310611c35573360009081526003602090815260408083206001600160a01b0388168452909152812055611c64565b611c3f81846127ae565b3360009081526003602090815260408083206001600160a01b03891684529091529020555b3360008181526003602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6013546001600160a01b031681565b600061154b4261153f601b546015546127f090919063ffffffff16565b6000826001600160a01b038116611d0c57600080fd5b611d17338585612646565b506001949350505050565b611d2b3361156a565b611d65576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611db057600080fd5b505afa158015611dc4573d6000803e3d6000fd5b505050506040513d6020811015611dda57600080fd5b50516013546040805163a9059cbb60e01b81523360048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b505050506040513d6020811015611e5d57600080fd5b505050565b60276020526000908152604090205481565b601354600160a81b900460ff1681565b6021546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611ebd573d6000803e3d6000fd5b50565b611ec93361156a565b611f03576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f5257600080fd5b505afa158015611f66573d6000803e3d6000fd5b505050506040513d6020811015611f7c57600080fd5b505190506001600160a01b03841663a9059cbb84611f9f6064611545868861284a565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050506040513d602081101561200f57600080fd5b505050505050565b6120203361156a565b61205a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b61184c612a93565b602a5481565b6120713361156a565b6120ab576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b61184c61dead612bfe565b602e5460ff1681565b6120c83361156a565b612102576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b602e80549115156101000261ff0019909216919091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b602d5460009081526024602052604081205460325442919091039082906121699061154584633b9aca0061284a565b9250505090565b6121793361156a565b6121b3576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b611ebd81612c63565b60165481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60325481565b6121fc3361156a565b612236576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b801561225c576013805460ff60a81b1916600160a81b8315150217905542601555611ebd565b60138054821515600160a81b0260ff60a81b1990911617905550565b6122813361156a565b6122bb576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60108390556018546122d690620186a090611545908561284a565b601c556018546122ef90620186a090611545908461284a565b601d55505050565b60175481565b6123063361156a565b612340576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b603580546001600160a01b0319166001600160a01b0392909216919091179055565b61236b3361156a565b6123a5576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601b55565b6123b33361156a565b6123ed576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639181900360200190a150565b60315481565b60195461dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd549091829161248691612566565b91505090565b6124953361156a565b6124cf576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601f80546001600160a01b039586166001600160a01b031991821681179092556000918252600560209081526040808420805460ff1990811660019081179092558354988a1698851689179093559684528084208054831688179055603680549689169684168717905594835284832080548216871790556021805494909716939091168317909555908152208054909216179055565b60006125a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e0f565b9392505050565b6000818484111561263e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126035781810151838201526020016125eb565b50505050905090810190601f1680156126305780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601354600090600160a01b900460ff161561266d57612666848484612e74565b90506125a8565b60006126846019548461284a90919063ffffffff16565b9050612691858583612f06565b61269c858583612fea565b6126a7858583613087565b6126b18585613356565b6126bc85858361336d565b6001600160a01b0385166000908152600460205260409020546126df90826127ae565b6001600160a01b038616600090815260046020526040812091909155612705868661341b565b61270f578161271a565b61271a868684613461565b6001600160a01b03861660009081526004602052604090205490915061274090826127f0565b6001600160a01b03808716600081815260046020526040902092909255601954908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612791908590612566565b60408051918252519081900360200190a350600195945050505050565b60006125a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125af565b6000828201838110156125a8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261285957506000611288565b8282028284828161286657fe5b04146125a85760405162461bcd60e51b8152600401808060200182810382526021815260200180613a106021913960400191505060405180910390fd5b60006128ad61188f565b6035549091506000906128c8906001600160a01b0316611763565b9050808211156128d6578091505b602e805460ff1916905542602c819055602d80546000908152602260209081526040808320546023835281842080546001600160a01b0319166001600160a01b0390921691909117905583548352602582528083209490945591548152602690915220829055602a5461294990836127f0565b602a55602d546000908152602260209081526040808320546001600160a01b03168352602890915290205461297e90836127f0565b602d546000908152602260209081526040808320546001600160a01b03908116845260289092529091209190915560355483916129bb9116611763565b101580156129f15750602d546000908152602260209081526040808320546001600160a01b03168352602990915290205460ff16155b8015612a195750602d546000908152602260205260409020546001600160a01b031661dead14155b15612a8f57603554602d5460009081526022602052604080822054815163a74c142360e01b81526001600160a01b03918216600482015260248101879052915193169263a74c14239260448084019391929182900301818387803b158015612a8057600080fd5b505af1925050508015611e5d57505b5050565b601354600160a01b900460ff1615612aaa5761184c565b601754612ab89060016127f0565b601755601854601554601b54429190910390600090612ad8908390612566565b905060005b81811015612b1457601a54612b0990629896809061154590612b009083906127f0565b6018549061284a565b601855600101612add565b50601854612b2a906507326b47ffff1990612566565b601955601854612b3a90846127ae565b601655601b54612b5890612b4f90839061284a565b601554906127f0565b6015556012546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b158015612ba457600080fd5b505af1158015612bb8573d6000803e3d6000fd5b50505050426017547f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb26018546040518082815260200191505060405180910390a3505050565b602e805460ff19166001908117909155602d54612c1a916127f0565b602d818155600091825260226020908152604080842080546001600160a01b0319166001600160a01b03969096169590951790945542602b819055915483526024905291902055565b6013805460ff60a01b1916600160a01b179055600a54600090612c8e906002906117219060016127f0565b9050600a5460001415612ccb57612cc86002611721600854612cc2600754612cc260016006546127f090919063ffffffff16565b906127f0565b90505b6000612ce6826115456006548661284a90919063ffffffff16565b90506000612cf484836127ae565b905047612d0082613585565b6000612d0c47836127ae565b90506000612d2f612d28600654886127ae90919063ffffffff16565b8390612566565b90506000612d486006548361284a90919063ffffffff16565b90508015612d5a57612d5a868261375f565b600754600090612d6f9061172185600261284a565b90508015612db3576020546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612db1573d6000803e3d6000fd5b505b478015612df6576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612df4573d6000803e3d6000fd5b505b50506013805460ff60a01b191690555050505050505050565b60008183612e5e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126035781810151838201526020016125eb565b506000838581612e6a57fe5b0495945050505050565b600080612e8c6019548461284a90919063ffffffff16565b6001600160a01b038616600090815260046020526040902054909150612eb290826127ae565b6001600160a01b038087166000908152600460205260408082209390935590861681522054612ee190826127f0565b6001600160a01b03851660009081526004602052604090205550600190509392505050565b6001600160a01b03831660009081526005602052604090205460ff16158015612f4857506001600160a01b03821660009081526005602052604090205460ff16155b8015612f5d57506001600160a01b0382163014155b8015612f7457506001600160a01b03821661dead14155b8015612f8e57506013546001600160a01b03838116911614155b8015612fa85750601f546001600160a01b03838116911614155b15611e5d57601954600254612fbc9161284a565b6001600160a01b038316600090815260046020526040902054612fdf90836127f0565b1115611e5d57600080fd5b601954600154612ff99161284a565b8111158061301f57506001600160a01b03831660009081526005602052604090205460ff165b8061304257506001600160a01b03821660009081526005602052604090205460ff165b611e5d576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b602e5460ff161580156130b05750426130ad603054602c546127f090919063ffffffff16565b11155b80156130c957506013546001600160a01b038481169116145b80156130df5750601354600160a01b900460ff16155b80156130f95750601954601e546130f59161284a565b8110155b801561311e57506001600160a01b03821660009081526029602052604090205460ff16155b80156131315750602e54610100900460ff165b1561313f5761313f82612bfe565b602e5460ff16801561315e57506013546001600160a01b038481169116145b80156131745750601354600160a01b900460ff16155b801561318e5750601954601e5461318a9161284a565b8110155b80156131b05750426131ad603154602b546127f090919063ffffffff16565b10155b80156131d557506001600160a01b03821660009081526029602052604090205460ff16155b80156131e85750602e54610100900460ff165b1561324757602d8054600090815260226020908152604080832080546001600160a01b0319166001600160a01b03881617905542602b55925482526027905220546132349060016127f0565b602d546000908152602760205260409020555b602e5460ff16801561326657506013546001600160a01b038381169116145b801561328e5750602d546000908152602260205260409020546001600160a01b038481169116145b80156132a15750602e54610100900460ff165b156132f957602d8054600090815260226020908152604080832080546001600160a01b03191661dead17905542602b55925482526027905220546132e69060016127f0565b602d546000908152602760205260409020555b602e5460ff1680156133155750601354600160a01b900460ff16155b8015613336575042613334603154602b546127f090919063ffffffff16565b105b80156133495750602e54610100900460ff165b15611e5d57611e5d6128a3565b613360828261381f565b15612a8f57612a8f612a93565b6013546001600160a01b038481169116148015906133a457506001600160a01b03831660009081526005602052604090205460ff16155b80156133ba5750601354600160a01b900460ff16155b156133d157600f546133cd9060016127f0565b600f555b6133dc8383836138d6565b801561340157506001600160a01b03831660009081526005602052604090205460ff16155b15611e5d57613411601c54612c63565b6000600f55505050565b6001600160a01b03821660009081526005602052604081205460ff161580156125a85750506001600160a01b031660009081526005602052604090205460ff1615919050565b60008061346e85856139a8565b9050600061348b82611721600d548761256690919063ffffffff16565b905060006134aa600954611721600d548861256690919063ffffffff16565b306000908152600460205260409020549091506134c790836127f0565b306000818152600460205260409020919091556019546001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613515908690612566565b60408051918252519081900360200190a3600081118015613541575061353b87876139a8565b60095411155b156135705760365460195461356e9130916001600160a01b0390911690613569908590612566565b612646565b505b61357a85836127ae565b979650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106135b457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601160019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561362257600080fd5b505afa158015613636573d6000803e3d6000fd5b505050506040513d602081101561364c57600080fd5b505181518290600190811061365d57fe5b6001600160a01b039283166020918202929092010152601154613687916101009091041683611227565b50601160019054906101000a90046001600160a01b03166001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561372257818101518382015260200161370a565b505050509050019650505050505050600060405180830381600087803b15801561374b57600080fd5b505af115801561200f573d6000803e3d6000fd5b60115461377a9061010090046001600160a01b031683611227565b50601154601f546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a482015290516101009093049091169163f305d71991849160c480830192606092919082900301818588803b1580156137f457600080fd5b505af1158015613808573d6000803e3d6000fd5b50505050506040513d60608110156117f557600080fd5b601354600090600160a81b900460ff1680156138445750601854670de0b6b3a7640000115b801561385e57506013546001600160a01b03848116911614155b801561388357506001600160a01b03831660009081526005602052604090205460ff16155b80156138a857506001600160a01b03821660009081526005602052604090205460ff16155b80156138be5750601354600160a01b900460ff16155b80156125a8575050601b546015540142101592915050565b6013546000906001600160a01b0385811691161480159061391057506001600160a01b03841660009081526005602052604090205460ff16155b801561393557506001600160a01b03831660009081526005602052604090205460ff16155b801561394b5750601354600160a01b900460ff16155b8015613959575060115460ff165b80156139675750601d548210155b80156139905750601c546019543060009081526004602052604090205461398d91612566565b10155b80156139a05750601054600f5410155b949350505050565b6013546000906001600160a01b0383811691161480156139ca57506000600b54115b156139d85750600b54611288565b6013546001600160a01b0384811691161480156139f757506000600a54115b15613a055750600a54611288565b50600c549291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220d6882f6dbf3646e86acd9f9d1930c9ec8c7119b0cab0212dc8a7960341e202b964736f6c63430007060033
Deployed Bytecode
0x6080604052600436106104c45760003560e01c80637d1db4a511610276578063b05dba961161014f578063dd62ed3e116100c1578063ed89394011610085578063ed8939401461105a578063ef037fb91461108d578063f2fde38b146110b7578063f3fff5ff146110ea578063f4a47249146110ff578063f9acaf5b14611114576104cb565b8063dd62ed3e14610f93578063e057cd1a14610fce578063e15beb8014610fe3578063e94dd17c1461100f578063ed09937e14611045576104cb565b8063c500815611610113578063c500815614610ecb578063c8b6887514610ee0578063d439979014610f0c578063d6a8fab314610f3f578063d6c935aa14610f54578063dbb6f42714610f7e576104cb565b8063b05dba9614610e34578063b2118a8d14610e49578063b38c59b214610e8c578063b72481f814610ea1578063bc53d01a14610eb6576104cb565b80639b4eaff3116101e8578063a8aa1b31116101ac578063a8aa1b3114610d7d578063a8b5faea14610d92578063a9059cbb14610da7578063ab0e59f714610de0578063af9d802014610df5578063afb9cf6d14610e1f576104cb565b80639b4eaff314610cbd5780639b87676c14610ce75780639d2aee5f14610cfc578063a22d483214610d11578063a457c2d714610d44576104cb565b8063893d20e81161023a578063893d20e814610c0457806389edeb7414610c195780638ba164e914610c2e5780638beaf1c514610c695780639358928b14610c9357806395d89b4114610ca8576104cb565b80637d1db4a514610b6257806380804f6b14610b7757806383b4ac6814610baa57806387ca4cfc14610bbf578063884870c714610bd4576104cb565b806333a581d2116103a85780635b8aef481161031a57806372ea7f4f116102de57806372ea7f4f14610acf578063753d02a114610ae457806378109e5414610af95780637c76450314610b0e5780637c87055c14610b235780637cb95d0014610b4d576104cb565b80635b8aef4814610a125780636912652c14610a485780636d22182914610a5d5780636ddd171314610a8757806370a0823114610a9c576104cb565b80634255e8081161036c5780634255e8081461099457806352e41e4e146109a957806354fb0430146109be57806357c5194b146109d35780635881fc57146109e85780635a604c52146109fd576104cb565b806333a581d21461090757806336772f891461091c57806336e833df1461093157806339509351146109465780633eaaf86b1461097f576104cb565b8063191a9c47116104415780632b112e49116104055780632b112e49146108375780632e0f26251461084c5780632e1084dc146108775780632f54bf6e146108aa578063313ce567146108dd57806332b75683146108f2576104cb565b8063191a9c471461072b57806323137dd21461076657806323b872dd1461077b578063255818b7146107be57806327fa7b1814610804576104cb565b806314e7324e1161048857806314e7324e146106485780631657dc8a1461067257806318160ddd146106d15780631844b526146106e6578063189a3e2d14610716576104cb565b806304401930146104d05780630445b6671461052057806306fdde0314610547578063095ea7b3146105d15780630b542a191461061e576104cb565b366104cb57005b600080fd5b3480156104dc57600080fd5b5061051e600480360360e08110156104f357600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c0013561115f565b005b34801561052c57600080fd5b506105356111fd565b60408051918252519081900360200190f35b34801561055357600080fd5b5061055c611203565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561059657818101518382015260200161057e565b50505050905090810190601f1680156105c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105dd57600080fd5b5061060a600480360360408110156105f457600080fd5b506001600160a01b038135169060200135611227565b604080519115158252519081900360200190f35b34801561062a57600080fd5b506105356004803603602081101561064157600080fd5b503561128e565b34801561065457600080fd5b506105356004803603602081101561066b57600080fd5b50356112a0565b34801561067e57600080fd5b5061069c6004803603602081101561069557600080fd5b50356112b2565b604080516001600160a01b03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b3480156106dd57600080fd5b506105356112f7565b3480156106f257600080fd5b5061051e6004803603604081101561070957600080fd5b50803590602001356112fd565b34801561072257600080fd5b5061053561134b565b34801561073757600080fd5b5061051e6004803603604081101561074e57600080fd5b508035151590602001356001600160a01b0316611351565b34801561077257600080fd5b506105356113bc565b34801561078757600080fd5b5061060a6004803603606081101561079e57600080fd5b506001600160a01b038135811691602081013590911690604001356113c2565b3480156107ca57600080fd5b506107e8600480360360208110156107e157600080fd5b503561149c565b604080516001600160a01b039092168252519081900360200190f35b34801561081057600080fd5b5061060a6004803603602081101561082757600080fd5b50356001600160a01b03166114b7565b34801561084357600080fd5b506105356114cc565b34801561085857600080fd5b50610861611550565b6040805160ff9092168252519081900360200190f35b34801561088357600080fd5b5061060a6004803603602081101561089a57600080fd5b50356001600160a01b0316611555565b3480156108b657600080fd5b5061060a600480360360208110156108cd57600080fd5b50356001600160a01b031661156a565b3480156108e957600080fd5b5061086161157e565b3480156108fe57600080fd5b50610535611583565b34801561091357600080fd5b50610535611589565b34801561092857600080fd5b5061053561158f565b34801561093d57600080fd5b50610535611595565b34801561095257600080fd5b5061060a6004803603604081101561096957600080fd5b506001600160a01b03813516906020013561159b565b34801561098b57600080fd5b5061053561162e565b3480156109a057600080fd5b506107e8611634565b3480156109b557600080fd5b50610535611643565b3480156109ca57600080fd5b50610535611649565b3480156109df57600080fd5b5061053561164f565b3480156109f457600080fd5b5061051e611655565b348015610a0957600080fd5b506108616116bc565b348015610a1e57600080fd5b5061051e60048036036060811015610a3557600080fd5b50803590602081013590604001356116c1565b348015610a5457600080fd5b5061060a61172f565b348015610a6957600080fd5b506107e860048036036020811015610a8057600080fd5b503561173f565b348015610a9357600080fd5b5061060a61175a565b348015610aa857600080fd5b5061053560048036036020811015610abf57600080fd5b50356001600160a01b0316611763565b348015610adb57600080fd5b5061053561178b565b348015610af057600080fd5b5061051e611791565b348015610b0557600080fd5b506105356117fb565b348015610b1a57600080fd5b5061051e611801565b348015610b2f57600080fd5b5061053560048036036020811015610b4657600080fd5b503561184e565b348015610b5957600080fd5b50610535611860565b348015610b6e57600080fd5b50610535611866565b348015610b8357600080fd5b5061053560048036036020811015610b9a57600080fd5b50356001600160a01b031661186c565b348015610bb657600080fd5b5061060a61187e565b348015610bcb57600080fd5b5061053561188f565b348015610be057600080fd5b5061051e60048036036040811015610bf757600080fd5b508035906020013561196f565b348015610c1057600080fd5b506107e86119fc565b348015610c2557600080fd5b50610535611a0b565b348015610c3a57600080fd5b5061051e60048036036040811015610c5157600080fd5b506001600160a01b0381351690602001351515611a11565b348015610c7557600080fd5b5061051e60048036036020811015610c8c57600080fd5b5035611a7f565b348015610c9f57600080fd5b50610535611ac7565b348015610cb457600080fd5b5061055c611aed565b348015610cc957600080fd5b5061051e60048036036020811015610ce057600080fd5b5035611b0c565b348015610cf357600080fd5b50610535611b54565b348015610d0857600080fd5b5061060a611b5a565b348015610d1d57600080fd5b5061051e60048036036020811015610d3457600080fd5b50356001600160a01b0316611b68565b348015610d5057600080fd5b5061060a60048036036040811015610d6757600080fd5b506001600160a01b038135169060200135611be1565b348015610d8957600080fd5b506107e8611cca565b348015610d9e57600080fd5b50610535611cd9565b348015610db357600080fd5b5061060a60048036036040811015610dca57600080fd5b506001600160a01b038135169060200135611cf6565b348015610dec57600080fd5b5061051e611d22565b348015610e0157600080fd5b5061053560048036036020811015610e1857600080fd5b5035611e62565b348015610e2b57600080fd5b5061060a611e74565b348015610e4057600080fd5b5061051e611e84565b348015610e5557600080fd5b5061051e60048036036060811015610e6c57600080fd5b506001600160a01b03813581169160208101359091169060400135611ec0565b348015610e9857600080fd5b5061051e612017565b348015610ead57600080fd5b50610535612062565b348015610ec257600080fd5b5061051e612068565b348015610ed757600080fd5b5061060a6120b6565b348015610eec57600080fd5b5061051e60048036036020811015610f0357600080fd5b503515156120bf565b348015610f1857600080fd5b5061060a60048036036020811015610f2f57600080fd5b50356001600160a01b031661211c565b348015610f4b57600080fd5b5061053561213a565b348015610f6057600080fd5b5061051e60048036036020811015610f7757600080fd5b5035612170565b348015610f8a57600080fd5b506105356121bc565b348015610f9f57600080fd5b5061053560048036036040811015610fb657600080fd5b506001600160a01b03813581169160200135166121c2565b348015610fda57600080fd5b506105356121ed565b348015610fef57600080fd5b5061051e6004803603602081101561100657600080fd5b503515156121f3565b34801561101b57600080fd5b5061051e6004803603606081101561103257600080fd5b5080359060208101359060400135612278565b34801561105157600080fd5b506105356122f7565b34801561106657600080fd5b5061051e6004803603602081101561107d57600080fd5b50356001600160a01b03166122fd565b34801561109957600080fd5b5061051e600480360360208110156110b057600080fd5b5035612362565b3480156110c357600080fd5b5061051e600480360360208110156110da57600080fd5b50356001600160a01b03166123aa565b3480156110f657600080fd5b50610535612441565b34801561110b57600080fd5b50610535612447565b34801561112057600080fd5b5061051e6004803603608081101561113757600080fd5b506001600160a01b03813581169160208101358216916040820135811691606001351661248c565b6111683361156a565b6111a2576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6006879055600786905560098590556008849055600a839055600b829055600c819055600d5483118015906111db5750600d54600b5411155b80156111eb5750600d54600c5411155b6111f457600080fd5b50505050505050565b601c5481565b6040805180820190915260098152684574686572466f6d6f60b81b60208201525b90565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60266020526000908152604090205481565b60246020526000908152604090205481565b600090815260236020908152604080832054602483528184205460258452828520546027855283862054602690955292909420546001600160a01b0390911694919291565b60185490565b6113063361156a565b611340576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b603291909155603355565b602b5481565b61135a3361156a565b611394576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff1916911515919091179055565b60335481565b6000826001600160a01b0381166113d857600080fd5b6001600160a01b038516600090815260036020908152604080832033845290915290205460001914611485576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03881660009081526003825283812033825290915291909120546114609185906125af565b6001600160a01b03861660009081526003602090815260408083203384529091529020555b611490858585612646565b50600195945050505050565b6022602052600090815260409020546001600160a01b031681565b60056020526000908152604090205460ff1681565b60195460046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54909261154b929091611545919061153f906507326b47ffff19906127ae565b906127ae565b90612566565b905090565b600481565b60296020526000908152604090205460ff1681565b6000546001600160a01b0390811691161490565b600490565b60155481565b60001981565b601e5481565b602d5481565b3360009081526003602090815260408083206001600160a01b03861684529091528120546115c990836127f0565b3360008181526003602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60185481565b6035546001600160a01b031681565b60305481565b60345481565b601d5481565b61165e3361156a565b611698576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b602e805460ff1916905542602c819055602d54600090815260256020526040902055565b600781565b6116ca3361156a565b611704576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60308390556031829055611727620186a0611545836117216112f7565b9061284a565b601e55505050565b601354600160b01b900460ff1681565b6023602052600090815260409020546001600160a01b031681565b60115460ff1681565b6019546001600160a01b03821660009081526004602052604081205490916112889190612566565b602c5481565b601360009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117e157600080fd5b505af11580156117f5573d6000803e3d6000fd5b50505050565b60025481565b61180a3361156a565b611844576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b61184c6128a3565b565b60256020526000908152604090205481565b601a5481565b60015481565b60286020526000908152604090205481565b601354600160a01b900460ff161590565b6000806118a7620186a06115456034546117216112f7565b603254602d5460009081526024602052604090205491925042916118ca916127f0565b111580156118eb5750602d54600090815260246020526040902054602b5414155b1561154b57602d54600090815260246020526040812054602b54603254602f54929091039291611921919061154590859061284a565b9050600061193a620186a06115456033546117216112f7565b90506000611957602f54611545858561284a90919063ffffffff16565b905061196385826127f0565b95505050505050611224565b6119783361156a565b6119b2576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60006119cf6127106115458560185461284a90919063ffffffff16565b905060006119ee6127106115458560185461284a90919063ffffffff16565b600192909255506002555050565b6000546001600160a01b031690565b601b5481565b611a1a3361156a565b611a54576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b611a883361156a565b611ac2576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b603455565b600061154b611ad66000611763565b61153f611ae461dead611763565b601854906127ae565b60408051808201909152600581526445464f4d4f60d81b602082015290565b611b153361156a565b611b4f576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601a55565b60145481565b602e54610100900460ff1681565b611b713361156a565b611bab576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b03199283168117909155600e805483168217905560128054909216179055565b3360009081526003602090815260408083206001600160a01b0386168452909152812054808310611c35573360009081526003602090815260408083206001600160a01b0388168452909152812055611c64565b611c3f81846127ae565b3360009081526003602090815260408083206001600160a01b03891684529091529020555b3360008181526003602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6013546001600160a01b031681565b600061154b4261153f601b546015546127f090919063ffffffff16565b6000826001600160a01b038116611d0c57600080fd5b611d17338585612646565b506001949350505050565b611d2b3361156a565b611d65576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611db057600080fd5b505afa158015611dc4573d6000803e3d6000fd5b505050506040513d6020811015611dda57600080fd5b50516013546040805163a9059cbb60e01b81523360048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b505050506040513d6020811015611e5d57600080fd5b505050565b60276020526000908152604090205481565b601354600160a81b900460ff1681565b6021546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611ebd573d6000803e3d6000fd5b50565b611ec93361156a565b611f03576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611f5257600080fd5b505afa158015611f66573d6000803e3d6000fd5b505050506040513d6020811015611f7c57600080fd5b505190506001600160a01b03841663a9059cbb84611f9f6064611545868861284a565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050506040513d602081101561200f57600080fd5b505050505050565b6120203361156a565b61205a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b61184c612a93565b602a5481565b6120713361156a565b6120ab576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b61184c61dead612bfe565b602e5460ff1681565b6120c83361156a565b612102576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b602e80549115156101000261ff0019909216919091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b602d5460009081526024602052604081205460325442919091039082906121699061154584633b9aca0061284a565b9250505090565b6121793361156a565b6121b3576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b611ebd81612c63565b60165481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60325481565b6121fc3361156a565b612236576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b801561225c576013805460ff60a81b1916600160a81b8315150217905542601555611ebd565b60138054821515600160a81b0260ff60a81b1990911617905550565b6122813361156a565b6122bb576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60108390556018546122d690620186a090611545908561284a565b601c556018546122ef90620186a090611545908461284a565b601d55505050565b60175481565b6123063361156a565b612340576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b603580546001600160a01b0319166001600160a01b0392909216919091179055565b61236b3361156a565b6123a5576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601b55565b6123b33361156a565b6123ed576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639181900360200190a150565b60315481565b60195461dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd549091829161248691612566565b91505090565b6124953361156a565b6124cf576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601f80546001600160a01b039586166001600160a01b031991821681179092556000918252600560209081526040808420805460ff1990811660019081179092558354988a1698851689179093559684528084208054831688179055603680549689169684168717905594835284832080548216871790556021805494909716939091168317909555908152208054909216179055565b60006125a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e0f565b9392505050565b6000818484111561263e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126035781810151838201526020016125eb565b50505050905090810190601f1680156126305780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601354600090600160a01b900460ff161561266d57612666848484612e74565b90506125a8565b60006126846019548461284a90919063ffffffff16565b9050612691858583612f06565b61269c858583612fea565b6126a7858583613087565b6126b18585613356565b6126bc85858361336d565b6001600160a01b0385166000908152600460205260409020546126df90826127ae565b6001600160a01b038616600090815260046020526040812091909155612705868661341b565b61270f578161271a565b61271a868684613461565b6001600160a01b03861660009081526004602052604090205490915061274090826127f0565b6001600160a01b03808716600081815260046020526040902092909255601954908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612791908590612566565b60408051918252519081900360200190a350600195945050505050565b60006125a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125af565b6000828201838110156125a8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261285957506000611288565b8282028284828161286657fe5b04146125a85760405162461bcd60e51b8152600401808060200182810382526021815260200180613a106021913960400191505060405180910390fd5b60006128ad61188f565b6035549091506000906128c8906001600160a01b0316611763565b9050808211156128d6578091505b602e805460ff1916905542602c819055602d80546000908152602260209081526040808320546023835281842080546001600160a01b0319166001600160a01b0390921691909117905583548352602582528083209490945591548152602690915220829055602a5461294990836127f0565b602a55602d546000908152602260209081526040808320546001600160a01b03168352602890915290205461297e90836127f0565b602d546000908152602260209081526040808320546001600160a01b03908116845260289092529091209190915560355483916129bb9116611763565b101580156129f15750602d546000908152602260209081526040808320546001600160a01b03168352602990915290205460ff16155b8015612a195750602d546000908152602260205260409020546001600160a01b031661dead14155b15612a8f57603554602d5460009081526022602052604080822054815163a74c142360e01b81526001600160a01b03918216600482015260248101879052915193169263a74c14239260448084019391929182900301818387803b158015612a8057600080fd5b505af1925050508015611e5d57505b5050565b601354600160a01b900460ff1615612aaa5761184c565b601754612ab89060016127f0565b601755601854601554601b54429190910390600090612ad8908390612566565b905060005b81811015612b1457601a54612b0990629896809061154590612b009083906127f0565b6018549061284a565b601855600101612add565b50601854612b2a906507326b47ffff1990612566565b601955601854612b3a90846127ae565b601655601b54612b5890612b4f90839061284a565b601554906127f0565b6015556012546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b158015612ba457600080fd5b505af1158015612bb8573d6000803e3d6000fd5b50505050426017547f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb26018546040518082815260200191505060405180910390a3505050565b602e805460ff19166001908117909155602d54612c1a916127f0565b602d818155600091825260226020908152604080842080546001600160a01b0319166001600160a01b03969096169590951790945542602b819055915483526024905291902055565b6013805460ff60a01b1916600160a01b179055600a54600090612c8e906002906117219060016127f0565b9050600a5460001415612ccb57612cc86002611721600854612cc2600754612cc260016006546127f090919063ffffffff16565b906127f0565b90505b6000612ce6826115456006548661284a90919063ffffffff16565b90506000612cf484836127ae565b905047612d0082613585565b6000612d0c47836127ae565b90506000612d2f612d28600654886127ae90919063ffffffff16565b8390612566565b90506000612d486006548361284a90919063ffffffff16565b90508015612d5a57612d5a868261375f565b600754600090612d6f9061172185600261284a565b90508015612db3576020546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612db1573d6000803e3d6000fd5b505b478015612df6576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612df4573d6000803e3d6000fd5b505b50506013805460ff60a01b191690555050505050505050565b60008183612e5e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126035781810151838201526020016125eb565b506000838581612e6a57fe5b0495945050505050565b600080612e8c6019548461284a90919063ffffffff16565b6001600160a01b038616600090815260046020526040902054909150612eb290826127ae565b6001600160a01b038087166000908152600460205260408082209390935590861681522054612ee190826127f0565b6001600160a01b03851660009081526004602052604090205550600190509392505050565b6001600160a01b03831660009081526005602052604090205460ff16158015612f4857506001600160a01b03821660009081526005602052604090205460ff16155b8015612f5d57506001600160a01b0382163014155b8015612f7457506001600160a01b03821661dead14155b8015612f8e57506013546001600160a01b03838116911614155b8015612fa85750601f546001600160a01b03838116911614155b15611e5d57601954600254612fbc9161284a565b6001600160a01b038316600090815260046020526040902054612fdf90836127f0565b1115611e5d57600080fd5b601954600154612ff99161284a565b8111158061301f57506001600160a01b03831660009081526005602052604090205460ff165b8061304257506001600160a01b03821660009081526005602052604090205460ff165b611e5d576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b602e5460ff161580156130b05750426130ad603054602c546127f090919063ffffffff16565b11155b80156130c957506013546001600160a01b038481169116145b80156130df5750601354600160a01b900460ff16155b80156130f95750601954601e546130f59161284a565b8110155b801561311e57506001600160a01b03821660009081526029602052604090205460ff16155b80156131315750602e54610100900460ff165b1561313f5761313f82612bfe565b602e5460ff16801561315e57506013546001600160a01b038481169116145b80156131745750601354600160a01b900460ff16155b801561318e5750601954601e5461318a9161284a565b8110155b80156131b05750426131ad603154602b546127f090919063ffffffff16565b10155b80156131d557506001600160a01b03821660009081526029602052604090205460ff16155b80156131e85750602e54610100900460ff165b1561324757602d8054600090815260226020908152604080832080546001600160a01b0319166001600160a01b03881617905542602b55925482526027905220546132349060016127f0565b602d546000908152602760205260409020555b602e5460ff16801561326657506013546001600160a01b038381169116145b801561328e5750602d546000908152602260205260409020546001600160a01b038481169116145b80156132a15750602e54610100900460ff165b156132f957602d8054600090815260226020908152604080832080546001600160a01b03191661dead17905542602b55925482526027905220546132e69060016127f0565b602d546000908152602760205260409020555b602e5460ff1680156133155750601354600160a01b900460ff16155b8015613336575042613334603154602b546127f090919063ffffffff16565b105b80156133495750602e54610100900460ff165b15611e5d57611e5d6128a3565b613360828261381f565b15612a8f57612a8f612a93565b6013546001600160a01b038481169116148015906133a457506001600160a01b03831660009081526005602052604090205460ff16155b80156133ba5750601354600160a01b900460ff16155b156133d157600f546133cd9060016127f0565b600f555b6133dc8383836138d6565b801561340157506001600160a01b03831660009081526005602052604090205460ff16155b15611e5d57613411601c54612c63565b6000600f55505050565b6001600160a01b03821660009081526005602052604081205460ff161580156125a85750506001600160a01b031660009081526005602052604090205460ff1615919050565b60008061346e85856139a8565b9050600061348b82611721600d548761256690919063ffffffff16565b905060006134aa600954611721600d548861256690919063ffffffff16565b306000908152600460205260409020549091506134c790836127f0565b306000818152600460205260409020919091556019546001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613515908690612566565b60408051918252519081900360200190a3600081118015613541575061353b87876139a8565b60095411155b156135705760365460195461356e9130916001600160a01b0390911690613569908590612566565b612646565b505b61357a85836127ae565b979650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106135b457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601160019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561362257600080fd5b505afa158015613636573d6000803e3d6000fd5b505050506040513d602081101561364c57600080fd5b505181518290600190811061365d57fe5b6001600160a01b039283166020918202929092010152601154613687916101009091041683611227565b50601160019054906101000a90046001600160a01b03166001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561372257818101518382015260200161370a565b505050509050019650505050505050600060405180830381600087803b15801561374b57600080fd5b505af115801561200f573d6000803e3d6000fd5b60115461377a9061010090046001600160a01b031683611227565b50601154601f546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a482015290516101009093049091169163f305d71991849160c480830192606092919082900301818588803b1580156137f457600080fd5b505af1158015613808573d6000803e3d6000fd5b50505050506040513d60608110156117f557600080fd5b601354600090600160a81b900460ff1680156138445750601854670de0b6b3a7640000115b801561385e57506013546001600160a01b03848116911614155b801561388357506001600160a01b03831660009081526005602052604090205460ff16155b80156138a857506001600160a01b03821660009081526005602052604090205460ff16155b80156138be5750601354600160a01b900460ff16155b80156125a8575050601b546015540142101592915050565b6013546000906001600160a01b0385811691161480159061391057506001600160a01b03841660009081526005602052604090205460ff16155b801561393557506001600160a01b03831660009081526005602052604090205460ff16155b801561394b5750601354600160a01b900460ff16155b8015613959575060115460ff165b80156139675750601d548210155b80156139905750601c546019543060009081526004602052604090205461398d91612566565b10155b80156139a05750601054600f5410155b949350505050565b6013546000906001600160a01b0383811691161480156139ca57506000600b54115b156139d85750600b54611288565b6013546001600160a01b0384811691161480156139f757506000600a54115b15613a055750600a54611288565b50600c549291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220d6882f6dbf3646e86acd9f9d1930c9ec8c7119b0cab0212dc8a7960341e202b964736f6c63430007060033
Deployed Bytecode Sourcemap
6494:23554:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25829:447;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25829:447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8424:75;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11351:76;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28476:251;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28476:251:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9358:48;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9358:48:0;;:::i;9248:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9248:49:0;;:::i;23001:287::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23001:287:0;;:::i;:::-;;;;-1:-1:-1;;;;;23001:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11684:84;;;;;;;;;;;;;:::i;24215:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24215:163:0;;;;;;;:::i;9619:31::-;;;;;;;;;;;;;:::i;29723:118::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29723:118:0;;;;;;;;-1:-1:-1;;;;;29723:118:0;;:::i;10001:40::-;;;;;;;;;;;;;:::i;12562:412::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12562:412:0;;;;;;;;;;;;;;;;;:::i;9141:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9141:47:0;;:::i;:::-;;;;-1:-1:-1;;;;;9141:47:0;;;;;;;;;;;;;;7405:44;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7405:44:0;-1:-1:-1;;;;;7405:44:0;;:::i;28735:207::-;;;;;;;;;;;;;:::i;6705:34::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9528:49;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9528:49:0;-1:-1:-1;;;;;9528:49:0;;:::i;5153:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5153:87:0;-1:-1:-1;;;;;5153:87:0;;:::i;11519:75::-;;;;;;;;;;;;;:::i;8150:31::-;;;;;;;;;;;;;:::i;6746:49::-;;;;;;;;;;;;;:::i;8588:73::-;;;;;;;;;;;;;:::i;9693:27::-;;;;;;;;;;;;;:::i;28085:383::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28085:383:0;;;;;;;;:::i;8267:27::-;;;;;;;;;;;;;:::i;10095:30::-;;;;;;;;;;;;;:::i;9854:34::-;;;;;;;;;;;;;:::i;10048:40::-;;;;;;;;;;;;;:::i;8506:75::-;;;;;;;;;;;;;:::i;23815:189::-;;;;;;;;;;;;;:::i;6802:39::-;;;;;;;;;;;;;:::i;24386:254::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24386:254:0;;;;;;;;;;;;:::i;8072:29::-;;;;;;;;;;;;;:::i;9195:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9195:46:0;;:::i;7887:30::-;;;;;;;;;;;;;:::i;12105:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12105:123:0;-1:-1:-1;;;;;12105:123:0;;:::i;9657:29::-;;;;;;;;;;;;;:::i;11774:52::-;;;;;;;;;;;;;:::i;7191:75::-;;;;;;;;;;;;;:::i;24012:88::-;;;;;;;;;;;;;:::i;9304:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9304:47:0;;:::i;8336:32::-;;;;;;;;;;;;;:::i;7112:72::-;;;;;;;;;;;;;:::i;9467:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9467:54:0;-1:-1:-1;;;;;9467:54:0;;:::i;11832:69::-;;;;;;;;;;;;;:::i;21690:733::-;;;;;;;;;;;;;:::i;26284:284::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26284:284:0;;;;;;;:::i;11600:78::-;;;;;;;;;;;;;:::i;8375:42::-;;;;;;;;;;;;;:::i;23671:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23671:136:0;;;;;;;;;;:::i;24648:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24648:110:0;;:::i;12234:138::-;;;;;;;;;;;;;:::i;11433:80::-;;;;;;;;;;;;;:::i;25132:92::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25132:92:0;;:::i;8108:35::-;;;;;;;;;;;;;:::i;9763:33::-;;;;;;;;;;;;;:::i;25348:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25348:157:0;-1:-1:-1;;;;;25348:157:0;;:::i;27504:573::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27504:573:0;;;;;;;;:::i;7989:19::-;;;;;;;;;;;;;:::i;22431:149::-;;;;;;;;;;;;;:::i;12380:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12380:174:0;;;;;;;;:::i;27170:165::-;;;;;;;;;;;;;:::i;9413:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9413:47:0;;:::i;8042:23::-;;;;;;;;;;;;;:::i;12010:89::-;;;;;;;;;;;;;:::i;28950:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28950:252:0;;;;;;;;;;;;;;;;;:::i;25748:73::-;;;;;;;;;;;;;:::i;9584:28::-;;;;;;;;;;;;;:::i;24108:99::-;;;;;;;;;;;;;:::i;9727:29::-;;;;;;;;;;;;;:::i;23560:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23560:103:0;;;;:::i;11907:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11907:97:0;-1:-1:-1;;;;;11907:97:0;;:::i;23296:256::-;;;;;;;;;;;;;:::i;26737:93::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26737:93:0;;:::i;8188:32::-;;;;;;;;;;;;;:::i;27343:153::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27343:153:0;;;;;;;;;;:::i;9945:49::-;;;;;;;;;;;;;:::i;24893:231::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24893:231:0;;;;:::i;26838:324::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26838:324:0;;;;;;;;;;;;:::i;8227:33::-;;;;;;;;;;;;;:::i;24766:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24766:119:0;-1:-1:-1;;;;;24766:119:0;;:::i;25232:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25232:108:0;;:::i;5246:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5246:111:0;-1:-1:-1;;;;;5246:111:0;;:::i;9895:43::-;;;;;;;;;;;;;:::i;26576:153::-;;;;;;;;;;;;;:::i;29210:505::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29210:505:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;25829:447::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;26004:12:::1;:25:::0;;;26031:12:::1;:25:::0;;;26058:10:::1;:21:::0;;;26081:10:::1;:21:::0;;;26104:8:::1;:17:::0;;;26123:7:::1;:15:::0;;;26140:11:::1;:20:::0;;;26191:14:::1;::::0;26179:26;::::1;::::0;::::1;::::0;:55:::1;;;26220:14;;26209:7;;:25;;26179:55;:88;;;;;26253:14;;26238:11;;:29;;26179:88;26171:97;;;::::0;::::1;;25829:447:::0;;;;;;;:::o;8424:75::-;;;;:::o;11351:76::-;11420:5;;;;;;;;;;;;-1:-1:-1;;;11420:5:0;;;;11351:76;;:::o;28476:251::-;28617:10;28577:4;28599:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;28599:38:0;;;;;;;;;;;:46;;;28661:36;;;;;;;28577:4;;28599:38;;28617:10;;28661:36;;;;;;;;-1:-1:-1;28715:4:0;28476:251;;;;;:::o;9358:48::-;;;;;;;;;;;;;:::o;9248:49::-;;;;;;;;;;;;;:::o;23001:287::-;23064:14;23169:19;;;:11;:19;;;;;;;;;23190:14;:22;;;;;;23214:12;:20;;;;;;23236:12;:20;;;;;;23258:13;:21;;;;;;;;-1:-1:-1;;;;;23169:19:0;;;;23214:20;;23236;23001:287::o;11684:84::-;11754:12;;11684:84;:::o;24215:163::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;24306:21:::1;:32:::0;;;;24340:20:::1;:30:::0;24215:163::o;9619:31::-;;;;:::o;29723:118::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29804:19:0::1;;::::0;;;:12:::1;:19;::::0;;;;:29;;-1:-1:-1;;29804:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29723:118::o;10001:40::-;;;;:::o;12562:412::-;12672:4;12659:2;-1:-1:-1;;;;;9051:18:0;;9043:27;;;;;;-1:-1:-1;;;;;12693:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;12717:10:::1;12693:35:::0;;;;;;;;-1:-1:-1;;12693:50:0::1;12689:215;;12798:104;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;12798:104:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;12798:23:0;::::1;-1:-1:-1::0;12798:23:0;;;:17:::1;:23:::0;;;;;12840:10:::1;12798:67:::0;;;;;;;;;;:104:::1;::::0;12870:5;;12798:71:::1;:104::i;:::-;-1:-1:-1::0;;;;;12760:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;12784:10:::1;12760:35:::0;;;;;;;:142;12689:215:::1;12914:30;12928:4;12934:2;12938:5;12914:13;:30::i;:::-;-1:-1:-1::0;12962:4:0::1;::::0;12562:412;-1:-1:-1;;;;;12562:412:0:o;9141:47::-;;;;;;;;;;;;-1:-1:-1;;;;;9141:47:0;;:::o;7405:44::-;;;;;;;;;;;;;;;:::o;28735:207::-;28907:12;;28861:9;:21;;;;8701:42;28788:7;28840:15;;;;;28788:7;;28828:106;;28907:12;;28829:54;;28861:21;28829:27;;-1:-1:-1;;6882:54:0;28829:10;:27::i;:::-;:31;;:54::i;:::-;28828:60;;:106::i;:::-;28808:126;;28735:207;:::o;6705:34::-;6738:1;6705:34;:::o;9528:49::-;;;;;;;;;;;;;;;:::o;5153:87::-;5208:4;5233:5;-1:-1:-1;;;;;5233:5:0;;;5222:16;;;;5153:87::o;11519:75::-;6738:1;11519:75;:::o;8150:31::-;;;;:::o;6746:49::-;-1:-1:-1;;6746:49:0;:::o;8588:73::-;;;;:::o;9693:27::-;;;;:::o;28085:383::-;28243:10;28167:4;28225:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;28225:62:0;;;;;;;;;;:78;;28292:10;28225:66;:78::i;:::-;28202:10;28184:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;28184:38:0;;;;;;;;;;;;:119;;;28319;;;;;;28184:38;;28319:119;;;;;;;;;;;-1:-1:-1;28456:4:0;28085:383;;;;:::o;8267:27::-;;;;:::o;10095:30::-;;;-1:-1:-1;;;;;10095:30:0;;:::o;9854:34::-;;;;:::o;10048:40::-;;;;:::o;8506:75::-;;;;:::o;23815:189::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;23873:17:::1;:25:::0;;-1:-1:-1;;23873:25:0::1;::::0;;23926:15:::1;23909:14;:32:::0;;;23965:12:::1;::::0;23893:5:::1;23952:26:::0;;;:12:::1;:26;::::0;;;;:44;23815:189::o;6802:39::-;6840:1;6802:39;:::o;24386:254::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;24501:15:::1;:26:::0;;;24529:15:::1;:26:::0;;;24583:49:::1;24624:6;24583:28;24601:9:::0;24583:13:::1;:11;:13::i;:::-;:17:::0;::::1;:28::i;:49::-;24567:13;:65:::0;-1:-1:-1;;;24386:254:0:o;8072:29::-;;;-1:-1:-1;;;8072:29:0;;;;;:::o;9195:46::-;;;;;;;;;;;;-1:-1:-1;;;;;9195:46:0;;:::o;7887:30::-;;;;;;:::o;12105:123::-;12213:12;;-1:-1:-1;;;;;12189:19:0;;12172:7;12189:19;;;:9;:19;;;;;;12172:7;;12189:37;;:19;:23;:37::i;9657:29::-;;;;:::o;11774:52::-;11812:4;;;;;;;;;-1:-1:-1;;;;;11812:4:0;-1:-1:-1;;;;;11806:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11774:52::o;7191:75::-;;;;:::o;24012:88::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;24071:21:::1;:19;:21::i;:::-;24012:88::o:0;9304:47::-;;;;;;;;;;;;;:::o;8336:32::-;;;;:::o;7112:72::-;;;;:::o;9467:54::-;;;;;;;;;;;;;:::o;11832:69::-;11893:6;;-1:-1:-1;;;11893:6:0;;;;11892:7;;11832:69::o;21690:733::-;21744:7;21764:20;21787:59;21838:6;21787:38;21805:19;;21787:13;:11;:13::i;:59::-;21893:21;;21875:12;;21860:28;;;;:14;:28;;;;;;21764:82;;-1:-1:-1;21919:15:0;;21860:55;;:32;:55::i;:::-;:74;;:140;;;;-1:-1:-1;21987:12:0;;21972:28;;;;:14;:28;;;;;;21952:16;;:48;;21860:140;21857:529;;;22066:12;;22012:17;22051:28;;;:14;:28;;;;;;22032:16;;22147:21;;22125:16;;22032:47;;;;;22012:17;22111:58;;22147:21;22111:31;;22032:47;;22111:13;:31::i;:58::-;22090:79;;22180:14;22197:60;22249:6;22197:39;22215:20;;22197:13;:11;:13::i;:60::-;22180:77;;22269:20;22292:44;22319:16;;22292:22;22303:10;22292:6;:10;;:22;;;;:::i;:44::-;22269:67;-1:-1:-1;22354:30:0;:12;22269:67;22354:16;:30::i;:::-;22347:37;;;;;;;;;26284:284;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;26367:13:::1;26383:41;26417:5;26383:21;26400:3;26383:12;;:16;;:21;;;;:::i;:41::-;26367:57;;26435:17;26455:45;26493:5;26455:25;26472:7;26455:12;;:16;;:25;;;;:::i;:45::-;26511:12;:20:::0;;;;-1:-1:-1;26533:15:0::1;:27:::0;-1:-1:-1;;26284:284:0:o;11600:78::-;11652:7;11670:5;-1:-1:-1;;;;;11670:5:0;11600:78;:::o;8375:42::-;;;;:::o;23671:136::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23763:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:36;;-1:-1:-1;;23763:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23671:136::o;24648:110::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;24721:19:::1;:29:::0;24648:110::o;12234:138::-;12293:7;12310:60;12348:21;12366:1;12348:9;:21::i;:::-;12310:33;12327:15;8701:42;12327:9;:15::i;:::-;12310:12;;;:16;:33::i;11433:80::-;11504:7;;;;;;;;;;;;-1:-1:-1;;;11504:7:0;;;;11433:80;:::o;25132:92::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;25199:10:::1;:17:::0;25132:92::o;8108:35::-;;;;:::o;9763:33::-;;;;;;;;;:::o;25348:157::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;25417:4:::1;:12:::0;;-1:-1:-1;;;;;25417:12:0;;::::1;-1:-1:-1::0;;;;;;25417:12:0;;::::1;::::0;::::1;::::0;;;25440:11:::1;:19:::0;;;::::1;::::0;::::1;::::0;;25470:12:::1;:27:::0;;;;::::1;;::::0;;25348:157::o;27504:573::-;27645:10;27591:4;27627:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;27627:38:0;;;;;;;;;;27680:27;;;27676:237;;27742:10;27765:1;27724:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;27724:38:0;;;;;;;;;:42;27676:237;;;27840:61;:8;27871:15;27840:12;:61::i;:::-;27817:10;27799:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;27799:38:0;;;;;;;;;:102;27676:237;27951:10;27998:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;27928:119:0;;27998:38;;;;;;;;;;;27928:119;;;;;;;;;27951:10;27928:119;;;;;;;;;;;-1:-1:-1;28065:4:0;;27504:573;-1:-1:-1;;;27504:573:0:o;7989:19::-;;;-1:-1:-1;;;;;7989:19:0;;:::o;22431:149::-;22487:7;22513:59;22556:15;22514:36;22535:14;;22514:16;;:20;;:36;;;;:::i;12380:174::-;12471:4;12458:2;-1:-1:-1;;;;;9051:18:0;;9043:27;;;;;;12488:36:::1;12502:10;12514:2;12518:5;12488:13;:36::i;:::-;-1:-1:-1::0;12542:4:0::1;::::0;12380:174;-1:-1:-1;;;;12380:174:0:o;27170:165::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;27247:4:::1;::::0;27240:37:::1;::::0;;-1:-1:-1;;;27240:37:0;;27271:4:::1;27240:37;::::0;::::1;::::0;;;27225:12:::1;::::0;-1:-1:-1;;;;;27247:4:0::1;::::0;27240:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;27247:4;27240:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27240:37:0;27295:4:::1;::::0;27288:39:::1;::::0;;-1:-1:-1;;;27288:39:0;;27310:10:::1;27288:39;::::0;::::1;::::0;;;;;;;;;27240:37;;-1:-1:-1;;;;;;27295:4:0;;::::1;::::0;27288:21:::1;::::0;:39;;;;;27240:37:::1;::::0;27288:39;;;;;;;;27295:4:::1;::::0;27288:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;27170:165:0:o;9413:47::-;;;;;;;;;;;;;:::o;8042:23::-;;;-1:-1:-1;;;8042:23:0;;;;;:::o;12010:89::-;12049:15;;12041:56;;-1:-1:-1;;;;;12049:15:0;;;;12075:21;12041:56;;;;;12049:15;12041:56;12049:15;12041:56;12075:21;12049:15;12041:56;;;;;;;;;;;;;;;;;;;;;12010:89::o;28950:252::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;29059:12:::1;29081:8;-1:-1:-1::0;;;;;29074:26:0::1;;29109:4;29074:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;29074:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29074:41:0;;-1:-1:-1;;;;;;29126:25:0;::::1;;29152:9:::0;29163:30:::1;29189:3;29163:21;29074:41:::0;29172:11;29163:8:::1;:21::i;:30::-;29126:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;29126:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;;28950:252:0:o;25748:73::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;25805:8:::1;:6;:8::i;9584:28::-:0;;;;:::o;24108:99::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;24167:32:::1;8701:42;24167:17;:32::i;9727:29::-:0;;;;;;:::o;23560:103::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;23631:14:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;23631:24:0;;::::1;::::0;;;::::1;::::0;;23560:103::o;11907:97::-;-1:-1:-1;;;;;11983:19:0;11969:4;11983:19;;;:12;:19;;;;;;;;;11907:97::o;23296:256::-;23424:12;;23351:7;23409:28;;;:14;:28;;;;;;23494:21;;23391:15;:46;;;;;23351:7;;23469:47;;:20;23391:46;23483:5;23469:13;:20::i;:47::-;23448:68;-1:-1:-1;;;23296:256:0;:::o;26737:93::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;26806:16:::1;26815:6;26806:8;:16::i;8188:32::-:0;;;;:::o;27343:153::-;-1:-1:-1;;;;;27454:25:0;;;27427:7;27454:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;27343:153::o;9945:49::-;;;;:::o;24893:231::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;24964:8:::1;24961:156;;;24989:11;:22:::0;;-1:-1:-1;;;;24989:22:0::1;-1:-1:-1::0;;;24989:22:0;::::1;;;;::::0;;25045:15:::1;24989:11;25026:34:::0;24961:156:::1;;;25093:11;:22:::0;;;::::1;;-1:-1:-1::0;;;25093:22:0::1;-1:-1:-1::0;;;;25093:22:0;;::::1;;::::0;;24893:231;:::o;26838:324::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;26966:10:::1;:24:::0;;;27018:12:::1;::::0;:53:::1;::::0;27063:6:::1;::::0;27018:32:::1;::::0;27035:14;27018:16:::1;:32::i;:53::-;27002:13;:69:::0;27101:12:::1;::::0;:53:::1;::::0;27146:6:::1;::::0;27101:32:::1;::::0;27118:14;27101:16:::1;:32::i;:53::-;27083:15;:71:::0;-1:-1:-1;;;26838:324:0:o;8227:33::-;;;;:::o;24766:119::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;24842:15:::1;:35:::0;;-1:-1:-1;;;;;;24842:35:0::1;-1:-1:-1::0;;;;;24842:35:0;;;::::1;::::0;;;::::1;::::0;;24766:119::o;25232:108::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;25307:14:::1;:25:::0;25232:108::o;5246:111::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;5312:5:::1;:11:::0;;-1:-1:-1;;;;;5312:11:0;::::1;-1:-1:-1::0;;;;;;5312:11:0;;::::1;::::0;::::1;::::0;;;5330:25:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5246:111:::0;:::o;9895:43::-;;;;:::o;26576:153::-;26681:12;;8701:42;26623:7;26661:15;;;:9;:15;;;;26623:7;;;;26661:33;;:19;:33::i;:::-;26642:52;-1:-1:-1;;26576:153:0;:::o;29210:505::-;5112:19;5120:10;5112:7;:19::i;:::-;5104:38;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;-1:-1:-1;;;5104:38:0;;;;;;;;;;;;;;;29370:17:::1;:38:::0;;-1:-1:-1;;;;;29370:38:0;;::::1;-1:-1:-1::0;;;;;;29370:38:0;;::::1;::::0;::::1;::::0;;;:17:::1;29410:32:::0;;;:12:::1;:32;::::0;;;;;;;:39;;-1:-1:-1;;29410:39:0;;::::1;29370:38:::0;29410:39;;::::1;::::0;;;29460:38;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;29500:32;;;;;;:39;;;::::1;::::0;::::1;::::0;;29550:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;29586:30;;;;;;:37;;;::::1;::::0;::::1;::::0;;29634:15:::1;:34:::0;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;29670:30;;;;:37;;;;::::1;;::::0;;29210:505::o;2626:132::-;2684:7;2711:39;2715:1;2718;2711:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2704:46;2626:132;-1:-1:-1;;;2626:132:0:o;2134:226::-;2254:7;2290:12;2282:6;;;;2274:29;;;;-1:-1:-1;;;2274:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2326:5:0;;;2134:226::o;13273:818::-;13386:6;;13366:4;;-1:-1:-1;;;13386:6:0;;;;13383:62;;;13401:42;13416:6;13424:9;13435:7;13401:14;:42::i;:::-;13394:49;;;;13383:62;13455:14;13472:25;13484:12;;13472:7;:11;;:25;;;;:::i;:::-;13455:42;;13508:41;13523:6;13531:9;13542:6;13508:14;:41::i;:::-;13560:39;13573:6;13581:9;13592:6;13560:12;:39::i;:::-;13610:34;13618:6;13626:9;13637:6;13610:7;:34::i;:::-;13655:30;13667:6;13675:9;13655:11;:30::i;:::-;13696:40;13710:6;13718:9;13729:6;13696:13;:40::i;:::-;-1:-1:-1;;;;;13767:17:0;;;;;;:9;:17;;;;;;:29;;13789:6;13767:21;:29::i;:::-;-1:-1:-1;;;;;13747:17:0;;;;;;:9;:17;;;;;:49;;;;13832:32;13757:6;13854:9;13832:13;:32::i;:::-;:78;;13904:6;13832:78;;;13867:34;13875:6;13883:9;13894:6;13867:7;:34::i;:::-;-1:-1:-1;;;;;13944:20:0;;;;;;:9;:20;;;;;;13807:103;;-1:-1:-1;13944:40:0;;13807:103;13944:24;:40::i;:::-;-1:-1:-1;;;;;13921:20:0;;;;;;;:9;:20;;;;;:63;;;;14047:12;;14000:61;;;;;;14028:32;;:14;;:18;:32::i;:::-;14000:61;;;;;;;;;;;;;;;-1:-1:-1;14079:4:0;;13273:818;-1:-1:-1;;;;;13273:818:0:o;1990:136::-;2048:7;2075:43;2079:1;2082;2075:43;;;;;;;;;;;;;;;;;:3;:43::i;1801:181::-;1859:7;1891:5;;;1915:6;;;;1907:46;;;;;-1:-1:-1;;;1907:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2368:250;2426:7;2450:6;2446:47;;-1:-1:-1;2480:1:0;2473:8;;2446:47;2517:5;;;2521:1;2517;:5;:1;2541:5;;;;;:10;2533:56;;;;-1:-1:-1;;;2533:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20717:965;20768:20;20791:23;:21;:23::i;:::-;20868:15;;20768:46;;-1:-1:-1;20825:22:0;;20850:35;;-1:-1:-1;;;;;20868:15:0;20850:9;:35::i;:::-;20825:60;;20914:14;20899:12;:29;20896:65;;;20945:14;20930:29;;20896:65;20971:17;:25;;-1:-1:-1;;20971:25:0;;;21024:15;21007:14;:32;;;21091:12;;;20991:5;21078:26;;;:12;:26;;;;;;;;;21050:11;:25;;;;;:54;;-1:-1:-1;;;;;;21050:54:0;-1:-1:-1;;;;;21078:26:0;;;21050:54;;;;;;21128:12;;21115:26;;:12;:26;;;;;:44;;;;21184:12;;21170:27;;:13;:27;;;;:42;;;21239:13;;:31;;21200:12;21239:17;:31::i;:::-;21223:13;:47;21364:12;;21331:47;21351:26;;;:12;:26;;;;;;;;;-1:-1:-1;;;;;21351:26:0;21331:47;;:19;:47;;;;;;:65;;21383:12;21331:51;:65::i;:::-;21314:12;;21281:47;21301:26;;;:12;:26;;;;;;;;;-1:-1:-1;;;;;21301:26:0;;;21281:47;;:19;:47;;;;;;:115;;;;21428:15;;21449:12;;21410:35;;21428:15;21410:9;:35::i;:::-;:51;;:101;;;;-1:-1:-1;21497:12:0;;21466:45;21484:26;;;:12;:26;;;;;;;;;-1:-1:-1;;;;;21484:26:0;21466:45;;:17;:45;;;;;;;;21465:46;21410:101;:161;;;;-1:-1:-1;21541:12:0;;21528:26;;;;:12;:26;;;;;;-1:-1:-1;;;;;21528:26:0;8701:42;21528:43;;21410:161;21407:268;;;21587:15;;21634:12;;21587:15;21621:26;;;:12;:26;;;;;;;21587:75;;-1:-1:-1;;;21587:75:0;;-1:-1:-1;;;;;21621:26:0;;;21587:75;;;;;;;;;;;;:15;;;:33;;:75;;;;;:15;;:75;;;;;;:15;;:75;;;;;;;;;;;;;;;;;;;;;;;21583:91;20717:965;;:::o;18381:749::-;18422:6;;-1:-1:-1;;;18422:6:0;;;;18419:19;;;18430:7;;18419:19;18469:18;;:34;;18500:1;18469:22;:34::i;:::-;18448:18;:55;18539:12;;18600:16;;18657:14;;18582:15;:34;;;;;18514:22;;18643:29;;18582:34;;18643:13;:29::i;:::-;18627:45;;18688:9;18683:144;18707:5;18703:1;:9;18683:144;;;18790:10;;18749:76;;18807:17;;18749:53;;18766:35;;18807:17;;18766:23;:35::i;:::-;18749:12;;;:16;:53::i;:76::-;18734:12;:91;18714:3;;18683:144;;;-1:-1:-1;18863:12:0;;18852:24;;-1:-1:-1;;6882:54:0;18852:10;:24::i;:::-;18837:12;:39;18907:12;;:32;;18924:14;18907:16;:32::i;:::-;18887:17;:52;19000:14;;18969:47;;18990:25;;:5;;:9;:25::i;:::-;18969:16;;;:20;:47::i;:::-;18950:16;:66;19027:12;;:19;;;-1:-1:-1;;;;;;19027:19:0;;;;-1:-1:-1;;;;;19027:12:0;;;;:17;;:19;;;;;:12;;:19;;;;;;;;:12;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19092:15;19072:18;;19062:60;19109:12;;19062:60;;;;;;;;;;;;;;;;;;18381:749;;;:::o;20384:325::-;20454:17;:24;;-1:-1:-1;;20454:24:0;20474:4;20454:24;;;;;;20509:12;;:28;;:16;:28::i;:::-;20494:12;:43;;;20553:26;;;;:12;:26;;;;;;;;:38;;-1:-1:-1;;;;;;20553:38:0;-1:-1:-1;;;;;20553:38:0;;;;;;;;;;;20625:15;20606:16;:34;;;20670:12;;20655:28;;:14;:28;;;;;:46;20384:325::o;15937:1112::-;9103:6;:13;;-1:-1:-1;;;;9103:13:0;-1:-1:-1;;;9103:13:0;;;16023:8:::1;::::0;9103:13;;16023:22:::1;::::0;16043:1:::1;::::0;16023:15:::1;::::0;9112:4;16023:12:::1;:15::i;:22::-;16000:45;;16059:8;;16071:1;16059:13;16056:97;;;16089:62;16149:1;16090:53;16132:10;;16090:37;16114:12;;16090:19;16107:1;16090:12;;:16;;:19;;;;:::i;:::-;:23:::0;::::1;:37::i;16089:62::-;16074:77;;16056:97;16163:32;16198:42;16227:12;16198:24;16209:12;;16198:6;:10;;:24;;;;:::i;:42::-;16163:77:::0;-1:-1:-1;16251:14:0::1;16268:36;:6:::0;16163:77;16268:10:::1;:36::i;:::-;16251:53:::0;-1:-1:-1;16340:21:0::1;16372:24;16251:53:::0;16372:16:::1;:24::i;:::-;16407:20;16430:41;:21;16456:14:::0;16430:25:::1;:41::i;:::-;16407:64;;16482:19;16503:48;16520:30;16537:12;;16520;:16;;:30;;;;:::i;:::-;16503:12:::0;;:16:::1;:48::i;:::-;16482:69;;16562:29;16594;16610:12;;16594:11;:15;;:29;;;;:::i;:::-;16562:61:::0;-1:-1:-1;16637:34:0;;16634:103:::1;;16673:61;16686:24;16712:21;16673:12;:61::i;:::-;16793:12;::::0;16747:20:::1;::::0;16770:36:::1;::::0;:18:::1;:11:::0;16786:1:::1;16770:15;:18::i;:36::-;16747:59:::0;-1:-1:-1;16820:16:0;;16817:72:::1;;16846:17;::::0;16838:49:::1;::::0;-1:-1:-1;;;;;16846:17:0;;::::1;::::0;16838:49;::::1;;;::::0;16874:12;;16846:17:::1;16838:49:::0;16846:17;16838:49;16874:12;16846:17;16838:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16817:72;16925:21;16960:28:::0;;16957:85:::1;;16998:15;::::0;16990:50:::1;::::0;-1:-1:-1;;;;;16998:15:0;;::::1;::::0;16990:50;::::1;;;::::0;17024:15;;16998::::1;16990:50:::0;16998:15;16990:50;17024:15;16998;16990:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16957:85;-1:-1:-1::0;;9119:6:0;:14;;-1:-1:-1;;;;9119:14:0;;;-1:-1:-1;;;;;;;;15937:1112:0:o;2766:225::-;2886:7;2921:12;2914:5;2906:28;;;;-1:-1:-1;;;2906:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2945:9;2961:1;2957;:5;;;;;;;2766:225;-1:-1:-1;;;;;2766:225:0:o;12982:283::-;13066:4;13083:15;13101:24;13112:12;;13101:6;:10;;:24;;;;:::i;:::-;-1:-1:-1;;;;;13154:15:0;;;;;;:9;:15;;;;;;13083:42;;-1:-1:-1;13154:28:0;;13083:42;13154:19;:28::i;:::-;-1:-1:-1;;;;;13136:15:0;;;;;;;:9;:15;;;;;;:46;;;;13209:13;;;;;;;:26;;13227:7;13209:17;:26::i;:::-;-1:-1:-1;;;;;13193:13:0;;;;;;:9;:13;;;;;:42;-1:-1:-1;13253:4:0;;-1:-1:-1;12982:283:0;;;;;:::o;14099:386::-;-1:-1:-1;;;;;14203:20:0;;;;;;:12;:20;;;;;;;;14202:21;:49;;;;-1:-1:-1;;;;;;14228:23:0;;;;;;:12;:23;;;;;;;;14227:24;14202:49;:79;;;;-1:-1:-1;;;;;;14255:26:0;;14276:4;14255:26;;14202:79;:123;;;;-1:-1:-1;;;;;;14299:26:0;;8701:42;14299:26;;14202:123;:144;;;;-1:-1:-1;14342:4:0;;-1:-1:-1;;;;;14329:17:0;;;14342:4;;14329:17;;14202:144;:178;;;;-1:-1:-1;14363:17:0;;-1:-1:-1;;;;;14350:30:0;;;14363:17;;14350:30;;14202:178;14199:279;;;14462:12;;14442:15;;:33;;:19;:33::i;:::-;-1:-1:-1;;;;;14405:20:0;;;;;;:9;:20;;;;;;:32;;14430:6;14405:24;:32::i;:::-;14404:71;;14396:80;;;;;25513:227;25646:12;;25629;;:30;;:16;:30::i;:::-;25619:6;:40;;:64;;;-1:-1:-1;;;;;;25663:20:0;;;;;;:12;:20;;;;;;;;25619:64;:91;;;-1:-1:-1;;;;;;25687:23:0;;;;;;:12;:23;;;;;;;;25619:91;25611:121;;;;;-1:-1:-1;;;25611:121:0;;;;;;;;;;;;-1:-1:-1;;;25611:121:0;;;;;;;;;;;;;;19138:1238;19230:17;;;;19229:18;:76;;;;;19290:15;19251:35;19270:15;;19251:14;;:18;;:35;;;;:::i;:::-;:54;;19229:76;:94;;;;-1:-1:-1;19319:4:0;;-1:-1:-1;;;;;19309:14:0;;;19319:4;;19309:14;19229:94;:105;;;;-1:-1:-1;19328:6:0;;-1:-1:-1;;;19328:6:0;;;;19327:7;19229:105;:163;;;;-1:-1:-1;19379:12:0;;19361:13;;:31;;:17;:31::i;:::-;19351:6;:41;;19229:163;:196;;;;-1:-1:-1;;;;;;19397:28:0;;;;;;:17;:28;;;;;;;;19396:29;19229:196;:214;;;;-1:-1:-1;19429:14:0;;;;;;;19229:214;19226:263;;;19459:28;19477:9;19459:17;:28::i;:::-;19502:17;;;;:35;;;;-1:-1:-1;19533:4:0;;-1:-1:-1;;;;;19523:14:0;;;19533:4;;19523:14;19502:35;:46;;;;-1:-1:-1;19542:6:0;;-1:-1:-1;;;19542:6:0;;;;19541:7;19502:46;:91;;;;-1:-1:-1;19580:12:0;;19562:13;;:31;;:17;:31::i;:::-;19552:6;:41;;19502:91;:164;;;;;19651:15;19610:37;19631:15;;19610:16;;:20;;:37;;;;:::i;:::-;:56;;19502:164;:197;;;;-1:-1:-1;;;;;;19671:28:0;;;;;;:17;:28;;;;;;;;19670:29;19502:197;:215;;;;-1:-1:-1;19703:14:0;;;;;;;19502:215;19499:409;;;19746:12;;;19733:26;;;;:12;:26;;;;;;;;:38;;-1:-1:-1;;;;;;19733:38:0;-1:-1:-1;;;;;19733:38:0;;;;;19805:15;19786:16;:34;19877:12;;19864:26;;:12;:26;;;;:42;;-1:-1:-1;19864:30:0;:42::i;:::-;19848:12;;19835:26;;;;:12;:26;;;;;:71;19499:409;19921:17;;;;:38;;;;-1:-1:-1;19955:4:0;;-1:-1:-1;;;;;19942:17:0;;;19955:4;;19942:17;19921:38;:78;;;;-1:-1:-1;19986:12:0;;19973:26;;;;:12;:26;;;;;;-1:-1:-1;;;;;19963:36:0;;;19973:26;;19963:36;19921:78;:96;;;;-1:-1:-1;20003:14:0;;;;;;;19921:96;19918:294;;;20046:12;;;20033:26;;;;:12;:26;;;;;;;;:42;;-1:-1:-1;;;;;;20033:42:0;8701;20033;;;20109:15;20090:16;:34;20181:12;;20168:26;;:12;:26;;;;:42;;20033;20168:30;:42::i;:::-;20152:12;;20139:26;;;;:12;:26;;;;;:71;19918:294;20225:17;;;;:28;;;;-1:-1:-1;20247:6:0;;-1:-1:-1;;;20247:6:0;;;;20246:7;20225:28;:87;;;;;20297:15;20257:37;20278:15;;20257:16;;:20;;:37;;;;:::i;:::-;:55;20225:87;:105;;;;-1:-1:-1;20316:14:0;;;;;;;20225:105;20222:147;;;20346:21;:19;:21::i;14493:129::-;14572:31;14585:6;14593:9;14572:12;:31::i;:::-;14569:46;;;14605:8;:6;:8::i;14630:326::-;14737:4;;-1:-1:-1;;;;;14727:14:0;;;14737:4;;14727:14;;;;:39;;-1:-1:-1;;;;;;14746:20:0;;;;;;:12;:20;;;;;;;;14745:21;14727:39;:50;;;;-1:-1:-1;14771:6:0;;-1:-1:-1;;;14771:6:0;;;;14770:7;14727:50;14724:94;;;14791:9;;:25;;14813:1;14791:13;:25::i;:::-;14779:9;:37;14724:94;14831:41;14846:6;14854:9;14865:6;14831:14;:41::i;:::-;:66;;;;-1:-1:-1;;;;;;14877:20:0;;;;;;:12;:20;;;;;;;;14876:21;14831:66;14828:121;;;14899:23;14908:13;;14899:8;:23::i;:::-;14944:1;14924:9;:22;14630:326;;;:::o;17817:162::-;-1:-1:-1;;;;;17923:20:0;;17898:4;17923:20;;;:12;:20;;;;;;;;17922:21;:49;;;;-1:-1:-1;;;;;;;17948:23:0;;;;;:12;:23;;;;;;;;17947:24;;17817:162;-1:-1:-1;17817:162:0:o;15240:689::-;15327:7;15347:17;15367:30;15379:6;15387:9;15367:11;:30::i;:::-;15347:50;;15408:17;15428:41;15459:9;15428:26;15439:14;;15428:6;:10;;:26;;;;:::i;:41::-;15408:61;;15480:21;15504:42;15535:10;;15504:26;15515:14;;15504:6;:10;;:26;;;;:::i;:42::-;15602:4;15584:24;;;;:9;:24;;;;;;15480:66;;-1:-1:-1;15584:39:0;;15613:9;15584:28;:39::i;:::-;15575:4;15557:24;;;;:9;:24;;;;;:66;;;;15685:12;;-1:-1:-1;;;;;15639:60:0;;;;;15671:27;;:9;;:13;:27::i;:::-;15639:60;;;;;;;;;;;;;;;15729:1;15713:13;:17;:65;;;;;15748:30;15760:6;15768:9;15748:11;:30::i;:::-;15734:10;;:44;;15713:65;15710:173;;;15831:15;;15867:12;;15794:87;;15816:4;;-1:-1:-1;;;;;15831:15:0;;;;15849:31;;:13;;:17;:31::i;:::-;15794:13;:87::i;:::-;;15710:173;15900:21;:6;15911:9;15900:10;:21::i;:::-;15893:28;15240:689;-1:-1:-1;;;;;;;15240:689:0:o;17391:418::-;17481:16;;;17495:1;17481:16;;;;;;;;17457:21;;17481:16;;;;;;;;;;-1:-1:-1;17481:16:0;17457:40;;17526:4;17508;17513:1;17508:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;17508:23:0;;;-1:-1:-1;;;;;17508:23:0;;;;;17552:6;;;;;;;;;-1:-1:-1;;;;;17552:6:0;-1:-1:-1;;;;;17552:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17552:13:0;17542:7;;:4;;17547:1;;17542:7;;;;;;-1:-1:-1;;;;;17542:23:0;;;:7;;;;;;;;;:23;17592:6;;17576:37;;17592:6;;;;;17601:11;17576:7;:37::i;:::-;;17624:6;;;;;;;;;-1:-1:-1;;;;;17624:6:0;-1:-1:-1;;;;;17624:57:0;;17696:11;17722:1;17738:4;17765;17785:15;17624:177;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17624:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17057:326;17154:6;;17138:37;;17154:6;;;-1:-1:-1;;;;;17154:6:0;17163:11;17138:7;:37::i;:::-;-1:-1:-1;17186:6:0;;17327:17;;17186:189;;;-1:-1:-1;;;17186:189:0;;17249:4;17186:189;;;;;;;;;;-1:-1:-1;17186:189:0;;;;;;;;;;-1:-1:-1;;;;;17327:17:0;;;17186:189;;;;17359:15;17186:189;;;;;;:6;;;;;;;;:22;;17216:9;;17186:189;;;;;;;;;;;;;;17216:9;17186:6;:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17987:386;18104:11;;18067:4;;-1:-1:-1;;;18104:11:0;;;;:55;;;;-1:-1:-1;18133:12:0;;7071:34;-1:-1:-1;18104:55:0;:86;;;;-1:-1:-1;18186:4:0;;-1:-1:-1;;;;;18176:14:0;;;18186:4;;18176:14;;18104:86;:125;;;;-1:-1:-1;;;;;;18209:20:0;;;;;;:12;:20;;;;;;;;18208:21;18104:125;:166;;;;-1:-1:-1;;;;;;18247:23:0;;;;;;:12;:23;;;;;;;;18246:24;18104:166;:190;;;;-1:-1:-1;18288:6:0;;-1:-1:-1;;;18288:6:0;;;;18287:7;18104:190;:261;;;;-1:-1:-1;;18350:14:0;;18331:16;;:33;18311:15;:54;;;17987:386;-1:-1:-1;;17987:386:0:o;22588:405::-;22720:4;;22686;;-1:-1:-1;;;;;22710:14:0;;;22720:4;;22710:14;;;;:48;;-1:-1:-1;;;;;;22738:20:0;;;;;;:12;:20;;;;;;;;22737:21;22710:48;:85;;;;-1:-1:-1;;;;;;22772:23:0;;;;;;:12;:23;;;;;;;;22771:24;22710:85;:105;;;;-1:-1:-1;22809:6:0;;-1:-1:-1;;;22809:6:0;;;;22808:7;22710:105;:129;;;;-1:-1:-1;22828:11:0;;;;22710:129;:167;;;;;22862:15;;22852:6;:25;;22710:167;:239;;;;-1:-1:-1;22936:13:0;;22919:12;;22908:4;22890:24;;;;:9;:24;;;;;;:42;;:28;:42::i;:::-;:59;;22710:239;:275;;;;;22975:10;;22962:9;;:23;;22710:275;22703:282;22588:405;-1:-1:-1;;;;22588:405:0:o;14964:268::-;15079:4;;15043:7;;-1:-1:-1;;;;;15066:17:0;;;15079:4;;15066:17;:41;;;;;15105:1;15087:7;;:20;15066:41;15063:62;;;-1:-1:-1;15116:7:0;;15109:14;;15063:62;15148:4;;-1:-1:-1;;;;;15138:14:0;;;15148:4;;15138:14;:39;;;;;15175:1;15156:8;;:21;15138:39;15135:61;;;-1:-1:-1;15186:8:0;;15179:15;;15135:61;-1:-1:-1;15213:11:0;;14964:268;;;;:::o
Swarm Source
ipfs://d6882f6dbf3646e86acd9f9d1930c9ec8c7119b0cab0212dc8a7960341e202b9
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.