ETH Price: $1,982.77 (-4.45%)

Contract

0xFC9F4D355f560Fb3Cad83A1389bC11801bEDD640
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve245911202026-03-05 11:58:2336 hrs ago1772711903IN
0xFC9F4D35...01bEDD640
0 ETH0.000095642.05806921
Approve245896742026-03-05 7:08:3541 hrs ago1772694515IN
0xFC9F4D35...01bEDD640
0 ETH0.000234445.03962886
Approve245870382026-03-04 22:19:472 days ago1772662787IN
0xFC9F4D35...01bEDD640
0 ETH0.000007130.15367419
Approve245651452026-03-01 21:00:235 days ago1772398823IN
0xFC9F4D35...01bEDD640
0 ETH0.000008860.19052113
Approve245464552026-02-27 6:24:477 days ago1772173487IN
0xFC9F4D35...01bEDD640
0 ETH0.00014163.04323277
Approve245390972026-02-26 5:48:238 days ago1772084903IN
0xFC9F4D35...01bEDD640
0 ETH0.000073723.04065185
Approve245371572026-02-25 23:18:239 days ago1772061503IN
0xFC9F4D35...01bEDD640
0 ETH0.000007430.16011741
Transfer245371512026-02-25 23:17:119 days ago1772061431IN
0xFC9F4D35...01bEDD640
0 ETH0.000782381.5878527
Transfer245371452026-02-25 23:15:599 days ago1772061359IN
0xFC9F4D35...01bEDD640
0 ETH0.002929871.60010984
Approve245365732026-02-25 21:21:119 days ago1772054471IN
0xFC9F4D35...01bEDD640
0 ETH0.000283846.09999333
Transfer245356952026-02-25 18:23:479 days ago1772043827IN
0xFC9F4D35...01bEDD640
0 ETH0.002324443.21848143
Approve245353062026-02-25 17:05:359 days ago1772039135IN
0xFC9F4D35...01bEDD640
0 ETH0.000137242.95328644
Approve245333132026-02-25 10:24:479 days ago1772015087IN
0xFC9F4D35...01bEDD640
0 ETH0.0003768.08046531
Approve245322702026-02-25 6:55:239 days ago1772002523IN
0xFC9F4D35...01bEDD640
0 ETH0.000141113.03267685
Approve245313292026-02-25 3:46:479 days ago1771991207IN
0xFC9F4D35...01bEDD640
0 ETH0.000141693.04520774
Approve245295932026-02-24 21:56:5910 days ago1771970219IN
0xFC9F4D35...01bEDD640
0 ETH0.0011184824.0430545
Transfer245295882026-02-24 21:55:5910 days ago1771970159IN
0xFC9F4D35...01bEDD640
0 ETH0.002575783.03958931
Approve245291912026-02-24 20:36:3510 days ago1771965395IN
0xFC9F4D35...01bEDD640
0 ETH0.000141763.04664039
Approve245286312026-02-24 18:43:5910 days ago1771958639IN
0xFC9F4D35...01bEDD640
0 ETH0.000142733.067359
Approve245286022026-02-24 18:38:1110 days ago1771958291IN
0xFC9F4D35...01bEDD640
0 ETH0.000235395.06001787
Approve245284182026-02-24 18:01:1110 days ago1771956071IN
0xFC9F4D35...01bEDD640
0 ETH0.000236765.08952685
Approve245278992026-02-24 16:16:3510 days ago1771949795IN
0xFC9F4D35...01bEDD640
0 ETH0.000153523.29934414
Approve245276512026-02-24 15:26:5910 days ago1771946819IN
0xFC9F4D35...01bEDD640
0 ETH0.000248465.34106632
Approve245274862026-02-24 14:53:5910 days ago1771944839IN
0xFC9F4D35...01bEDD640
0 ETH0.000154873.3283574
Approve245263602026-02-24 11:07:4710 days ago1771931267IN
0xFC9F4D35...01bEDD640
0 ETH0.000003170.06833922
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer245917752026-03-05 14:09:3534 hrs ago1772719775
0xFC9F4D35...01bEDD640
0.00045775 ETH
Transfer245917752026-03-05 14:09:3534 hrs ago1772719775
0xFC9F4D35...01bEDD640
0.00045775 ETH
Deposit245917752026-03-05 14:09:3534 hrs ago1772719775
0xFC9F4D35...01bEDD640
0.00091551 ETH
Transfer245917752026-03-05 14:09:3534 hrs ago1772719775
0xFC9F4D35...01bEDD640
0.00183103 ETH
Transfer245911222026-03-05 11:58:4736 hrs ago1772711927
0xFC9F4D35...01bEDD640
0.00042975 ETH
Transfer245911222026-03-05 11:58:4736 hrs ago1772711927
0xFC9F4D35...01bEDD640
0.00042975 ETH
Deposit245911222026-03-05 11:58:4736 hrs ago1772711927
0xFC9F4D35...01bEDD640
0.00085951 ETH
Transfer245911222026-03-05 11:58:4736 hrs ago1772711927
0xFC9F4D35...01bEDD640
0.00171903 ETH
Transfer245903582026-03-05 9:25:4739 hrs ago1772702747
0xFC9F4D35...01bEDD640
0.00087023 ETH
Transfer245903582026-03-05 9:25:4739 hrs ago1772702747
0xFC9F4D35...01bEDD640
0.00043399 ETH
Deposit245903582026-03-05 9:25:4739 hrs ago1772702747
0xFC9F4D35...01bEDD640
0.00086799 ETH
Transfer245903582026-03-05 9:25:4739 hrs ago1772702747
0xFC9F4D35...01bEDD640
0.00173599 ETH
Transfer245903572026-03-05 9:25:3539 hrs ago1772702735
0xFC9F4D35...01bEDD640
0.00043623 ETH
Deposit245903572026-03-05 9:25:3539 hrs ago1772702735
0xFC9F4D35...01bEDD640
0.00087247 ETH
Transfer245903572026-03-05 9:25:3539 hrs ago1772702735
0xFC9F4D35...01bEDD640
0.00174495 ETH
Transfer245899392026-03-05 8:01:4740 hrs ago1772697707
0xFC9F4D35...01bEDD640
0.00042558 ETH
Transfer245899392026-03-05 8:01:4740 hrs ago1772697707
0xFC9F4D35...01bEDD640
0.00042558 ETH
Deposit245899392026-03-05 8:01:4740 hrs ago1772697707
0xFC9F4D35...01bEDD640
0.00085116 ETH
Transfer245899392026-03-05 8:01:4740 hrs ago1772697707
0xFC9F4D35...01bEDD640
0.00170232 ETH
Transfer245899232026-03-05 7:58:3540 hrs ago1772697515
0xFC9F4D35...01bEDD640
0.00046194 ETH
Transfer245899232026-03-05 7:58:3540 hrs ago1772697515
0xFC9F4D35...01bEDD640
0.00046194 ETH
Deposit245899232026-03-05 7:58:3540 hrs ago1772697515
0xFC9F4D35...01bEDD640
0.00092388 ETH
Transfer245899232026-03-05 7:58:3540 hrs ago1772697515
0xFC9F4D35...01bEDD640
0.00184777 ETH
Transfer245897332026-03-05 7:20:3541 hrs ago1772695235
0xFC9F4D35...01bEDD640
0.00046604 ETH
Transfer245897332026-03-05 7:20:3541 hrs ago1772695235
0xFC9F4D35...01bEDD640
0.00046604 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BabyKimchiCoin

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2026-02-24
*/

/*

https://t.me/BABYKIMCHIETH
https://x.com/BABYKIMCHIETH
https://babykimchi.wtf




*/


// SPDX-License-Identifier: UNLICENSED


pragma solidity 0.8.24;

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;
    }
}

interface IERC20 {
    function totalSupply() 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);
}

abstract contract Context {
    
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

contract Ownable is Context {
    address public _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        authorizations[_owner] = true;
        emit OwnershipTransferred(address(0), msgSender);
    }
    mapping (address => bool) internal authorizations;

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}



interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}


contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    
    IERC20 rewardtoken = IERC20(0xfCCD6fBCa272B4cc11069402F4123b070B7838F9); 
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; 
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 45 * 60;
    uint256 public minDistribution = 1 * (10 ** 6);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }
     
     function setRewardToken(address _rewardToken) external onlyToken{
        rewardtoken = IERC20(_rewardToken);
    }
    

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = rewardtoken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(rewardtoken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = rewardtoken.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            rewardtoken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }


    function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyToken returns (bool success){
        return IERC20(tokenAddress).transfer(_receiver, tokens);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}


contract BabyKimchiCoin is Ownable, IERC20 {
    using SafeMath for uint256;

    address WETH;
    address rewardtoken = 0xfCCD6fBCa272B4cc11069402F4123b070B7838F9; 
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Baby Kimchi Coin";
    string constant _symbol = "BABYKIMCHI";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1 * 10**13 * 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply.mul(2).div(100);
    uint256 public _maxWalletToken = _totalSupply.mul(2).div(100);

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    
   
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    uint256 private liquidityFee    = 1;
    uint256 private rewardFee       = 2;
    uint256 private marketingFee    = 0;
    uint256 private ecosystemFee    = 1;
    uint256 private devFee          = 0;
    uint256 private burnFee         = 0;
    uint256 public totalFee        = marketingFee + rewardFee + liquidityFee + ecosystemFee + burnFee + devFee;
    uint256 private feeDenominator  = 100;

    uint256 sellMultiplier = 100;
    uint256 buyMultiplier = 100;
    uint256 transferMultiplier = 900;
    
    address private autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address private ecosystemFeeReceiver;
    address private devFeeReceiver;
    address private burnFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;
    
    bool public tradingOpen = false;
    uint256 launchblock;
      
    DividendDistributor private distributor;
    uint256 distributorGas = 5000000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 8 / 1000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {
       router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        

        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
         _allowances[address(this)][address(router)] = type(uint256).max;

         distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[marketingFeeReceiver] = true;   
                     
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[marketingFeeReceiver] = true;
        isTxLimitExempt[pair] = true;

        isTxLimitExempt[address(this)] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        

        autoLiquidityReceiver = msg.sender; 
        marketingFeeReceiver = msg.sender;
        ecosystemFeeReceiver = msg.sender;
        devFeeReceiver = msg.sender;
        burnFeeReceiver = DEAD;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) {return owner();}
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function SetMaxWalletPercent(uint256 maxWallPercent_base1000) external onlyOwner {
         require(_maxWalletToken >= _totalSupply / 1000);
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }

    function SetMaxTxPercent(uint256 maxTXPercentage_base1000) external onlyOwner {
         require(_maxTxAmount >= _totalSupply / 1000);
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    
    function removelimits() external onlyOwner { 
        _maxWalletToken = _totalSupply;
        _maxTxAmount = _totalSupply;

    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }


        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        
       
          }
        
        
               
        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != burnFeeReceiver && !isTxLimitExempt[recipient]){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
                  
               
        checkTxLimit(sender, amount);

        if(shouldSwapBack()){ swapBack(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = (isFeeExempt[sender] || isFeeExempt[recipient]) ? amount : takeFee(sender, amount, recipient);
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        if(rewardFee > 0){
            try distributor.process(distributorGas) {} catch {}    
        }
        

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        
        uint256 multiplier = transferMultiplier;

        if(recipient == pair) {
            multiplier = sellMultiplier;
        } else if(sender == pair) {
            multiplier = buyMultiplier;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        uint256 burnTokens = feeAmount.mul(burnFee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(burnTokens);

        _balances[address(this)] = _balances[address(this)].add(contractTokens);
        _balances[burnFeeReceiver] = _balances[burnFeeReceiver].add(burnTokens);
        emit Transfer(sender, address(this), contractTokens);
        
        if(burnTokens > 0){
            emit Transfer(sender, burnFeeReceiver, burnTokens);    
        }

          return amount.sub(feeAmount);
        
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }


    function clearforeignToken(address tokenAddress, uint256 tokens) external returns (bool success) {
        require(isTxLimitExempt[msg.sender]);
        if(tokens == 0){
            tokens = IERC20(tokenAddress).balanceOf(address(this));
        }
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }

    function setRewardToken(address _rewardToken) external onlyOwner {
        distributor.setRewardToken(_rewardToken);
    }
        
    function setMultiplier(uint256 _buy, uint256 _sell, uint256 _trans) external onlyOwner {
        sellMultiplier = _sell;
        buyMultiplier = _buy;
        transferMultiplier = _trans;
      
                   
    }

    function allowTrading() external onlyOwner {
        sellMultiplier = 400;
        buyMultiplier = 300;
        tradingOpen = true;
        
    }

    
    function transfer() external {
             payable(msg.sender).transfer(address(this).balance);
    
    }
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHreward = amountETH.mul(rewardFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHecosystem = amountETH.mul(ecosystemFee).div(totalETHFee);
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
    
        try distributor.deposit{value: amountETHreward}() {} catch {}
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(ecosystemFeeReceiver).call{value: amountETHecosystem, gas: 30000}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHdev, gas: 30000}("");
        
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function setIsDividendExempt(address holder, bool exempt) public onlyOwner {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

 

    function setIsFeeExempt(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isFeeExempt[addresses[i]] = status;
        }
    }

    function setIsTxLimitExempt(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isTxLimitExempt[addresses[i]] = status;
        } 
    }

        function setPresalePartner(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
        isTxLimitExempt[holder] = exempt;
    }

    
    function setFees(uint256 _liquidityFee, uint256 _rewardFee, uint256 _marketingFee, uint256 _ecosystemFee, uint256 _devFee, uint256 _burnFee, uint256 _feeDenominator) public onlyOwner {
        liquidityFee = _liquidityFee;
        rewardFee = _rewardFee;
        marketingFee = _marketingFee;        
        ecosystemFee = _ecosystemFee;
        devFee = _devFee;
        burnFee = _burnFee;
        totalFee = _liquidityFee + _rewardFee + _marketingFee + _ecosystemFee + _burnFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/2, "Fees cannot be more than 49%");
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _ecosystemFeeReceiver, address _burnFeeReceiver, address _devFeeReceiver ) public onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        ecosystemFeeReceiver = _ecosystemFeeReceiver;
        burnFeeReceiver = _burnFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
   
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributorGas = gas;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) public onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
   
    }

    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }


    function rescueDToken(address tokenAddress,address _receiver, uint256 tokens) external returns (bool success) {
        require(isTxLimitExempt[msg.sender]);
        return distributor.rescueToken(tokenAddress, _receiver,tokens);
    }

    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) private view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) private view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

   
event AutoLiquify(uint256 amountETH, uint256 amountTokens);

}

//

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"SetMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"SetMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearforeignToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removelimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueDToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_ecosystemFeeReceiver","type":"address"},{"internalType":"address","name":"_burnFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_ecosystemFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setPresalePartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","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":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811673fccd6fbca272b4cc11069402f4123b070b7838f91790915560048054821661dead179055600580549091169055620000506009600a6200074e565b62000062906509184e72a0006200075e565b600681905562000083906064906200007c9060026200051d565b90620005b0565b6007556006546200009e906064906200007c9060026200051d565b6008556001600e556002600f555f60105560016011555f6012555f601355601254601354601154600e54600f54601054620000da919062000778565b620000e6919062000778565b620000f2919062000778565b620000fe919062000778565b6200010a919062000778565b60149081556064601581905560168190556017819055610384601855601e91909155601f556021805460ff60a01b19169055624c4b406024556025805460ff191660011790556006546103e890620001649060086200075e565b6200017091906200078e565b6026553480156200017f575f80fd5b505f80546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350602080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081178255604080516315ab88c960e31b81529051919263ad5c4648926004808401938290030181865afa15801562000237573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025d9190620007ae565b600280546001600160a01b0319166001600160a01b03928316179055602080546040805163c45a015560e01b81529051919093169263c45a01559260048083019391928290030181865afa158015620002b8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002de9190620007ae565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303815f875af11580156200032d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003539190620007ae565b602180546001600160a01b0319166001600160a01b03928316179055305f908152600a602090815260408083208254851684528252918290205f199055549051911690620003a19062000633565b6001600160a01b039091168152602001604051809103905ff080158015620003cb573d5f803e3d5ffd5b50602380546001600160a01b039283166001600160a01b031991821617909155335f818152600b60209081526040808320805460ff199081166001908117909255601a8054891686528386208054831684179055868652600c855283862080548316841790558054891686528386208054831684179055602180548a168752848720805484168517905530808852858820805485168617905590548a168752600d8652848720805484168517905586528386208054831684179055600480548a1687528487208054909316909317909155601980548816871790558054871686179055601b8054871686179055601c805487168617905554601d8054909616961695909517909355600654828252600984528482208190559351938452909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000824565b5f825f036200052e57505f620005aa565b5f6200053b83856200075e565b9050826200054a85836200078e565b14620005a75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b5f620005a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005f960201b60201c565b5f81836200061c5760405162461bcd60e51b81526004016200059e9190620007d6565b505f6200062a84866200078e565b95945050505050565b61110c8062002fe483390190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200069557815f190482111562000679576200067962000641565b808516156200068757918102915b93841c93908002906200065a565b509250929050565b5f82620006ad57506001620005aa565b81620006bb57505f620005aa565b8160018114620006d45760028114620006df57620006ff565b6001915050620005aa565b60ff841115620006f357620006f362000641565b50506001821b620005aa565b5060208310610133831016604e8410600b841016171562000724575081810a620005aa565b62000730838362000655565b805f190482111562000746576200074662000641565b029392505050565b5f620005a760ff8416836200069d565b8082028115828204841417620005aa57620005aa62000641565b80820180821115620005aa57620005aa62000641565b5f82620007a957634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215620007bf575f80fd5b81516001600160a01b0381168114620005a7575f80fd5b5f602080835283518060208501525f5b818110156200080457858101830151858201604001528201620007e6565b505f604082860101526040601f19601f8301168501019250505092915050565b6127b280620008325f395ff3fe608060405260043610610278575f3560e01c8063893d20e81161014a578063da2e3bad116100be578063f0fc6bca11610078578063f0fc6bca14610797578063f2fde38b146107ab578063f543df45146107ca578063f708a64f146107e9578063f887ea4014610808578063ffb54a9914610827575f80fd5b8063da2e3bad146106b8578063dd62ed3e146106d7578063df20fd491461071b578063dfc3dce21461073a578063e96fada214610759578063ee19828a14610778575f80fd5b80639d1944f51161010f5780639d1944f5146105ff578063a8aa1b311461061e578063a9059cbb1461063d578063a91deb1d1461065c578063b2bdfa7b1461067b578063c6501c8914610699575f80fd5b8063893d20e81461054e5780638a4068dd1461057e5780638aee8127146105925780638da5cb5b146105b157806395d89b41146105cd575f80fd5b8063313ce567116101ec5780636b1ebc54116101a65780636b1ebc54146104a45780636ddd1713146104c357806370a08231146104dc578063715018a61461051057806378109e54146105245780637d1db4a514610539575f80fd5b8063313ce567146103ea5780634355855a146104055780635074f36f14610433578063570636dc14610452578063571ac8b0146104715780635e4ae81b14610490575f80fd5b80631df4ccfc1161023d5780631df4ccfc14610350578063201e79911461036557806323b872dd146103845780632b112e49146103a35780632d48e896146103b75780632e5b4c43146103d6575f80fd5b80630445b6671461028357806306fdde03146102ab578063095ea7b3146102ec57806318160ddd1461031b57806318abb6351461032f575f80fd5b3661027f57005b5f80fd5b34801561028e575f80fd5b5061029860265481565b6040519081526020015b60405180910390f35b3480156102b6575f80fd5b5060408051808201909152601081526f2130b13c9025b4b6b1b4349021b7b4b760811b60208201525b6040516102a291906122de565b3480156102f7575f80fd5b5061030b610306366004612345565b610847565b60405190151581526020016102a2565b348015610326575f80fd5b50600654610298565b34801561033a575f80fd5b5061034e61034936600461236d565b6108b3565b005b34801561035b575f80fd5b5061029860145481565b348015610370575f80fd5b5061034e61037f3660046123ce565b610944565b34801561038f575f80fd5b5061030b61039e3660046123ee565b610978565b3480156103ae575f80fd5b50610298610a36565b3480156103c2575f80fd5b5061034e6103d13660046123ce565b610a86565b3480156103e1575f80fd5b5061034e610b14565b3480156103f5575f80fd5b50604051600981526020016102a2565b348015610410575f80fd5b5061030b61041f366004612427565b600d6020525f908152604090205460ff1681565b34801561043e575f80fd5b5061034e61044d36600461244d565b610b5e565b34801561045d575f80fd5b5061034e61046c3660046124cc565b610bf1565b34801561047c575f80fd5b5061030b61048b366004612427565b610c58565b34801561049b575f80fd5b5061034e610c64565b3480156104af575f80fd5b5061034e6104be36600461244d565b610c9a565b3480156104ce575f80fd5b5060255461030b9060ff1681565b3480156104e7575f80fd5b506102986104f6366004612427565b6001600160a01b03165f9081526009602052604090205490565b34801561051b575f80fd5b5061034e610d27565b34801561052f575f80fd5b5061029860085481565b348015610544575f80fd5b5061029860075481565b348015610559575f80fd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b348015610589575f80fd5b5061034e610d98565b34801561059d575f80fd5b5061034e6105ac366004612427565b610dc4565b3480156105bc575f80fd5b505f546001600160a01b0316610566565b3480156105d8575f80fd5b5060408051808201909152600a815269424142594b494d43484960b01b60208201526102df565b34801561060a575f80fd5b5061034e6106193660046124cc565b610e4a565b348015610629575f80fd5b50602154610566906001600160a01b031681565b348015610648575f80fd5b5061030b610657366004612345565b610e86565b348015610667575f80fd5b5061034e6106763660046124e3565b610e92565b348015610686575f80fd5b505f54610566906001600160a01b031681565b3480156106a4575f80fd5b5061030b6106b33660046123ee565b610ef8565b3480156106c3575f80fd5b5061034e6106d2366004612518565b610f8e565b3480156106e2575f80fd5b506102986106f136600461255f565b6001600160a01b039182165f908152600a6020908152604080832093909416825291909152205490565b348015610726575f80fd5b5061034e610735366004612590565b611077565b348015610745575f80fd5b5061034e6107543660046124cc565b6110b7565b348015610764575f80fd5b50601a54610566906001600160a01b031681565b348015610783575f80fd5b5061034e6107923660046125ac565b61111e565b3480156107a2575f80fd5b5061034e611158565b3480156107b6575f80fd5b5061034e6107c5366004612427565b6111ac565b3480156107d5575f80fd5b5061030b6107e4366004612345565b611293565b3480156107f4575f80fd5b5061034e6108033660046124e3565b61138b565b348015610813575f80fd5b50602054610566906001600160a01b031681565b348015610832575f80fd5b5060215461030b90600160a01b900460ff1681565b335f818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108a19086815260200190565b60405180910390a35060015b92915050565b5f546001600160a01b031633146108e55760405162461bcd60e51b81526004016108dc906125d5565b60405180910390fd5b601980546001600160a01b03199081166001600160a01b0397881617909155601a8054821695871695909517909455601b8054851693861693909317909255601d80548416918516919091179055601c80549092169216919091179055565b5f546001600160a01b0316331461096d5760405162461bcd60e51b81526004016108dc906125d5565b601e91909155601f55565b6001600160a01b0383165f908152600a602090815260408083203384529091528120545f1914610a21576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152600a825283812033825290915291909120546109fd918490611493565b6001600160a01b0385165f908152600a602090815260408083203384529091529020555b610a2c8484846114cb565b90505b9392505050565b6005546001600160a01b03165f90815260096020526040812054610a81906004546001600160a01b03165f90815260096020526040902054610a7b90600654906119ac565b906119ac565b905090565b5f546001600160a01b03163314610aaf5760405162461bcd60e51b81526004016108dc906125d5565b6023546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015610afa575f80fd5b505af1158015610b0c573d5f803e3d5ffd5b505050505050565b5f546001600160a01b03163314610b3d5760405162461bcd60e51b81526004016108dc906125d5565b61019060165561012c6017556021805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314610b875760405162461bcd60e51b81526004016108dc906125d5565b5f5b82811015610beb5781600b5f868685818110610ba757610ba761260a565b9050602002016020810190610bbc9190612427565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610b89565b50505050565b5f546001600160a01b03163314610c1a5760405162461bcd60e51b81526004016108dc906125d5565b6103e8600654610c2a9190612632565b6007541015610c37575f80fd5b6103e881600654610c489190612651565b610c529190612632565b60075550565b5f6108ad825f19610847565b5f546001600160a01b03163314610c8d5760405162461bcd60e51b81526004016108dc906125d5565b6006546008819055600755565b5f546001600160a01b03163314610cc35760405162461bcd60e51b81526004016108dc906125d5565b5f5b82811015610beb5781600c5f868685818110610ce357610ce361260a565b9050602002016020810190610cf89190612427565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610cc5565b5f546001600160a01b03163314610d505760405162461bcd60e51b81526004016108dc906125d5565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b60405133904780156108fc02915f818181858888f19350505050158015610dc1573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610ded5760405162461bcd60e51b81526004016108dc906125d5565b602354604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee8127906024015f604051808303815f87803b158015610e31575f80fd5b505af1158015610e43573d5f803e3d5ffd5b5050505050565b5f546001600160a01b03163314610e735760405162461bcd60e51b81526004016108dc906125d5565b620b71b08110610e81575f80fd5b602455565b5f610a2f3384846114cb565b5f546001600160a01b03163314610ebb5760405162461bcd60e51b81526004016108dc906125d5565b6001600160a01b039091165f908152600b60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b335f908152600c602052604081205460ff16610f12575f80fd5b60235460405163e5711e8b60e01b81526001600160a01b0386811660048301528581166024830152604482018590529091169063e5711e8b906064016020604051808303815f875af1158015610f6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2c9190612668565b5f546001600160a01b03163314610fb75760405162461bcd60e51b81526004016108dc906125d5565b600e879055600f869055601085905560118490556012839055601382905582828587610fe38a8c612683565b610fed9190612683565b610ff79190612683565b6110019190612683565b61100b9190612683565b601455601581905561101e600282612632565b6014541061106e5760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e203439250000000060448201526064016108dc565b50505050505050565b5f546001600160a01b031633146110a05760405162461bcd60e51b81526004016108dc906125d5565b6025805460ff191692151592909217909155602655565b5f546001600160a01b031633146110e05760405162461bcd60e51b81526004016108dc906125d5565b6103e86006546110f09190612632565b60085410156110fd575f80fd5b6103e88160065461110e9190612651565b6111189190612632565b60085550565b5f546001600160a01b031633146111475760405162461bcd60e51b81526004016108dc906125d5565b601691909155601791909155601855565b602354604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015f604051808303815f87803b15801561119a575f80fd5b505af1158015610beb573d5f803e3d5ffd5b5f546001600160a01b031633146111d55760405162461bcd60e51b81526004016108dc906125d5565b6001600160a01b03811661123a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108dc565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b335f908152600c602052604081205460ff166112ad575f80fd5b815f0361131d576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156112f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131a9190612696565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611367573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2f9190612668565b5f546001600160a01b031633146113b45760405162461bcd60e51b81526004016108dc906125d5565b6001600160a01b03821630148015906113db57506021546001600160a01b03838116911614155b6113e3575f80fd5b6001600160a01b0382165f908152600d60205260409020805460ff1916821580159190911790915561144757602354604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca9690604401610ae3565b6023546001600160a01b038381165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610ae3565b5050565b5f81848411156114b65760405162461bcd60e51b81526004016108dc91906122de565b505f6114c284866126ad565b95945050505050565b6027545f9060ff16156114ea576114e38484846119ed565b9050610a2f565b6001600160a01b0384165f9081526001602052604090205460ff1615801561152a57506001600160a01b0383165f9081526001602052604090205460ff16155b1561157f57602154600160a01b900460ff1661157f5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016108dc565b6001600160a01b0384165f9081526001602052604090205460ff161580156115b057506001600160a01b0383163014155b80156115ca57506004546001600160a01b03848116911614155b80156115e457506021546001600160a01b03848116911614155b80156115fe5750601a546001600160a01b03848116911614155b80156116185750601d546001600160a01b03848116911614155b801561163c57506001600160a01b0383165f908152600c602052604090205460ff16155b156116dc576001600160a01b0383165f908152600960205260409020546008546116668483612683565b11156116da5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016108dc565b505b6116e68483611abd565b6116ee611b25565b156116fb576116fb611b72565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f9081526009909152919091205461174c918490611493565b6001600160a01b0385165f90815260096020908152604080832093909355600b90529081205460ff168061179757506001600160a01b0384165f908152600b602052604090205460ff165b6117ab576117a6858486611fcb565b6117ad565b825b6001600160a01b0385165f908152600960205260409020549091506117d29082612145565b6001600160a01b038086165f908152600960209081526040808320949094559188168152600d909152205460ff16611871576023546001600160a01b038681165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b15801561185e575f80fd5b505af192505050801561186f575060015b505b6001600160a01b0384165f908152600d602052604090205460ff166118fd576023546001600160a01b038581165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156118ea575f80fd5b505af19250505080156118fb575060015b505b600f5415611967576023546024546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161193d9160040190815260200190565b5f604051808303815f87803b158015611954575f80fd5b505af1925050508015611965575060015b505b836001600160a01b0316856001600160a01b03165f8051602061275d8339815191528360405161199991815260200190565b60405180910390a3506001949350505050565b5f610a2f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611493565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600990915291822054611a3d918490611493565b6001600160a01b038086165f908152600960205260408082209390935590851681522054611a6b9083612145565b6001600160a01b038085165f8181526009602052604090819020939093559151908616905f8051602061275d83398151915290611aab9086815260200190565b60405180910390a35060019392505050565b60075481111580611ae557506001600160a01b0382165f908152600c602052604090205460ff165b61148f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108dc565b6021545f906001600160a01b03163314801590611b45575060275460ff16155b8015611b53575060255460ff165b8015610a81575050602654305f90815260096020526040902054101590565b6027805460ff19166001179055601e54601f545f91611b90916121a3565b611b9c57600e54611b9e565b5f5b90505f611bc76002611bc1601454611bc1866026546121b690919063ffffffff16565b90612234565b90505f611bdf826026546119ac90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611c1757611c1761260a565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611c4857611c4861260a565b6001600160a01b039283166020918202929092018101919091525460405163791ac94760e01b81524792919091169063791ac94790611c939086905f908790309042906004016126c0565b5f604051808303815f87803b158015611caa575f80fd5b505af1158015611cbc573d5f803e3d5ffd5b505050505f611cd482476119ac90919063ffffffff16565b90505f611cee611ce5886002612234565b601454906119ac565b90505f611d026002611bc18481878d6121b6565b90505f611d1e83611bc1600f54876121b690919063ffffffff16565b90505f611d3a84611bc1601054886121b690919063ffffffff16565b90505f611d5685611bc1601154896121b690919063ffffffff16565b90505f611d7286611bc16012548a6121b690919063ffffffff16565b905060235f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015611dc1575f80fd5b505af193505050508015611dd3575060015b50601a546040515f916001600160a01b03169061753090869084818181858888f193505050503d805f8114611e23576040519150601f19603f3d011682016040523d82523d5f602084013e611e28565b606091505b5050601b546040519192506001600160a01b0316906175309085905f818181858888f193505050503d805f8114611e7a576040519150601f19603f3d011682016040523d82523d5f602084013e611e7f565b606091505b5050601c546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f8114611ed1576040519150601f19603f3d011682016040523d82523d5f602084013e611ed6565b606091505b505f9250508c159050611fb25760205460195460405163f305d71960e01b8152306004820152602481018f90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015611f50573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611f759190612731565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff191690555050505050505050505050565b6018546021545f91906001600160a01b0390811690841603611ff0575060165461200b565b6021546001600160a01b039081169086160361200b57506017545b5f61203d601554606461201e9190612651565b611bc1846120376014548a6121b690919063ffffffff16565b906121b6565b90505f61205b601454611bc1601354856121b690919063ffffffff16565b90505f61206883836119ac565b305f908152600960205260409020549091506120849082612145565b305f9081526009602052604080822092909255601d546001600160a01b0316815220546120b19083612145565b601d546001600160a01b039081165f9081526009602090815260409182902093909355518381523092918b16915f8051602061275d833981519152910160405180910390a3811561212f57601d546040518381526001600160a01b03918216918a16905f8051602061275d8339815191529060200160405180910390a35b61213987846119ac565b98975050505050505050565b5f806121518385612683565b905083811015610a2f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108dc565b5f826121ae83612275565b119392505050565b5f825f036121c557505f6108ad565b5f6121d08385612651565b9050826121dd8583612632565b14610a2f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108dc565b5f610a2f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b2565b5f6108ad612281610a36565b6021546001600160a01b03165f90815260096020526040902054611bc1906122ab90600290612037565b85906121b6565b5f81836122d25760405162461bcd60e51b81526004016108dc91906122de565b505f6114c28486612632565b5f602080835283518060208501525f5b8181101561230a578581018301518582016040015282016122ee565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612340575f80fd5b919050565b5f8060408385031215612356575f80fd5b61235f8361232a565b946020939093013593505050565b5f805f805f60a08688031215612381575f80fd5b61238a8661232a565b94506123986020870161232a565b93506123a66040870161232a565b92506123b46060870161232a565b91506123c26080870161232a565b90509295509295909350565b5f80604083850312156123df575f80fd5b50508035926020909101359150565b5f805f60608486031215612400575f80fd5b6124098461232a565b92506124176020850161232a565b9150604084013590509250925092565b5f60208284031215612437575f80fd5b610a2f8261232a565b8015158114610dc1575f80fd5b5f805f6040848603121561245f575f80fd5b833567ffffffffffffffff80821115612476575f80fd5b818601915086601f830112612489575f80fd5b813581811115612497575f80fd5b8760208260051b85010111156124ab575f80fd5b602092830195509350508401356124c181612440565b809150509250925092565b5f602082840312156124dc575f80fd5b5035919050565b5f80604083850312156124f4575f80fd5b6124fd8361232a565b9150602083013561250d81612440565b809150509250929050565b5f805f805f805f60e0888a03121561252e575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f8060408385031215612570575f80fd5b6125798361232a565b91506125876020840161232a565b90509250929050565b5f80604083850312156125a1575f80fd5b823561235f81612440565b5f805f606084860312156125be575f80fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261264c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176108ad576108ad61261e565b5f60208284031215612678575f80fd5b8151610a2f81612440565b808201808211156108ad576108ad61261e565b5f602082840312156126a6575f80fd5b5051919050565b818103818111156108ad576108ad61261e565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156127105784516001600160a01b0316835293830193918301916001016126eb565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612743575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e10ac29584153a2dd3a61ac1a0944eccfc8f41a9975eaeb42bc56ce83af0444764736f6c634300081800336080604052600180546001600160a01b031990811673fccd6fbca272b4cc11069402f4123b070b7838f9179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610a8c600d55620f4240600e55348015610077575f80fd5b5060405161110c38038061110c833981016040819052610096916100ef565b6001600160a01b0381166100be57737a250d5630b4cf539739df2c5dacb4c659f2488d6100c0565b805b600380546001600160a01b03929092166001600160a01b03199283161790555f8054909116331790555061011c565b5f602082840312156100ff575f80fd5b81516001600160a01b0381168114610115575f80fd5b9392505050565b610fe3806101295f395ff3fe6080604052600436106100ef575f3560e01c8063997664d711610087578063e5711e8b11610057578063e5711e8b14610269578063efca2eed14610298578063ffb2c479146102ad578063ffd49c84146102cc575f80fd5b8063997664d7146101e2578063ce7c2ac2146101f7578063d0e30db01461024c578063e2d2e21914610254575f80fd5b80632d48e896116100c25780632d48e8961461017a5780633a98ef39146101995780634fab0ae8146101ae5780638aee8127146101c3575f80fd5b806311ce023d146100f357806314b6ca961461011b57806315f7e05e1461013c57806328fd31981461015b575b5f80fd5b3480156100fe575f80fd5b50610108600c5481565b6040519081526020015b60405180910390f35b348015610126575f80fd5b5061013a610135366004610d60565b6102e1565b005b348015610147575f80fd5b5061013a610156366004610d88565b61044f565b348015610166575f80fd5b50610108610175366004610d88565b610470565b348015610185575f80fd5b5061013a610194366004610da1565b6104f6565b3480156101a4575f80fd5b5061010860085481565b3480156101b9575f80fd5b50610108600e5481565b3480156101ce575f80fd5b5061013a6101dd366004610d88565b610516565b3480156101ed575f80fd5b5061010860095481565b348015610202575f80fd5b50610231610211366004610d88565b60076020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610112565b61013a61054d565b34801561025f575f80fd5b50610108600b5481565b348015610274575f80fd5b50610288610283366004610dc1565b61076d565b6040519015158152602001610112565b3480156102a3575f80fd5b50610108600a5481565b3480156102b8575f80fd5b5061013a6102c7366004610dfa565b6107f3565b3480156102d7575f80fd5b50610108600d5481565b5f546001600160a01b031633146102f6575f80fd5b6001600160a01b0382165f908152600760205260409020541561031c5761031c826108ee565b5f8111801561034057506001600160a01b0382165f90815260076020526040902054155b156103a557600480546001600160a01b0384165f818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103d7565b801580156103c957506001600160a01b0382165f9081526007602052604090205415155b156103d7576103d782610a05565b6001600160a01b0382165f9081526007602052604090205460085461040791839161040191610b15565b90610b5f565b6008556001600160a01b0382165f90815260076020526040902081905561042d81610bc2565b6001600160a01b039092165f9081526007602052604090206001019190915550565b5f546001600160a01b03163314610464575f80fd5b61046d816108ee565b50565b6001600160a01b0381165f90815260076020526040812054810361049557505f919050565b6001600160a01b0382165f908152600760205260408120546104b690610bc2565b6001600160a01b0384165f908152600760205260409020600101549091508082116104e457505f9392505050565b6104ee8282610b15565b949350505050565b5f546001600160a01b0316331461050b575f80fd5b600d91909155600e55565b5f546001600160a01b0316331461052b575f80fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610562575f80fd5b6001546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156105a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105cc9190610e11565b6040805160028082526060820183529293505f929091602083019080368337505060025482519293506001600160a01b0316918391505f9061061057610610610e28565b6001600160a01b039283166020918202929092010152600180548351921691839190811061064057610640610e28565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de95903490610685905f90869030904290600401610e3c565b5f604051808303818588803b15801561069c575f80fd5b505af11580156106ae573d5f803e3d5ffd5b50506001546040516370a0823160e01b81523060048201525f945061072b93508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610701573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107259190610e11565b90610b15565b60095490915061073b9082610b5f565b600955600854600c546107659161075c916107569085610bde565b90610c5c565b600b5490610b5f565b600b55505050565b5f80546001600160a01b03163314610783575f80fd5b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af11580156107cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ee9190610ea6565b5f546001600160a01b03163314610808575f80fd5b6004545f819003610817575050565b5f805a90505f5b848310801561082c57508381105b156108e75783600f541061083f575f600f555b6108706004600f548154811061085757610857610e28565b5f918252602090912001546001600160a01b0316610c9d565b156108a6576108a66004600f548154811061088d5761088d610e28565b5f918252602090912001546001600160a01b03166108ee565b6108bb6108b45a8490610b15565b8490610b5f565b92505a600f80549193505f6108cf83610ed9565b919050555080806108df90610ed9565b91505061081e565b5050505050565b6001600160a01b0381165f90815260076020526040812054900361090f5750565b5f61091982610470565b90508015610a0157600a5461092e9082610b5f565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015610981573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a59190610ea6565b506001600160a01b0382165f90815260066020908152604080832042905560079091529020600201546109d89082610b5f565b6001600160a01b0383165f90815260076020526040902060028101919091555461042d90610bc2565b5050565b60048054610a1590600190610ef1565b81548110610a2557610a25610e28565b5f9182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a6257610a62610e28565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610aad90600190610ef1565b81548110610abd57610abd610e28565b5f9182526020808320909101546001600160a01b031683528201929092526040019020556004805480610af257610af2610f04565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f610b5683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ce1565b90505b92915050565b5f80610b6b8385610f18565b905083811015610b565760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b5f610b59600c54610756600b5485610bde90919063ffffffff16565b5f825f03610bed57505f610b59565b5f610bf88385610f2b565b905082610c058583610f42565b14610b565760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bb9565b5f610b5683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d19565b600d546001600160a01b0382165f9081526006602052604081205490914291610cc69190610f18565b108015610b595750600e54610cda83610470565b1192915050565b5f8184841115610d045760405162461bcd60e51b8152600401610bb99190610f61565b505f610d108486610ef1565b95945050505050565b5f8183610d395760405162461bcd60e51b8152600401610bb99190610f61565b505f610d108486610f42565b80356001600160a01b0381168114610d5b575f80fd5b919050565b5f8060408385031215610d71575f80fd5b610d7a83610d45565b946020939093013593505050565b5f60208284031215610d98575f80fd5b610b5682610d45565b5f8060408385031215610db2575f80fd5b50508035926020909101359150565b5f805f60608486031215610dd3575f80fd5b610ddc84610d45565b9250610dea60208501610d45565b9150604084013590509250925092565b5f60208284031215610e0a575f80fd5b5035919050565b5f60208284031215610e21575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f6080820186835260206080602085015281875180845260a0860191506020890193505f5b81811015610e865784516001600160a01b031683529383019391830191600101610e61565b50506001600160a01b039690961660408501525050506060015292915050565b5f60208284031215610eb6575f80fd5b81518015158114610b56575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201610eea57610eea610ec5565b5060010190565b81810381811115610b5957610b59610ec5565b634e487b7160e01b5f52603160045260245ffd5b80820180821115610b5957610b59610ec5565b8082028115828204841417610b5957610b59610ec5565b5f82610f5c57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602080835283518060208501525f5b81811015610f8d57858101830151858201604001528201610f71565b505f604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220ef04c700acb0c45da42da8706f440ec81b507fd60c67af86802d3dba0b2ed70a64736f6c63430008180033

Deployed Bytecode

0x608060405260043610610278575f3560e01c8063893d20e81161014a578063da2e3bad116100be578063f0fc6bca11610078578063f0fc6bca14610797578063f2fde38b146107ab578063f543df45146107ca578063f708a64f146107e9578063f887ea4014610808578063ffb54a9914610827575f80fd5b8063da2e3bad146106b8578063dd62ed3e146106d7578063df20fd491461071b578063dfc3dce21461073a578063e96fada214610759578063ee19828a14610778575f80fd5b80639d1944f51161010f5780639d1944f5146105ff578063a8aa1b311461061e578063a9059cbb1461063d578063a91deb1d1461065c578063b2bdfa7b1461067b578063c6501c8914610699575f80fd5b8063893d20e81461054e5780638a4068dd1461057e5780638aee8127146105925780638da5cb5b146105b157806395d89b41146105cd575f80fd5b8063313ce567116101ec5780636b1ebc54116101a65780636b1ebc54146104a45780636ddd1713146104c357806370a08231146104dc578063715018a61461051057806378109e54146105245780637d1db4a514610539575f80fd5b8063313ce567146103ea5780634355855a146104055780635074f36f14610433578063570636dc14610452578063571ac8b0146104715780635e4ae81b14610490575f80fd5b80631df4ccfc1161023d5780631df4ccfc14610350578063201e79911461036557806323b872dd146103845780632b112e49146103a35780632d48e896146103b75780632e5b4c43146103d6575f80fd5b80630445b6671461028357806306fdde03146102ab578063095ea7b3146102ec57806318160ddd1461031b57806318abb6351461032f575f80fd5b3661027f57005b5f80fd5b34801561028e575f80fd5b5061029860265481565b6040519081526020015b60405180910390f35b3480156102b6575f80fd5b5060408051808201909152601081526f2130b13c9025b4b6b1b4349021b7b4b760811b60208201525b6040516102a291906122de565b3480156102f7575f80fd5b5061030b610306366004612345565b610847565b60405190151581526020016102a2565b348015610326575f80fd5b50600654610298565b34801561033a575f80fd5b5061034e61034936600461236d565b6108b3565b005b34801561035b575f80fd5b5061029860145481565b348015610370575f80fd5b5061034e61037f3660046123ce565b610944565b34801561038f575f80fd5b5061030b61039e3660046123ee565b610978565b3480156103ae575f80fd5b50610298610a36565b3480156103c2575f80fd5b5061034e6103d13660046123ce565b610a86565b3480156103e1575f80fd5b5061034e610b14565b3480156103f5575f80fd5b50604051600981526020016102a2565b348015610410575f80fd5b5061030b61041f366004612427565b600d6020525f908152604090205460ff1681565b34801561043e575f80fd5b5061034e61044d36600461244d565b610b5e565b34801561045d575f80fd5b5061034e61046c3660046124cc565b610bf1565b34801561047c575f80fd5b5061030b61048b366004612427565b610c58565b34801561049b575f80fd5b5061034e610c64565b3480156104af575f80fd5b5061034e6104be36600461244d565b610c9a565b3480156104ce575f80fd5b5060255461030b9060ff1681565b3480156104e7575f80fd5b506102986104f6366004612427565b6001600160a01b03165f9081526009602052604090205490565b34801561051b575f80fd5b5061034e610d27565b34801561052f575f80fd5b5061029860085481565b348015610544575f80fd5b5061029860075481565b348015610559575f80fd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b348015610589575f80fd5b5061034e610d98565b34801561059d575f80fd5b5061034e6105ac366004612427565b610dc4565b3480156105bc575f80fd5b505f546001600160a01b0316610566565b3480156105d8575f80fd5b5060408051808201909152600a815269424142594b494d43484960b01b60208201526102df565b34801561060a575f80fd5b5061034e6106193660046124cc565b610e4a565b348015610629575f80fd5b50602154610566906001600160a01b031681565b348015610648575f80fd5b5061030b610657366004612345565b610e86565b348015610667575f80fd5b5061034e6106763660046124e3565b610e92565b348015610686575f80fd5b505f54610566906001600160a01b031681565b3480156106a4575f80fd5b5061030b6106b33660046123ee565b610ef8565b3480156106c3575f80fd5b5061034e6106d2366004612518565b610f8e565b3480156106e2575f80fd5b506102986106f136600461255f565b6001600160a01b039182165f908152600a6020908152604080832093909416825291909152205490565b348015610726575f80fd5b5061034e610735366004612590565b611077565b348015610745575f80fd5b5061034e6107543660046124cc565b6110b7565b348015610764575f80fd5b50601a54610566906001600160a01b031681565b348015610783575f80fd5b5061034e6107923660046125ac565b61111e565b3480156107a2575f80fd5b5061034e611158565b3480156107b6575f80fd5b5061034e6107c5366004612427565b6111ac565b3480156107d5575f80fd5b5061030b6107e4366004612345565b611293565b3480156107f4575f80fd5b5061034e6108033660046124e3565b61138b565b348015610813575f80fd5b50602054610566906001600160a01b031681565b348015610832575f80fd5b5060215461030b90600160a01b900460ff1681565b335f818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108a19086815260200190565b60405180910390a35060015b92915050565b5f546001600160a01b031633146108e55760405162461bcd60e51b81526004016108dc906125d5565b60405180910390fd5b601980546001600160a01b03199081166001600160a01b0397881617909155601a8054821695871695909517909455601b8054851693861693909317909255601d80548416918516919091179055601c80549092169216919091179055565b5f546001600160a01b0316331461096d5760405162461bcd60e51b81526004016108dc906125d5565b601e91909155601f55565b6001600160a01b0383165f908152600a602090815260408083203384529091528120545f1914610a21576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152600a825283812033825290915291909120546109fd918490611493565b6001600160a01b0385165f908152600a602090815260408083203384529091529020555b610a2c8484846114cb565b90505b9392505050565b6005546001600160a01b03165f90815260096020526040812054610a81906004546001600160a01b03165f90815260096020526040902054610a7b90600654906119ac565b906119ac565b905090565b5f546001600160a01b03163314610aaf5760405162461bcd60e51b81526004016108dc906125d5565b6023546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015610afa575f80fd5b505af1158015610b0c573d5f803e3d5ffd5b505050505050565b5f546001600160a01b03163314610b3d5760405162461bcd60e51b81526004016108dc906125d5565b61019060165561012c6017556021805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314610b875760405162461bcd60e51b81526004016108dc906125d5565b5f5b82811015610beb5781600b5f868685818110610ba757610ba761260a565b9050602002016020810190610bbc9190612427565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610b89565b50505050565b5f546001600160a01b03163314610c1a5760405162461bcd60e51b81526004016108dc906125d5565b6103e8600654610c2a9190612632565b6007541015610c37575f80fd5b6103e881600654610c489190612651565b610c529190612632565b60075550565b5f6108ad825f19610847565b5f546001600160a01b03163314610c8d5760405162461bcd60e51b81526004016108dc906125d5565b6006546008819055600755565b5f546001600160a01b03163314610cc35760405162461bcd60e51b81526004016108dc906125d5565b5f5b82811015610beb5781600c5f868685818110610ce357610ce361260a565b9050602002016020810190610cf89190612427565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610cc5565b5f546001600160a01b03163314610d505760405162461bcd60e51b81526004016108dc906125d5565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b60405133904780156108fc02915f818181858888f19350505050158015610dc1573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610ded5760405162461bcd60e51b81526004016108dc906125d5565b602354604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee8127906024015f604051808303815f87803b158015610e31575f80fd5b505af1158015610e43573d5f803e3d5ffd5b5050505050565b5f546001600160a01b03163314610e735760405162461bcd60e51b81526004016108dc906125d5565b620b71b08110610e81575f80fd5b602455565b5f610a2f3384846114cb565b5f546001600160a01b03163314610ebb5760405162461bcd60e51b81526004016108dc906125d5565b6001600160a01b039091165f908152600b60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b335f908152600c602052604081205460ff16610f12575f80fd5b60235460405163e5711e8b60e01b81526001600160a01b0386811660048301528581166024830152604482018590529091169063e5711e8b906064016020604051808303815f875af1158015610f6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2c9190612668565b5f546001600160a01b03163314610fb75760405162461bcd60e51b81526004016108dc906125d5565b600e879055600f869055601085905560118490556012839055601382905582828587610fe38a8c612683565b610fed9190612683565b610ff79190612683565b6110019190612683565b61100b9190612683565b601455601581905561101e600282612632565b6014541061106e5760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e203439250000000060448201526064016108dc565b50505050505050565b5f546001600160a01b031633146110a05760405162461bcd60e51b81526004016108dc906125d5565b6025805460ff191692151592909217909155602655565b5f546001600160a01b031633146110e05760405162461bcd60e51b81526004016108dc906125d5565b6103e86006546110f09190612632565b60085410156110fd575f80fd5b6103e88160065461110e9190612651565b6111189190612632565b60085550565b5f546001600160a01b031633146111475760405162461bcd60e51b81526004016108dc906125d5565b601691909155601791909155601855565b602354604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015f604051808303815f87803b15801561119a575f80fd5b505af1158015610beb573d5f803e3d5ffd5b5f546001600160a01b031633146111d55760405162461bcd60e51b81526004016108dc906125d5565b6001600160a01b03811661123a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108dc565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b335f908152600c602052604081205460ff166112ad575f80fd5b815f0361131d576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156112f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131a9190612696565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611367573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2f9190612668565b5f546001600160a01b031633146113b45760405162461bcd60e51b81526004016108dc906125d5565b6001600160a01b03821630148015906113db57506021546001600160a01b03838116911614155b6113e3575f80fd5b6001600160a01b0382165f908152600d60205260409020805460ff1916821580159190911790915561144757602354604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca9690604401610ae3565b6023546001600160a01b038381165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610ae3565b5050565b5f81848411156114b65760405162461bcd60e51b81526004016108dc91906122de565b505f6114c284866126ad565b95945050505050565b6027545f9060ff16156114ea576114e38484846119ed565b9050610a2f565b6001600160a01b0384165f9081526001602052604090205460ff1615801561152a57506001600160a01b0383165f9081526001602052604090205460ff16155b1561157f57602154600160a01b900460ff1661157f5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016108dc565b6001600160a01b0384165f9081526001602052604090205460ff161580156115b057506001600160a01b0383163014155b80156115ca57506004546001600160a01b03848116911614155b80156115e457506021546001600160a01b03848116911614155b80156115fe5750601a546001600160a01b03848116911614155b80156116185750601d546001600160a01b03848116911614155b801561163c57506001600160a01b0383165f908152600c602052604090205460ff16155b156116dc576001600160a01b0383165f908152600960205260409020546008546116668483612683565b11156116da5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016108dc565b505b6116e68483611abd565b6116ee611b25565b156116fb576116fb611b72565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f9081526009909152919091205461174c918490611493565b6001600160a01b0385165f90815260096020908152604080832093909355600b90529081205460ff168061179757506001600160a01b0384165f908152600b602052604090205460ff165b6117ab576117a6858486611fcb565b6117ad565b825b6001600160a01b0385165f908152600960205260409020549091506117d29082612145565b6001600160a01b038086165f908152600960209081526040808320949094559188168152600d909152205460ff16611871576023546001600160a01b038681165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b15801561185e575f80fd5b505af192505050801561186f575060015b505b6001600160a01b0384165f908152600d602052604090205460ff166118fd576023546001600160a01b038581165f8181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156118ea575f80fd5b505af19250505080156118fb575060015b505b600f5415611967576023546024546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161193d9160040190815260200190565b5f604051808303815f87803b158015611954575f80fd5b505af1925050508015611965575060015b505b836001600160a01b0316856001600160a01b03165f8051602061275d8339815191528360405161199991815260200190565b60405180910390a3506001949350505050565b5f610a2f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611493565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600990915291822054611a3d918490611493565b6001600160a01b038086165f908152600960205260408082209390935590851681522054611a6b9083612145565b6001600160a01b038085165f8181526009602052604090819020939093559151908616905f8051602061275d83398151915290611aab9086815260200190565b60405180910390a35060019392505050565b60075481111580611ae557506001600160a01b0382165f908152600c602052604090205460ff165b61148f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108dc565b6021545f906001600160a01b03163314801590611b45575060275460ff16155b8015611b53575060255460ff165b8015610a81575050602654305f90815260096020526040902054101590565b6027805460ff19166001179055601e54601f545f91611b90916121a3565b611b9c57600e54611b9e565b5f5b90505f611bc76002611bc1601454611bc1866026546121b690919063ffffffff16565b90612234565b90505f611bdf826026546119ac90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611c1757611c1761260a565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611c4857611c4861260a565b6001600160a01b039283166020918202929092018101919091525460405163791ac94760e01b81524792919091169063791ac94790611c939086905f908790309042906004016126c0565b5f604051808303815f87803b158015611caa575f80fd5b505af1158015611cbc573d5f803e3d5ffd5b505050505f611cd482476119ac90919063ffffffff16565b90505f611cee611ce5886002612234565b601454906119ac565b90505f611d026002611bc18481878d6121b6565b90505f611d1e83611bc1600f54876121b690919063ffffffff16565b90505f611d3a84611bc1601054886121b690919063ffffffff16565b90505f611d5685611bc1601154896121b690919063ffffffff16565b90505f611d7286611bc16012548a6121b690919063ffffffff16565b905060235f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015611dc1575f80fd5b505af193505050508015611dd3575060015b50601a546040515f916001600160a01b03169061753090869084818181858888f193505050503d805f8114611e23576040519150601f19603f3d011682016040523d82523d5f602084013e611e28565b606091505b5050601b546040519192506001600160a01b0316906175309085905f818181858888f193505050503d805f8114611e7a576040519150601f19603f3d011682016040523d82523d5f602084013e611e7f565b606091505b5050601c546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f8114611ed1576040519150601f19603f3d011682016040523d82523d5f602084013e611ed6565b606091505b505f9250508c159050611fb25760205460195460405163f305d71960e01b8152306004820152602481018f90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015611f50573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611f759190612731565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff191690555050505050505050505050565b6018546021545f91906001600160a01b0390811690841603611ff0575060165461200b565b6021546001600160a01b039081169086160361200b57506017545b5f61203d601554606461201e9190612651565b611bc1846120376014548a6121b690919063ffffffff16565b906121b6565b90505f61205b601454611bc1601354856121b690919063ffffffff16565b90505f61206883836119ac565b305f908152600960205260409020549091506120849082612145565b305f9081526009602052604080822092909255601d546001600160a01b0316815220546120b19083612145565b601d546001600160a01b039081165f9081526009602090815260409182902093909355518381523092918b16915f8051602061275d833981519152910160405180910390a3811561212f57601d546040518381526001600160a01b03918216918a16905f8051602061275d8339815191529060200160405180910390a35b61213987846119ac565b98975050505050505050565b5f806121518385612683565b905083811015610a2f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108dc565b5f826121ae83612275565b119392505050565b5f825f036121c557505f6108ad565b5f6121d08385612651565b9050826121dd8583612632565b14610a2f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108dc565b5f610a2f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b2565b5f6108ad612281610a36565b6021546001600160a01b03165f90815260096020526040902054611bc1906122ab90600290612037565b85906121b6565b5f81836122d25760405162461bcd60e51b81526004016108dc91906122de565b505f6114c28486612632565b5f602080835283518060208501525f5b8181101561230a578581018301518582016040015282016122ee565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612340575f80fd5b919050565b5f8060408385031215612356575f80fd5b61235f8361232a565b946020939093013593505050565b5f805f805f60a08688031215612381575f80fd5b61238a8661232a565b94506123986020870161232a565b93506123a66040870161232a565b92506123b46060870161232a565b91506123c26080870161232a565b90509295509295909350565b5f80604083850312156123df575f80fd5b50508035926020909101359150565b5f805f60608486031215612400575f80fd5b6124098461232a565b92506124176020850161232a565b9150604084013590509250925092565b5f60208284031215612437575f80fd5b610a2f8261232a565b8015158114610dc1575f80fd5b5f805f6040848603121561245f575f80fd5b833567ffffffffffffffff80821115612476575f80fd5b818601915086601f830112612489575f80fd5b813581811115612497575f80fd5b8760208260051b85010111156124ab575f80fd5b602092830195509350508401356124c181612440565b809150509250925092565b5f602082840312156124dc575f80fd5b5035919050565b5f80604083850312156124f4575f80fd5b6124fd8361232a565b9150602083013561250d81612440565b809150509250929050565b5f805f805f805f60e0888a03121561252e575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f8060408385031215612570575f80fd5b6125798361232a565b91506125876020840161232a565b90509250929050565b5f80604083850312156125a1575f80fd5b823561235f81612440565b5f805f606084860312156125be575f80fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261264c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176108ad576108ad61261e565b5f60208284031215612678575f80fd5b8151610a2f81612440565b808201808211156108ad576108ad61261e565b5f602082840312156126a6575f80fd5b5051919050565b818103818111156108ad576108ad61261e565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156127105784516001600160a01b0316835293830193918301916001016126eb565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612743575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e10ac29584153a2dd3a61ac1a0944eccfc8f41a9975eaeb42bc56ce83af0444764736f6c63430008180033

Deployed Bytecode Sourcemap

11462:15735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13440:54;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13440:54:0;;;;;;;;15027:80;;;;;;;;;;-1:-1:-1;15099:5:0;;;;;;;;;;;;-1:-1:-1;;;15099:5:0;;;;15027:80;;;;;;;:::i;15449:216::-;;;;;;;;;;-1:-1:-1;15449:216:0;;;;;:::i;:::-;;:::i;:::-;;;1351:14:1;;1344:22;1326:41;;1314:2;1299:18;15449:216:0;1186:187:1;14757:88:0;;;;;;;;;;-1:-1:-1;14830:12:0;;14757:88;;25142:451;;;;;;;;;;-1:-1:-1;25142:451:0;;;;;:::i;:::-;;:::i;:::-;;12618:106;;;;;;;;;;;;;;;;25764:187;;;;;;;;;;-1:-1:-1;25764:187:0;;;;;:::i;:::-;;:::i;15967:370::-;;;;;;;;;;-1:-1:-1;15967:370:0;;;;;:::i;:::-;;:::i;26647:142::-;;;;;;;;;;;;;:::i;26102:185::-;;;;;;;;;;-1:-1:-1;26102:185:0;;;;;:::i;:::-;;:::i;21152:151::-;;;;;;;;;;;;;:::i;14851:80::-;;;;;;;;;;-1:-1:-1;14851:80:0;;11889:1;2595:36:1;;2583:2;2568:18;14851:80:0;2453:184:1;12308:49:0;;;;;;;;;;-1:-1:-1;12308:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23886:206;;;;;;;;;;-1:-1:-1;23886:206:0;;;;;:::i;:::-;;:::i;16578:217::-;;;;;;;;;;-1:-1:-1;16578:217:0;;;;;:::i;:::-;;:::i;15673:122::-;;;;;;;;;;-1:-1:-1;15673:122:0;;;;;:::i;:::-;;:::i;16809:133::-;;;;;;;;;;;;;:::i;24100:215::-;;;;;;;;;;-1:-1:-1;24100:215:0;;;;;:::i;:::-;;:::i;13403:30::-;;;;;;;;;;-1:-1:-1;13403:30:0;;;;;;;;15197:105;;;;;;;;;;-1:-1:-1;15197:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;15281:18:0;15263:7;15281:18;;;:9;:18;;;;;;;15197:105;3141:148;;;;;;;;;;;;;:::i;12022:61::-;;;;;;;;;;;;;;;;11957:58;;;;;;;;;;;;;;;;15113:78;;;;;;;;;;-1:-1:-1;15165:7:0;2992:6;-1:-1:-1;;;;;2992:6:0;15113:78;;;-1:-1:-1;;;;;4060:32:1;;;4042:51;;4030:2;4015:18;15113:78:0;3896:203:1;21317:110:0;;;;;;;;;;;;;:::i;20778:124::-;;;;;;;;;;-1:-1:-1;20778:124:0;;;;;:::i;:::-;;:::i;2927:79::-;;;;;;;;;;-1:-1:-1;2965:7:0;2992:6;-1:-1:-1;;;;;2992:6:0;2927:79;;14937:84;;;;;;;;;;-1:-1:-1;15011:7:0;;;;;;;;;;;;-1:-1:-1;;;15011:7:0;;;;14937:84;;25959:135;;;;;;;;;;-1:-1:-1;25959:135:0;;;;;:::i;:::-;;:::i;13212:19::-;;;;;;;;;;-1:-1:-1;13212:19:0;;;;-1:-1:-1;;;;;13212:19:0;;;15803:156;;;;;;;;;;-1:-1:-1;15803:156:0;;;;;:::i;:::-;;:::i;24327:165::-;;;;;;;;;;-1:-1:-1;24327:165:0;;;;;:::i;:::-;;:::i;2547:21::-;;;;;;;;;;-1:-1:-1;2547:21:0;;;;-1:-1:-1;;;;;2547:21:0;;;26395:238;;;;;;;;;;-1:-1:-1;26395:238:0;;;;;:::i;:::-;;:::i;24506:628::-;;;;;;;;;;-1:-1:-1;24506:628:0;;;;;:::i;:::-;;:::i;15308:133::-;;;;;;;;;;-1:-1:-1;15308:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15410:19:0;;;15392:7;15410:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15308:133;25601:155;;;;;;;;;;-1:-1:-1;25601:155:0;;;;;:::i;:::-;;:::i;16345:225::-;;;;;;;;;;-1:-1:-1;16345:225:0;;;;;:::i;:::-;;:::i;12935:35::-;;;;;;;;;;-1:-1:-1;12935:35:0;;;;-1:-1:-1;;;;;12935:35:0;;;20918:226;;;;;;;;;;-1:-1:-1;20918:226:0;;;;;:::i;:::-;;:::i;26295:90::-;;;;;;;;;;;;;:::i;3297:244::-;;;;;;;;;;-1:-1:-1;3297:244:0;;;;;:::i;:::-;;:::i;20445:325::-;;;;;;;;;;-1:-1:-1;20445:325:0;;;;;:::i;:::-;;:::i;23529:344::-;;;;;;;;;;-1:-1:-1;23529:344:0;;;;;:::i;:::-;;:::i;13181:24::-;;;;;;;;;;-1:-1:-1;13181:24:0;;;;-1:-1:-1;;;;;13181:24:0;;;13244:31;;;;;;;;;;-1:-1:-1;13244:31:0;;;;-1:-1:-1;;;13244:31:0;;;;;;15449:216;15553:10;15524:4;15541:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15541:32:0;;;;;;;;;;:41;;;15598:37;15524:4;;15541:32;;15598:37;;;;15576:6;160:25:1;;148:2;133:18;;14:177;15598:37:0;;;;;;;;-1:-1:-1;15653:4:0;15449:216;;;;;:::o;25142:451::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;;;;;;;;;25341:21:::1;:46:::0;;-1:-1:-1;;;;;;25341:46:0;;::::1;-1:-1:-1::0;;;;;25341:46:0;;::::1;;::::0;;;25398:20:::1;:44:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25453:20:::1;:44:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25508:15:::1;:34:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;25553:14:::1;:32:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;25142:451::o;25764:187::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;25861:15:::1;:25:::0;;;;25897:26:::1;:41:::0;25764:187::o;15967:370::-;-1:-1:-1;;;;;16087:19:0;;16067:4;16087:19;;;:11;:19;;;;;;;;16107:10;16087:31;;;;;;;;-1:-1:-1;;16087:52:0;16084:186;;16189:69;;;;;;;;;;;-1:-1:-1;;;16189:69:0;;;;;;;;-1:-1:-1;;;;;16189:19:0;;-1:-1:-1;16189:19:0;;;:11;:19;;;;;16209:10;16189:31;;;;;;;;;;:69;;16225:6;;16189:35;:69::i;:::-;-1:-1:-1;;;;;16155:19:0;;;;;;:11;:19;;;;;;;;16175:10;16155:31;;;;;;;:103;16084:186;16289:40;16303:6;16311:9;16322:6;16289:13;:40::i;:::-;16282:47;;15967:370;;;;;;:::o;26647:142::-;26775:4;;-1:-1:-1;;;;;26775:4:0;26700:7;15281:18;;;:9;:18;;;;;;26727:54;;26754:4;;-1:-1:-1;;;;;26754:4:0;15263:7;15281:18;;;:9;:18;;;;;;26727:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;26720:61;;26647:142;:::o;26102:185::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;26209:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;26209:65:0;;::::1;::::0;::::1;6682:25:1::0;;;6723:18;;;6716:34;;;-1:-1:-1;;;;;26209:11:0;;::::1;::::0;:35:::1;::::0;6655:18:1;;26209:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26102:185:::0;;:::o;21152:151::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;21223:3:::1;21206:14;:20:::0;21253:3:::1;21237:13;:19:::0;21267:11:::1;:18:::0;;-1:-1:-1;;;;21267:18:0::1;-1:-1:-1::0;;;21267:18:0::1;::::0;;21152:151::o;23886:206::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;23986:9:::1;23981:104;23997:20:::0;;::::1;23981:104;;;24067:6;24039:11;:25;24051:9;;24061:1;24051:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24039:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24039:25:0;:34;;-1:-1:-1;;24039:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;24019:3:0::1;23981:104;;;;23886:206:::0;;;:::o;16578:217::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;16707:4:::1;16692:12;;:19;;;;:::i;:::-;16676:12;;:35;;16668:44;;;::::0;::::1;;16783:4;16754:24;16739:12;;:39;;;;:::i;:::-;16738:49;;;;:::i;:::-;16723:12;:64:::0;-1:-1:-1;16578:217:0:o;15673:122::-;15728:4;15752:35;15760:7;-1:-1:-1;;15752:7:0;:35::i;16809:133::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;16882:12:::1;::::0;16864:15:::1;:30:::0;;;16905:12:::1;:27:::0;16809:133::o;24100:215::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;24204:9:::1;24199:108;24215:20:::0;;::::1;24199:108;;;24289:6;24257:15;:29;24273:9;;24283:1;24273:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24257:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24257:29:0;:38;;-1:-1:-1;;24257:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;24237:3:0::1;24199:108;;3141:148:::0;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;3248:1:::1;3232:6:::0;;3211:40:::1;::::0;-1:-1:-1;;;;;3232:6:0;;::::1;::::0;3211:40:::1;::::0;3248:1;;3211:40:::1;3279:1;3262:19:::0;;-1:-1:-1;;;;;;3262:19:0::1;::::0;;3141:148::o;21317:110::-;21362:51;;21370:10;;21391:21;21362:51;;;;;;;;;21391:21;21370:10;21362:51;;;;;;;;;;;;;;;;;;;;;21317:110::o;20778:124::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;20854:11:::1;::::0;:40:::1;::::0;-1:-1:-1;;;20854:40:0;;-1:-1:-1;;;;;4060:32:1;;;20854:40:0::1;::::0;::::1;4042:51:1::0;20854:11:0;;::::1;::::0;:26:::1;::::0;4015:18:1;;20854:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20778:124:::0;:::o;25959:135::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;26048:6:::1;26042:3;:12;26034:21;;;::::0;::::1;;26066:14;:20:::0;25959:135::o;15803:156::-;15883:4;15907:44;15921:10;15933:9;15944:6;15907:13;:44::i;24327:165::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24413:19:0;;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;:28;;;::::1;;-1:-1:-1::0;;24413:28:0;;::::1;::::0;::::1;::::0;;;24452:15:::1;:23:::0;;;;;;:32;;;;::::1;;::::0;;24327:165::o;26395:238::-;26540:10;26491:12;26524:27;;;:15;:27;;;;;;;;26516:36;;;;;;26570:11;;:55;;-1:-1:-1;;;26570:55:0;;-1:-1:-1;;;;;7678:15:1;;;26570:55:0;;;7660:34:1;7730:15;;;7710:18;;;7703:43;7762:18;;;7755:34;;;26570:11:0;;;;:23;;7595:18:1;;26570:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24506:628::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;24700:12:::1;:28:::0;;;24739:9:::1;:22:::0;;;24772:12:::1;:28:::0;;;24819:12:::1;:28:::0;;;24858:6:::1;:16:::0;;;24885:7:::1;:18:::0;;;24867:7;24895:8;24834:13;24787;24925:26:::1;24751:10:::0;24715:13;24925:26:::1;:::i;:::-;:42;;;;:::i;:::-;:58;;;;:::i;:::-;:69;;;;:::i;:::-;:79;;;;:::i;:::-;24914:8;:90:::0;25015:14:::1;:32:::0;;;25077:16:::1;25092:1;25032:15:::0;25077:16:::1;:::i;:::-;25066:8;;:27;25058:68;;;::::0;-1:-1:-1;;;25058:68:0;;8382:2:1;25058:68:0::1;::::0;::::1;8364:21:1::0;8421:2;8401:18;;;8394:30;8460;8440:18;;;8433:58;8508:18;;25058:68:0::1;8180:352:1::0;25058:68:0::1;24506:628:::0;;;;;;;:::o;25601:155::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;25692:11:::1;:22:::0;;-1:-1:-1;;25692:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;25725:13:::1;:23:::0;25601:155::o;16345:225::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;16480:4:::1;16465:12;;:19;;;;:::i;:::-;16446:15;;:38;;16438:47;;;::::0;::::1;;16558:4;16530:23;16515:12;;:38;;;;:::i;:::-;16514:48;;;;:::i;:::-;16496:15;:66:::0;-1:-1:-1;16345:225:0:o;20918:226::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;21016:14:::1;:22:::0;;;;21049:13:::1;:20:::0;;;;21080:18:::1;:27:::0;20918:226::o;26295:90::-;26340:11;;:37;;-1:-1:-1;;;26340:37:0;;26366:10;26340:37;;;4042:51:1;-1:-1:-1;;;;;26340:11:0;;;;:25;;4015:18:1;;26340:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3297:244;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3386:22:0;::::1;3378:73;;;::::0;-1:-1:-1;;;3378:73:0;;8739:2:1;3378:73:0::1;::::0;::::1;8721:21:1::0;8778:2;8758:18;;;8751:30;8817:34;8797:18;;;8790:62;-1:-1:-1;;;8868:18:1;;;8861:36;8914:19;;3378:73:0::1;8537:402:1::0;3378:73:0::1;3488:6;::::0;;3467:38:::1;::::0;-1:-1:-1;;;;;3467:38:0;;::::1;::::0;3488:6;::::1;::::0;3467:38:::1;::::0;::::1;3516:6;:17:::0;;-1:-1:-1;;;;;;3516:17:0::1;-1:-1:-1::0;;;;;3516:17:0;;;::::1;::::0;;;::::1;::::0;;3297:244::o;20445:325::-;20577:10;20528:12;20561:27;;;:15;:27;;;;;;;;20553:36;;;;;;20603:6;20613:1;20603:11;20600:96;;20639:45;;-1:-1:-1;;;20639:45:0;;20678:4;20639:45;;;4042:51:1;-1:-1:-1;;;;;20639:30:0;;;;;4015:18:1;;20639:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20630:54;;20600:96;20713:49;;-1:-1:-1;;;20713:49:0;;20743:10;20713:49;;;9307:51:1;9374:18;;;9367:34;;;-1:-1:-1;;;;;20713:29:0;;;;;9280:18:1;;20713:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23529:344::-;3054:6;;-1:-1:-1;;;;;3054:6:0;2364:10;3054:22;3046:67;;;;-1:-1:-1;;;3046:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23623:23:0;::::1;23641:4;23623:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;23660:4:0::1;::::0;-1:-1:-1;;;;;23650:14:0;;::::1;23660:4:::0;::::1;23650:14;;23623:41;23615:50;;;::::0;::::1;;-1:-1:-1::0;;;;;23676:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23676:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23720:146:::1;;23745:11;::::0;:31:::1;::::0;-1:-1:-1;;;23745:31:0;;-1:-1:-1;;;;;9325:32:1;;;23745:31:0::1;::::0;::::1;9307:51:1::0;23745:11:0::1;9374:18:1::0;;;9367:34;23745:11:0;;::::1;::::0;:20:::1;::::0;9280:18:1;;23745:31:0::1;9133:274:1::0;23720:146:0::1;23807:11;::::0;-1:-1:-1;;;;;23836:17:0;;::::1;23807:11;23836:17:::0;;;:9:::1;:17;::::0;;;;;;;23807:47;;-1:-1:-1;;;23807:47:0;;::::1;::::0;::::1;9307:51:1::0;;;;9374:18;;;9367:34;23807:11:0;::::1;::::0;:20:::1;::::0;9280:18:1;;23807:47:0::1;9133:274:1::0;23720:146:0::1;23529:344:::0;;:::o;527:192::-;613:7;649:12;641:6;;;;633:29;;;;-1:-1:-1;;;633:29:0;;;;;;;;:::i;:::-;-1:-1:-1;673:9:0;685:5;689:1;685;:5;:::i;:::-;673:17;527:192;-1:-1:-1;;;;;527:192:0:o;16950:1674::-;17062:6;;17042:4;;17062:6;;17059:63;;;17078:41;17093:6;17101:9;17112:6;17078:14;:41::i;:::-;17071:48;;;;17059:63;-1:-1:-1;;;;;17140:22:0;;;;;;:14;:22;;;;;;;;17139:23;:53;;;;-1:-1:-1;;;;;;17167:25:0;;;;;;:14;:25;;;;;;;;17166:26;17139:53;17136:148;;;17216:11;;-1:-1:-1;;;17216:11:0;;;;17208:43;;;;-1:-1:-1;;;17208:43:0;;10034:2:1;17208:43:0;;;10016:21:1;10073:2;10053:18;;;10046:30;-1:-1:-1;;;10092:18:1;;;10085:50;10152:18;;17208:43:0;9832:344:1;17208:43:0;-1:-1:-1;;;;;17336:22:0;;;;;;:14;:22;;;;;;;;17335:23;:53;;;;-1:-1:-1;;;;;;17362:26:0;;17383:4;17362:26;;17335:53;:84;;;;-1:-1:-1;17414:4:0;;-1:-1:-1;;;;;17393:26:0;;;17414:4;;17393:26;;17335:84;:105;;;;-1:-1:-1;17436:4:0;;-1:-1:-1;;;;;17423:17:0;;;17436:4;;17423:17;;17335:105;:142;;;;-1:-1:-1;17457:20:0;;-1:-1:-1;;;;;17444:33:0;;;17457:20;;17444:33;;17335:142;:174;;;;-1:-1:-1;17494:15:0;;-1:-1:-1;;;;;17481:28:0;;;17494:15;;17481:28;;17335:174;:205;;;;-1:-1:-1;;;;;;17514:26:0;;;;;;:15;:26;;;;;;;;17513:27;17335:205;17331:397;;;-1:-1:-1;;;;;15281:18:0;;17556;15281;;;:9;:18;;;;;;17645:15;;17621:19;17634:6;15281:18;17621:19;:::i;:::-;17620:40;;17612:114;;;;-1:-1:-1;;;17612:114:0;;10383:2:1;17612:114:0;;;10365:21:1;10422:2;10402:18;;;10395:30;10461:34;10441:18;;;10434:62;10532:32;10512:18;;;10505:60;10582:19;;17612:114:0;10181:426:1;17612:114:0;17541:187;17331:397;17775:28;17788:6;17796;17775:12;:28::i;:::-;17819:16;:14;:16::i;:::-;17816:35;;;17838:10;:8;:10::i;:::-;17883:53;;;;;;;;;;;-1:-1:-1;;;17883:53:0;;;;;;;;-1:-1:-1;;;;;17883:17:0;;-1:-1:-1;17883:17:0;;;:9;:17;;;;;;;;:53;;17905:6;;17883:21;:53::i;:::-;-1:-1:-1;;;;;17863:17:0;;;;;;:9;:17;;;;;;;;:73;;;;17975:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;17998:22:0;;;;;;:11;:22;;;;;;;;17975:45;17974:93;;18033:34;18041:6;18049;18057:9;18033:7;:34::i;:::-;17974:93;;;18024:6;17974:93;-1:-1:-1;;;;;18101:20:0;;;;;;:9;:20;;;;;;17949:118;;-1:-1:-1;18101:40:0;;17949:118;18101:24;:40::i;:::-;-1:-1:-1;;;;;18078:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;18158:24;;;;;:16;:24;;;;;;;18154:119;;18203:11;;-1:-1:-1;;;;;18232:17:0;;;18203:11;18232:17;;;:9;:17;;;;;;;;18203:47;;-1:-1:-1;;;18203:47:0;;;;;9307:51:1;;;;9374:18;;;9367:34;18203:11:0;;;:20;;9280:18:1;;18203:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18199:63;;-1:-1:-1;;;;;18289:27:0;;;;;;:16;:27;;;;;;;;18285:129;;18337:11;;-1:-1:-1;;;;;18369:20:0;;;18337:11;18369:20;;;:9;:20;;;;;;;;18337:53;;-1:-1:-1;;;18337:53:0;;;;;9307:51:1;;;;9374:18;;;9367:34;18337:11:0;;;:20;;9280:18:1;;18337:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18333:69;;18429:9;;:13;18426:98;;18462:11;;18482:14;;18462:35;;-1:-1:-1;;;;;;18462:35:0;;-1:-1:-1;;;;;18462:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;18462:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18458:51;;18568:9;-1:-1:-1;;;;;18551:43:0;18560:6;-1:-1:-1;;;;;18551:43:0;-1:-1:-1;;;;;;;;;;;18579:14:0;18551:43;;;;160:25:1;;148:2;133:18;;14:177;18551:43:0;;;;;;;;-1:-1:-1;18612:4:0;;16950:1674;-1:-1:-1;;;;16950:1674:0:o;385:136::-;443:7;470:43;474:1;477;470:43;;;;;;;;;;;;;;;;;:3;:43::i;18636:330::-;18766:53;;;;;;;;;;;-1:-1:-1;;;18766:53:0;;;;;;;;-1:-1:-1;;;;;18766:17:0;;18729:4;18766:17;;;:9;:17;;;;;;;:53;;18788:6;;18766:21;:53::i;:::-;-1:-1:-1;;;;;18746:17:0;;;;;;;:9;:17;;;;;;:73;;;;18853:20;;;;;;;:32;;18878:6;18853:24;:32::i;:::-;-1:-1:-1;;;;;18830:20:0;;;;;;;:9;:20;;;;;;;:55;;;;18901:35;;;;;;-1:-1:-1;;;;;;;;;;;18901:35:0;;;18929:6;160:25:1;;148:2;133:18;;14:177;18901:35:0;;;;;;;;-1:-1:-1;18954:4:0;18636:330;;;;;:::o;18974:166::-;19071:12;;19061:6;:22;;:49;;;-1:-1:-1;;;;;;19087:23:0;;;;;;:15;:23;;;;;;;;19061:49;19053:79;;;;-1:-1:-1;;;19053:79:0;;10814:2:1;19053:79:0;;;10796:21:1;10853:2;10833:18;;;10826:30;-1:-1:-1;;;10872:18:1;;;10865:47;10929:18;;19053:79:0;10612:341:1;20238:197:0;20325:4;;20287;;-1:-1:-1;;;;;20325:4:0;20311:10;:18;;;;:38;;-1:-1:-1;20343:6:0;;;;20342:7;20311:38;:62;;;;-1:-1:-1;20362:11:0;;;;20311:62;:116;;;;-1:-1:-1;;20414:13:0;;20404:4;20386:24;;;;:9;:24;;;;;;:41;;;20238:197::o;21433:2088::-;13541:6;:13;;-1:-1:-1;;13541:13:0;13550:4;13541:13;;;21528:15:::1;::::0;21545:26:::1;::::0;13541:6;;21512:60:::1;::::0;:15:::1;:60::i;:::-;:79;;21579:12;;21512:79;;;21575:1;21512:79;21482:109;;21602:23;21628:59;21685:1;21628:52;21671:8;;21628:38;21646:19;21628:13;;:17;;:38;;;;:::i;:::-;:42:::0;::::1;:52::i;:59::-;21602:85;;21698:20;21721:34;21739:15;21721:13;;:17;;:34;;;;:::i;:::-;21792:16;::::0;;21806:1:::1;21792:16:::0;;;;;::::1;::::0;;21698:57;;-1:-1:-1;21768:21:0::1;::::0;21792:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21792:16:0::1;21768:40;;21837:4;21819;21824:1;21819:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21819:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21863:4:::1;::::0;21853:7;;21863:4;::::1;::::0;21853;;21863;;21853:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;21853:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:14;;;;21946:6;:188:::1;::::0;-1:-1:-1;;;21946:188:0;;21912:21:::1;::::0;21946:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22018:12;;21888:21:::1;::::0;22061:4;;22088::::1;::::0;22108:15:::1;::::0;21946:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22147:17;22167:40;22193:13;22167:21;:25;;:40;;;;:::i;:::-;22147:60:::0;-1:-1:-1;22220:19:0::1;22242:40;22255:26;:19:::0;22279:1:::1;22255:23;:26::i;:::-;22242:8;::::0;;:12:::1;:40::i;:::-;22220:62:::0;-1:-1:-1;22303:26:0::1;22332:58;22388:1;22332:51;22220:62:::0;22332:51;:9;22346:19;22332:13:::1;:34::i;:58::-;22303:87;;22401:23;22427:41;22456:11;22427:24;22441:9;;22427;:13;;:24;;;;:::i;:41::-;22401:67;;22479:26;22508:44;22540:11;22508:27;22522:12;;22508:9;:13;;:27;;;;:::i;:44::-;22479:73;;22563:26;22592:44;22624:11;22592:27;22606:12;;22592:9;:13;;:27;;;;:::i;:44::-;22563:73;;22647:20;22670:38;22696:11;22670:21;22684:6;;22670:9;:13;;:21;;;;:::i;:38::-;22647:61;;22729:11;;;;;;;;;-1:-1:-1::0;;;;;22729:11:0::1;-1:-1:-1::0;;;;;22729:19:0::1;;22756:15;22729:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;22825:20:0::1;::::0;22817:77:::1;::::0;22797:15:::1;::::0;-1:-1:-1;;;;;22825:20:0::1;::::0;22884:5:::1;::::0;22859:18;;22797:15;22817:77;22797:15;22817:77;22859:18;22825:20;22884:5;22817:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22929:20:0::1;::::0;22921:77:::1;::::0;22796:98;;-1:-1:-1;;;;;;22929:20:0::1;::::0;22988:5:::1;::::0;22963:18;;22921:77:::1;::::0;;;22963:18;22929:20;22988:5;22921:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;23033:14:0::1;::::0;23025:65:::1;::::0;22905:93;;-1:-1:-1;;;;;;23033:14:0::1;::::0;23080:5:::1;::::0;23061:12;;23025:65:::1;::::0;;;23061:12;23033:14;23080:5;23025:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23134:5:0::1;::::0;-1:-1:-1;;23155:19:0;;;-1:-1:-1;23152:362:0::1;;23190:6;::::0;23364:21:::1;::::0;23190:244:::1;::::0;-1:-1:-1;;;23190:244:0;;23266:4:::1;23190:244;::::0;::::1;12626:34:1::0;12676:18;;;12669:34;;;23190:6:0::1;12719:18:1::0;;;12712:34;;;12762:18;;;12755:34;-1:-1:-1;;;;;23364:21:0;;::::1;12805:19:1::0;;;12798:44;23404:15:0::1;12858:19:1::0;;;12851:35;23190:6:0;::::1;::::0;:22:::1;::::0;23220:18;;12560:19:1;;23190:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23454:48:0::1;::::0;;6682:25:1;;;6738:2;6723:18;;6716:34;;;23454:48:0::1;::::0;-1:-1:-1;6655:18:1;23454:48:0::1;;;;;;;23152:362;-1:-1:-1::0;;13559:6:0;:14;;-1:-1:-1;;13559:14:0;;;-1:-1:-1;;;;;;;;;;;21433:2088:0:o;19276:954::-;19413:18;;19460:4;;19362:7;;19413:18;-1:-1:-1;;;;;19460:4:0;;;19447:17;;;;19444:154;;-1:-1:-1;19494:14:0;;19444:154;;;19539:4;;-1:-1:-1;;;;;19539:4:0;;;19529:14;;;;19526:72;;-1:-1:-1;19573:13:0;;19526:72;19610:17;19630:62;19671:14;;19688:3;19671:20;;;;:::i;:::-;19630:36;19655:10;19630:20;19641:8;;19630:6;:10;;:20;;;;:::i;:::-;:24;;:36::i;:62::-;19610:82;;19703:18;19724:36;19751:8;;19724:22;19738:7;;19724:9;:13;;:22;;;;:::i;:36::-;19703:57;-1:-1:-1;19771:22:0;19796:25;:9;19703:57;19796:13;:25::i;:::-;19879:4;19861:24;;;;:9;:24;;;;;;19771:50;;-1:-1:-1;19861:44:0;;19771:50;19861:28;:44::i;:::-;19852:4;19834:24;;;;:9;:24;;;;;;:71;;;;19955:15;;-1:-1:-1;;;;;19955:15:0;19945:26;;;;:42;;19976:10;19945:30;:42::i;:::-;19926:15;;-1:-1:-1;;;;;19926:15:0;;;19916:26;;;;:9;:26;;;;;;;;;:71;;;;20003:47;160:25:1;;;20028:4:0;;20003:47;;;;-1:-1:-1;;;;;;;;;;;20003:47:0;133:18:1;20003:47:0;;;;;;;20074:14;;20071:99;;20126:15;;20109:45;;160:25:1;;;-1:-1:-1;;;;;20126:15:0;;;;20109:45;;;-1:-1:-1;;;;;;;;;;;20109:45:0;148:2:1;133:18;20109:45:0;;;;;;;20071:99;20191:21;:6;20202:9;20191:10;:21::i;:::-;20184:28;19276:954;-1:-1:-1;;;;;;;;19276:954:0:o;198:181::-;256:7;;288:5;292:1;288;:5;:::i;:::-;276:17;;317:1;312;:6;;304:46;;;;-1:-1:-1;;;304:46:0;;13410:2:1;304:46:0;;;13392:21:1;13449:2;13429:18;;;13422:30;13488:29;13468:18;;;13461:57;13535:18;;304:46:0;13208:351:1;26973:151:0;27054:4;27110:6;27078:29;27098:8;27078:19;:29::i;:::-;:38;;26973:151;-1:-1:-1;;;26973:151:0:o;725:250::-;783:7;807:1;812;807:6;803:47;;-1:-1:-1;837:1:0;830:8;;803:47;862:9;874:5;878:1;874;:5;:::i;:::-;862:17;-1:-1:-1;907:1:0;898:5;902:1;862:17;898:5;:::i;:::-;:10;890:56;;;;-1:-1:-1;;;890:56:0;;13766:2:1;890:56:0;;;13748:21:1;13805:2;13785:18;;;13778:30;13844:34;13824:18;;;13817:62;-1:-1:-1;;;13895:18:1;;;13888:31;13936:19;;890:56:0;13564:397:1;981:132:0;1039:7;1066:39;1070:1;1073;1066:39;;;;;;;;;;;;;;;;;:3;:39::i;26797:168::-;26866:7;26893:64;26934:22;:20;:22::i;:::-;26916:4;;-1:-1:-1;;;;;26916:4:0;15263:7;15281:18;;;:9;:18;;;;;;26893:36;;26906:22;;26926:1;;26906:15;15197:105;26906:22;26893:8;;:12;:36::i;1119:189::-;1205:7;1240:12;1233:5;1225:28;;;;-1:-1:-1;;;1225:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1264:9:0;1276:5;1280:1;1276;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:173::-;817:20;;-1:-1:-1;;;;;866:31:1;;856:42;;846:70;;912:1;909;902:12;846:70;749:173;;;:::o;927:254::-;995:6;1003;1056:2;1044:9;1035:7;1031:23;1027:32;1024:52;;;1072:1;1069;1062:12;1024:52;1095:29;1114:9;1095:29;:::i;:::-;1085:39;1171:2;1156:18;;;;1143:32;;-1:-1:-1;;;927:254:1:o;1378:484::-;1473:6;1481;1489;1497;1505;1558:3;1546:9;1537:7;1533:23;1529:33;1526:53;;;1575:1;1572;1565:12;1526:53;1598:29;1617:9;1598:29;:::i;:::-;1588:39;;1646:38;1680:2;1669:9;1665:18;1646:38;:::i;:::-;1636:48;;1703:38;1737:2;1726:9;1722:18;1703:38;:::i;:::-;1693:48;;1760:38;1794:2;1783:9;1779:18;1760:38;:::i;:::-;1750:48;;1817:39;1851:3;1840:9;1836:19;1817:39;:::i;:::-;1807:49;;1378:484;;;;;;;;:::o;1867:248::-;1935:6;1943;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;;2035:23:1;;;2105:2;2090:18;;;2077:32;;-1:-1:-1;1867:248:1:o;2120:328::-;2197:6;2205;2213;2266:2;2254:9;2245:7;2241:23;2237:32;2234:52;;;2282:1;2279;2272:12;2234:52;2305:29;2324:9;2305:29;:::i;:::-;2295:39;;2353:38;2387:2;2376:9;2372:18;2353:38;:::i;:::-;2343:48;;2438:2;2427:9;2423:18;2410:32;2400:42;;2120:328;;;;;:::o;2642:186::-;2701:6;2754:2;2742:9;2733:7;2729:23;2725:32;2722:52;;;2770:1;2767;2760:12;2722:52;2793:29;2812:9;2793:29;:::i;2833:118::-;2919:5;2912:13;2905:21;2898:5;2895:32;2885:60;;2941:1;2938;2931:12;2956:750;3048:6;3056;3064;3117:2;3105:9;3096:7;3092:23;3088:32;3085:52;;;3133:1;3130;3123:12;3085:52;3173:9;3160:23;3202:18;3243:2;3235:6;3232:14;3229:34;;;3259:1;3256;3249:12;3229:34;3297:6;3286:9;3282:22;3272:32;;3342:7;3335:4;3331:2;3327:13;3323:27;3313:55;;3364:1;3361;3354:12;3313:55;3404:2;3391:16;3430:2;3422:6;3419:14;3416:34;;;3446:1;3443;3436:12;3416:34;3501:7;3494:4;3484:6;3481:1;3477:14;3473:2;3469:23;3465:34;3462:47;3459:67;;;3522:1;3519;3512:12;3459:67;3553:4;3545:13;;;;-1:-1:-1;3577:6:1;-1:-1:-1;;3618:20:1;;3605:34;3648:28;3605:34;3648:28;:::i;:::-;3695:5;3685:15;;;2956:750;;;;;:::o;3711:180::-;3770:6;3823:2;3811:9;3802:7;3798:23;3794:32;3791:52;;;3839:1;3836;3829:12;3791:52;-1:-1:-1;3862:23:1;;3711:180;-1:-1:-1;3711:180:1:o;4104:315::-;4169:6;4177;4230:2;4218:9;4209:7;4205:23;4201:32;4198:52;;;4246:1;4243;4236:12;4198:52;4269:29;4288:9;4269:29;:::i;:::-;4259:39;;4348:2;4337:9;4333:18;4320:32;4361:28;4383:5;4361:28;:::i;:::-;4408:5;4398:15;;;4104:315;;;;;:::o;4424:592::-;4537:6;4545;4553;4561;4569;4577;4585;4638:3;4626:9;4617:7;4613:23;4609:33;4606:53;;;4655:1;4652;4645:12;4606:53;-1:-1:-1;;4678:23:1;;;4748:2;4733:18;;4720:32;;-1:-1:-1;4799:2:1;4784:18;;4771:32;;4850:2;4835:18;;4822:32;;-1:-1:-1;4901:3:1;4886:19;;4873:33;;-1:-1:-1;4953:3:1;4938:19;;4925:33;;-1:-1:-1;5005:3:1;4990:19;4977:33;;-1:-1:-1;4424:592:1;-1:-1:-1;4424:592:1:o;5021:260::-;5089:6;5097;5150:2;5138:9;5129:7;5125:23;5121:32;5118:52;;;5166:1;5163;5156:12;5118:52;5189:29;5208:9;5189:29;:::i;:::-;5179:39;;5237:38;5271:2;5260:9;5256:18;5237:38;:::i;:::-;5227:48;;5021:260;;;;;:::o;5286:309::-;5351:6;5359;5412:2;5400:9;5391:7;5387:23;5383:32;5380:52;;;5428:1;5425;5418:12;5380:52;5467:9;5454:23;5486:28;5508:5;5486:28;:::i;5600:316::-;5677:6;5685;5693;5746:2;5734:9;5725:7;5721:23;5717:32;5714:52;;;5762:1;5759;5752:12;5714:52;-1:-1:-1;;5785:23:1;;;5855:2;5840:18;;5827:32;;-1:-1:-1;5906:2:1;5891:18;;;5878:32;;5600:316;-1:-1:-1;5600:316:1:o;6147:356::-;6349:2;6331:21;;;6368:18;;;6361:30;6427:34;6422:2;6407:18;;6400:62;6494:2;6479:18;;6147:356::o;6761:127::-;6822:10;6817:3;6813:20;6810:1;6803:31;6853:4;6850:1;6843:15;6877:4;6874:1;6867:15;6893:127;6954:10;6949:3;6945:20;6942:1;6935:31;6985:4;6982:1;6975:15;7009:4;7006:1;6999:15;7025:217;7065:1;7091;7081:132;;7135:10;7130:3;7126:20;7123:1;7116:31;7170:4;7167:1;7160:15;7198:4;7195:1;7188:15;7081:132;-1:-1:-1;7227:9:1;;7025:217::o;7247:168::-;7320:9;;;7351;;7368:15;;;7362:22;;7348:37;7338:71;;7389:18;;:::i;7800:245::-;7867:6;7920:2;7908:9;7899:7;7895:23;7891:32;7888:52;;;7936:1;7933;7926:12;7888:52;7968:9;7962:16;7987:28;8009:5;7987:28;:::i;8050:125::-;8115:9;;;8136:10;;;8133:36;;;8149:18;;:::i;8944:184::-;9014:6;9067:2;9055:9;9046:7;9042:23;9038:32;9035:52;;;9083:1;9080;9073:12;9035:52;-1:-1:-1;9106:16:1;;8944:184;-1:-1:-1;8944:184:1:o;9699:128::-;9766:9;;;9787:11;;;9784:37;;;9801:18;;:::i;11090:980::-;11352:4;11400:3;11389:9;11385:19;11431:6;11420:9;11413:25;11457:2;11495:6;11490:2;11479:9;11475:18;11468:34;11538:3;11533:2;11522:9;11518:18;11511:31;11562:6;11597;11591:13;11628:6;11620;11613:22;11666:3;11655:9;11651:19;11644:26;;11705:2;11697:6;11693:15;11679:29;;11726:1;11736:195;11750:6;11747:1;11744:13;11736:195;;;11815:13;;-1:-1:-1;;;;;11811:39:1;11799:52;;11906:15;;;;11871:12;;;;11847:1;11765:9;11736:195;;;-1:-1:-1;;;;;;;11987:32:1;;;;11982:2;11967:18;;11960:60;-1:-1:-1;;;12051:3:1;12036:19;12029:35;11948:3;11090:980;-1:-1:-1;;;11090:980:1:o;12897:306::-;12985:6;12993;13001;13054:2;13042:9;13033:7;13029:23;13025:32;13022:52;;;13070:1;13067;13060:12;13022:52;13099:9;13093:16;13083:26;;13149:2;13138:9;13134:18;13128:25;13118:35;;13193:2;13182:9;13178:18;13172:25;13162:35;;12897:306;;;;;:::o

Swarm Source

ipfs://ef04c700acb0c45da42da8706f440ec81b507fd60c67af86802d3dba0b2ed70a

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.