ETH Price: $1,787.12 (+6.64%)

Contract

0x6C8d8e4Cf41b4eCF264612B3b0B43dE93De74C6C

Overview

ETH Balance

0.000004660854563514 ETH

ETH Value

Less Than $0.01 (@ $1,787.12/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer910291182023-05-15 18:29:10708 days ago1684175350IN
0x6C8d8e4C...93De74C6C
0 ETH0.000244440.1
Approve792039372023-04-11 3:01:20743 days ago1681182080IN
0x6C8d8e4C...93De74C6C
0 ETH0.000046940.1
Approve791664252023-04-11 0:22:02743 days ago1681172522IN
0x6C8d8e4C...93De74C6C
0 ETH0.000039370.1
Approve791318552023-04-10 21:52:18743 days ago1681163538IN
0x6C8d8e4C...93De74C6C
0 ETH0.000050930.1
Set Buy Tx Limit...791297232023-04-10 21:42:56743 days ago1681162976IN
0x6C8d8e4C...93De74C6C
0 ETH0.000041470.1
Set Sell Tx Limi...791296262023-04-10 21:42:34743 days ago1681162954IN
0x6C8d8e4C...93De74C6C
0 ETH0.000041320.1
Set Sell Tx Limi...791296152023-04-10 21:42:31743 days ago1681162951IN
0x6C8d8e4C...93De74C6C
0 ETH0.00004160.1
Set Fee Receiver...791293542023-04-10 21:41:24743 days ago1681162884IN
0x6C8d8e4C...93De74C6C
0 ETH0.000058940.1
Approve791283742023-04-10 21:37:04743 days ago1681162624IN
0x6C8d8e4C...93De74C6C
0 ETH0.000050470.1
Approve791281452023-04-10 21:36:05743 days ago1681162565IN
0x6C8d8e4C...93De74C6C
0 ETH0.000048390.1
Set Buy Fees791272312023-04-10 21:32:08743 days ago1681162328IN
0x6C8d8e4C...93De74C6C
0 ETH0.00006770.1
Set Sell Fees791268262023-04-10 21:30:21743 days ago1681162221IN
0x6C8d8e4C...93De74C6C
0 ETH0.000067940.1
Transfer791262012023-04-10 21:27:40743 days ago1681162060IN
0x6C8d8e4C...93De74C6C
0 ETH0.000100340.1
Approve791260632023-04-10 21:27:04743 days ago1681162024IN
0x6C8d8e4C...93De74C6C
0 ETH0.000044740.1
Transfer791260172023-04-10 21:26:53743 days ago1681162013IN
0x6C8d8e4C...93De74C6C
0 ETH0.000102170.1
Transfer791257672023-04-10 21:25:46743 days ago1681161946IN
0x6C8d8e4C...93De74C6C
0 ETH0.000102170.1
Approve791121702023-04-10 20:27:26743 days ago1681158446IN
0x6C8d8e4C...93De74C6C
0 ETH0.000047070.1
Approve790949062023-04-10 19:14:33743 days ago1681154073IN
0x6C8d8e4C...93De74C6C
0 ETH0.000051170.1
Approve790932512023-04-10 19:07:35743 days ago1681153655IN
0x6C8d8e4C...93De74C6C
0 ETH0.00004890.1
Approve790908322023-04-10 18:57:26743 days ago1681153046IN
0x6C8d8e4C...93De74C6C
0 ETH0.000047170.1
Approve790906512023-04-10 18:56:40743 days ago1681153000IN
0x6C8d8e4C...93De74C6C
0 ETH0.000047170.1
Approve790902072023-04-10 18:54:50743 days ago1681152890IN
0x6C8d8e4C...93De74C6C
0 ETH0.000051980.1
Approve790900682023-04-10 18:54:15743 days ago1681152855IN
0x6C8d8e4C...93De74C6C
0 ETH0.000052730.1
Approve790894002023-04-10 18:51:23743 days ago1681152683IN
0x6C8d8e4C...93De74C6C
0 ETH0.000051720.1
Approve790893112023-04-10 18:51:00743 days ago1681152660IN
0x6C8d8e4C...93De74C6C
0 ETH0.000051690.1
View all transactions

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
910291182023-05-15 18:29:10708 days ago1684175350
0x6C8d8e4C...93De74C6C
0.00000466 ETH
910291182023-05-15 18:29:10708 days ago1684175350
0x6C8d8e4C...93De74C6C
0.00000466 ETH
910291182023-05-15 18:29:10708 days ago1684175350
0x6C8d8e4C...93De74C6C
0.00000933 ETH
910291182023-05-15 18:29:10708 days ago1684175350
0x6C8d8e4C...93De74C6C
0.00011197 ETH
910291182023-05-15 18:29:10708 days ago1684175350
0x6C8d8e4C...93De74C6C
0.00000933 ETH
910291182023-05-15 18:29:10708 days ago1684175350
0x6C8d8e4C...93De74C6C
0.0001353 ETH
789476752023-04-10 9:02:28744 days ago1681117348
0x6C8d8e4C...93De74C6C
 Contract Creation0 ETH

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LUCID_Protocol

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-04-10
*/

/**
 *Submitted for verification at Arbiscan on 2023-03-18

╔╗─────────╔╗───────╔╗─────────╔╗
║║─────────║║──────╔╝╚╗────────║║
║║╔╗╔╦══╦╦═╝╠══╦═╦═╩╗╔╬══╦══╦══╣║
║║║║║║╔═╬╣╔╗║╔╗║╔╣╔╗║║║╔╗║╔═╣╔╗║║
║╚╣╚╝║╚═╣║╚╝║╚╝║║║╚╝║╚╣╚╝║╚═╣╚╝║╚╗
╚═╩══╩══╩╩══╣╔═╩╝╚══╩═╩══╩══╩══╩═╝
────────────║║
────────────╚╝
TG: https://t.me/lucidprotocol

*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.5;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    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);
}

/**
 * Allows for contract ownership for multiple adressess
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address account) public onlyOwner {
        authorizations[account] = true;
    }

    /**
     * Remove address authorization. Owner only
     */
    function unauthorize(address account) public onlyOwner {
        authorizations[account] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address authorization status
     */
    function isAuthorized(address account) public view returns (bool) {
        return authorizations[account];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        authorizations[account] = true;
        emit OwnershipTransferred(account);
    }

    event OwnershipTransferred(address owner);
}

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

/* Standard IDEXRouter */
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 for the DividendDistributor */
interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setRewardToken (IBEP20 _ARB) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

/* Our DividendDistributor contract responsible for distributing the earn token */
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    // EARN
    IBEP20 public ARB = IBEP20(0x912CE59144191C1204E64559FE8253a0e49E6548);
    address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
    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 = 60 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    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(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        _token = msg.sender;
    }

    //New function to set the Reward
    function setRewardToken (IBEP20 _ARB) external override onlyToken {
        ARB = IBEP20(_ARB);
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    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 = ARB.balanceOf(address(this));

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

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

        uint256 amount = ARB.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);
            ARB.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 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();
    }
}

/* Token contract */
contract LUCID_Protocol  is IBEP20, Auth {
    using SafeMath for uint256;

    // Addresses
    address ARB = 0x912CE59144191C1204E64559FE8253a0e49E6548;
    address WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    

    address TOKENDISTRIBUTOR;

    // These are owner by default
    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public ttmFeeReceiver;
    // Name and symbol
    string constant _name = "LUCID Protocol";
    string constant _symbol = "$LUCID";
    uint8 constant _decimals = 18;

    // Total supply
    uint256 _totalSupply = 10000 * (10 ** _decimals);

    // Max wallet and TX
    uint256 public _maxBuyTxAmount = _totalSupply * 200 / 100; // 2%
    uint256 public _maxSellTxAmount = _totalSupply * 200 / 100; // 2%
    uint256 public _maxWalletToken = ( _totalSupply * 200 ) / 100; // 2%

    // Mappings
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    // Buy Fees
    uint256 liquidityFeeBuy = 1000;
    uint256 ttmFeeBuy = 1000;
    uint256 reflectionFeeBuy = 1000;
    uint256 marketingFeeBuy = 1000;
    uint256 totalFeeBuy = 4000;      

    // Sell fees
    uint256 liquidityFeeSell = 1000;
    uint256 ttmFeeSell = 1000;
    uint256 reflectionFeeSell = 1000;
    uint256 marketingFeeSell = 1000;
    uint256 totalFeeSell = 4000;

    // Fee variables
    uint256 liquidityFee;
    uint256 ttmFee;
    uint256 reflectionFee;
    uint256 marketingFee;
    uint256 totalFee;
    uint256 feeDenominator = 10000;

    // Sell amount of tokens when a sell takes place
    uint256 public swapThreshold = _totalSupply * 20 / 100; // 0.2% of supply

    // Liquidity
    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    // NOTE: Solidity uses Unix timestamp so 1 is 1 second.
    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 5;
    mapping (address => uint) private cooldownTimer;

    // Other variables
    IDEXRouter public router;
    address public pair;
    uint256 public launchedAt;
    bool public tradingOpen = false;
    bool public swapEnabled = true;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    /* Token constructor */
    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        // Should be the owner wallet/token distributor
        TOKENDISTRIBUTOR = msg.sender;
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        
        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
       
        
        // Exempt from dividend
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        // Set the marketing and liq receiver to the owner as default
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = 0xaDAe55835FBa8cA28d2F0276C6F2C17AEDab31AC;
        ttmFeeReceiver = 0xabc69593fF23914db004389eb21dB9761D236C88;

        _balances[_presaler] = _totalSupply;
        emit Transfer(address(0), _presaler, _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);
    }

    // setting the max wallet in percentages
    // NOTE: 1% = 100
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);

    }

    // Set the tokendistributor, exempt for everything and able to SEND before launch.
    function setTokenDistributor(address _tokenDistributor) external authorized{
        TOKENDISTRIBUTOR = _tokenDistributor;
        isFeeExempt[_tokenDistributor] = true;
        isTxLimitExempt[_tokenDistributor] = true;
        isTimelockExempt[_tokenDistributor] = true;
    }

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

        // Check if trading is enabled
        if(!authorizations[sender] && !authorizations[recipient] && TOKENDISTRIBUTOR != sender){
            require(tradingOpen,"Trading not enabled yet");
        }

        // Check if buying or selling
        bool isSell = recipient == pair; 

        // Set buy or sell fees
        setCorrectFees(isSell);

        // Check max wallet
        checkMaxWallet(sender, recipient, amount);
   
        // Buycooldown 
        checkBuyCooldown(sender, recipient);

        // Checks maxTx
        checkTxLimit(sender, amount, recipient, isSell);

        // Check if we should do the swapback
        if(shouldSwapBack()){ swapBack(); }

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

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

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

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

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    // Do a normal transfer
    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;
    }

    // Set the correct fees for buying or selling
    function setCorrectFees(bool isSell) internal {
        if(isSell){
            liquidityFee = liquidityFeeSell;
            ttmFee = ttmFeeSell;
            reflectionFee = reflectionFeeSell;
            marketingFee = marketingFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = liquidityFeeBuy;
            ttmFee = ttmFeeBuy;
            reflectionFee = reflectionFeeBuy;
            marketingFee = marketingFeeBuy;
            totalFee = totalFeeBuy;
        }
    }

    // Check for maxTX
    function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner){
            if(isSell){
                require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            } else {
                require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            }
        }
    }

    // Check buy cooldown
    function checkBuyCooldown(address sender, address recipient) internal {
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }
    }

    // Check maxWallet
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && !isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && recipient != owner && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != ttmFeeReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }

    // Check if sender is not feeExempt
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    // Take the normal total Fee
    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

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

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // Enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    // Main swapback to sell tokens for WETH
    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 amountWETH = address(this).balance.sub(balanceBefore);
        uint256 totalWETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountWETHLiquidity = amountWETH.mul(dynamicLiquidityFee).div(totalWETHFee).div(2);
        uint256 amountWETHReflection = amountWETH.mul(reflectionFee).div(totalWETHFee);
        uint256 amountWETHMarketing = amountWETH.mul(marketingFee).div(totalWETHFee);
        uint256 amountWETHttm = amountWETH.mul(ttmFee).div(totalWETHFee); 


        try distributor.deposit{value: amountWETHReflection}() {} catch {}
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountWETHMarketing, gas: 30000}("");
        (bool successttm, /* bytes memory data */) = payable(ttmFeeReceiver).call{value: amountWETHttm, gas: 30000}(""); 
        require(successMarketing, "marketing receiver rejected ETH transfer");
        require(successttm, "ttm receiver rejected ETH transfer");

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

    // Buy amount of tokens with WETH from the contract
    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }


    // Check when the token is launched
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    // Set the launchedAt to token launch
    function launch() internal {
        launchedAt = block.number;
    }

    // Set max buy TX 
    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external onlyOwner {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    // Set max sell TX 
    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external onlyOwner {
        _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
    }

    // Exempt from dividend
    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    // Exempt from fee
    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    // Exempt from max TX
    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    // Exempt from buy CD
    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFullWhitelist(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
        isFeeExempt[holder] = exempt;
        isTimelockExempt[holder] = exempt;
    }


    // Set our buy fees
    function setBuyFees(uint256 _liquidityFeeBuy, uint256 _ttmFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _feeDenominator) external onlyOwner {
        liquidityFeeBuy = _liquidityFeeBuy;
        ttmFeeBuy = _ttmFeeBuy;
        reflectionFeeBuy = _reflectionFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_ttmFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy);
        feeDenominator = _feeDenominator;
    }

    // Set our sell fees
    function setSellFees(uint256 _liquidityFeeSell, uint256 _ttmFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _feeDenominator) external onlyOwner {
        liquidityFeeSell = _liquidityFeeSell;
        ttmFeeSell = _ttmFeeSell;
        reflectionFeeSell = _reflectionFeeSell;
        marketingFeeSell = _marketingFeeSell;

        totalFeeSell = _liquidityFeeSell.add(_ttmFeeSell).add(_reflectionFeeSell).add(_marketingFeeSell);
        feeDenominator = _feeDenominator;
    }

    // Set the marketing and liquidity receivers
    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _ttmFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        ttmFeeReceiver = _ttmFeeReceiver;
    }

    

    // Set swapBack settings
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply * _amount / 10000; 
    }

    // Set target liquidity
    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    // Save spare ETH from CA
    function manualSend() external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(autoLiquidityReceiver).transfer(contractETHBalance);
    }
    
    // Set criteria for auto distribution
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    // Let people claim there dividend
    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }

    //New function to set the Reward
    function setRewardToken(IBEP20 _ARB) external authorized {
        distributor.setRewardToken(_ARB);
    }
    
    // Check how much earnings are unpaid
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

    // Set gas for distributor
    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    // Get the circulatingSupply
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    // Get the liquidity backing
    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    // Get if we are over liquified or not
    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    event AutoLiquify(uint256 amountWETH, uint256 amountBOG);
    
}

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":"amountWETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","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":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_ttmFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","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":"_ttmFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFullWhitelist","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":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"_ARB","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_ttmFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","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":[{"internalType":"address","name":"_tokenDistributor","type":"address"}],"name":"setTokenDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","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 payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ttmFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673912ce59144191c1204e64559fe8253a0e49e6548179091556003805482167382af49447d8a07e3bd95bd0d56f35241523fbab117905560048054821661dead1790556005805490911690556200006e6012600a620005a4565b6200007c90612710620005bc565b600a556064600a5460c8620000929190620005bc565b6200009e9190620005d6565b600b556064600a5460c8620000b49190620005bc565b620000c09190620005d6565b600c556064600a5460c8620000d69190620005bc565b620000e29190620005d6565b600d556103e86014556103e86015556103e86016556103e8601755610fa06018556103e86019556103e8601a556103e8601b556103e8601c55610fa0601d556127106023556064600a5460146200013a9190620005bc565b620001469190620005d6565b6024556028602581905560646026556207a12090556029805461050161ffff1991821617909155602e80549091166101001790553480156200018757600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155602b8054731b02da8cb0d097eb8d57a175b88c7d8b47997506931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620005f9565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac9190620005f9565b602c80546001600160a01b0319166001600160a01b03928316179055306000908152600f60209081526040808320602b8054861685529252918290206000199055549051911690620002fe9062000481565b6001600160a01b039091168152602001604051809103906000f0801580156200032b573d6000803e3d6000fd5b50602780546001600160a01b039283166001600160a01b031991821617909155600680548216339081179091556000818152601060209081526040808320805460ff19908116600190811790925560118452828520805482168317905560128452828520805482168317905560048054891686528386208054831684179055308087528487208054841685179055602c548a168752601386528487208054841685179055865283862080548316841790555490971684528184208054909716179095556007805485168417905560088054851673adae55835fba8ca28d2f0276c6f2c17aedab31ac1790556009805490941673abc69593ff23914db004389eb21db9761d236c8817909355600a54828252600e84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000624565b6110d0806200314683390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004e6578160001904821115620004ca57620004ca6200048f565b80851615620004d857918102915b93841c9390800290620004aa565b509250929050565b600082620004ff575060016200059e565b816200050e575060006200059e565b8160018114620005275760028114620005325762000552565b60019150506200059e565b60ff8411156200054657620005466200048f565b50506001821b6200059e565b5060208310610133831016604e8410600b841016171562000577575081810a6200059e565b620005838383620004a5565b80600019048211156200059a576200059a6200048f565b0290505b92915050565b6000620005b560ff841683620004ee565b9392505050565b80820281158282048414176200059e576200059e6200048f565b600082620005f457634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200060c57600080fd5b81516001600160a01b0381168114620005b557600080fd5b612b1280620006346000396000f3fe6080604052600436106103545760003560e01c806382bf293c116101c6578063d7c01032116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a11578063f887ea4014610a31578063fe9fbb8014610a51578063ffb54a9914610a7157600080fd5b8063f2fde38b146109bc578063f4293890146109dc578063f708a64f146109f157600080fd5b8063df4a76c5116100d1578063df4a76c514610947578063e96fada214610967578063f0b37c0414610987578063f0fc6bca146109a757600080fd5b8063d7c01032146108c1578063dd62ed3e146108e1578063df20fd491461092757600080fd5b8063a9059cbb11610164578063c1cf53c41161013e578063c1cf53c41461084b578063ca33e64c1461086b578063cf4be3941461088b578063d51ed1c8146108a157600080fd5b8063a9059cbb146107f5578063b6a5d7de14610815578063bf56b3711461083557600080fd5b806395d89b41116101a057806395d89b41146107665780639d1944f514610795578063a6b06a27146107b5578063a8aa1b31146107d557600080fd5b806382bf293c14610708578063893d20e8146107285780638aee81271461074657600080fd5b8063313ce567116102a0578063658d4b7f1161023e57806370d6948b1161021857806370d6948b1461067b578063722b62ad146106b357806378109e54146106d25780637affa29b146106e857600080fd5b8063658d4b7f146106065780636ddd17131461062657806370a082311461064557600080fd5b806347a28b791161027a57806347a28b791461058c57806350db71fb146105ac578063571ac8b0146105cc578063617fe0ed146105ec57600080fd5b8063313ce56714610534578063334773271461055657806338280e6b1461056c57600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104b05780632d48e896146104c55780632d594567146104e55780632f54bf6e1461050557600080fd5b8063201e79911461045057806323b872dd1461047057806328fd31981461049057600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c95780630d295980146103f95780631161ae391461041b57806318160ddd1461043b57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5060408051808201909152600e81526d131550d25108141c9bdd1bd8dbdb60921b60208201525b60405161038091906126ba565b3480156103d557600080fd5b506103e96103e436600461271d565b610a8b565b6040519015158152602001610380565b34801561040557600080fd5b5061041961041436600461275e565b610af8565b005b34801561042757600080fd5b506103e9610436366004612779565b610b3e565b34801561044757600080fd5b50600a54610376565b34801561045c57600080fd5b5061041961046b366004612779565b610b52565b34801561047c57600080fd5b506103e961048b36600461279b565b610b82565b34801561049c57600080fd5b506103766104ab3660046127dc565b610c44565b3480156104bc57600080fd5b50610376610cb3565b3480156104d157600080fd5b506104196104e0366004612779565b610d05565b3480156104f157600080fd5b506104196105003660046127f9565b610d94565b34801561051157600080fd5b506103e96105203660046127dc565b6000546001600160a01b0391821691161490565b34801561054057600080fd5b5060125b60405160ff9091168152602001610380565b34801561056257600080fd5b50610376600b5481565b34801561057857600080fd5b506104196105873660046127dc565b610de5565b34801561059857600080fd5b506104196105a7366004612836565b610e6c565b3480156105b857600080fd5b506104196105c7366004612871565b610ecc565b3480156105d857600080fd5b506103e96105e73660046127dc565b610f1c565b3480156105f857600080fd5b506029546103e99060ff1681565b34801561061257600080fd5b50610419610621366004612871565b610f2a565b34801561063257600080fd5b50602e546103e990610100900460ff1681565b34801561065157600080fd5b506103766106603660046127dc565b6001600160a01b03166000908152600e602052604090205490565b34801561068757600080fd5b5060095461069b906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156106bf57600080fd5b5060295461054490610100900460ff1681565b3480156106de57600080fd5b50610376600d5481565b3480156106f457600080fd5b506104196107033660046128a6565b610f7a565b34801561071457600080fd5b506104196107233660046128a6565b610fcb565b34801561073457600080fd5b506000546001600160a01b031661069b565b34801561075257600080fd5b506104196107613660046127dc565b611016565b34801561077257600080fd5b5060408051808201909152600681526509131550d25160d21b60208201526103bc565b3480156107a157600080fd5b506104196107b03660046128a6565b61109d565b3480156107c157600080fd5b506104196107d0366004612871565b6110d6565b3480156107e157600080fd5b50602c5461069b906001600160a01b031681565b34801561080157600080fd5b506103e961081036600461271d565b611148565b34801561082157600080fd5b506104196108303660046127dc565b611155565b34801561084157600080fd5b50610376602d5481565b34801561085757600080fd5b50610419610866366004612836565b6111a6565b34801561087757600080fd5b5060075461069b906001600160a01b031681565b34801561089757600080fd5b50610376600c5481565b3480156108ad57600080fd5b506103766108bc3660046128a6565b611200565b3480156108cd57600080fd5b506104196108dc3660046128bf565b61123e565b3480156108ed57600080fd5b506103766108fc36600461290a565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561093357600080fd5b50610419610942366004612938565b6112a2565b34801561095357600080fd5b506104196109623660046128a6565b6112fd565b34801561097357600080fd5b5060085461069b906001600160a01b031681565b34801561099357600080fd5b506104196109a23660046127dc565b611348565b3480156109b357600080fd5b50610419611393565b3480156109c857600080fd5b506104196109d73660046127dc565b6113f2565b3480156109e857600080fd5b50610419611488565b3480156109fd57600080fd5b50610419610a0c366004612871565b6114eb565b348015610a1d57600080fd5b50610419610a2c366004612871565b6115ef565b348015610a3d57600080fd5b50602b5461069b906001600160a01b031681565b348015610a5d57600080fd5b506103e9610a6c3660046127dc565b61163f565b348015610a7d57600080fd5b50602e546103e99060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae69086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b2b5760405162461bcd60e51b8152600401610b2290612954565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b4a83611200565b119392505050565b610b5b3361163f565b610b775760405162461bcd60e51b8152600401610b2290612974565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c2f576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610c0a91849061165d565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c3a848484611697565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af29190612999565b6005546001600160a01b03166000908152600e6020526040812054610d00906004546001600160a01b03166000908152600e6020526040902054610cfa90600a5490611a69565b90611a69565b905090565b610d0e3361163f565b610d2a5760405162461bcd60e51b8152600401610b2290612974565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b2290612954565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610dee3361163f565b610e0a5760405162461bcd60e51b8152600401610b2290612974565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b6000546001600160a01b03163314610e965760405162461bcd60e51b8152600401610b2290612954565b6014859055601584905560168390556017829055610ec082610eba85818989611aab565b90611aab565b60185560235550505050565b610ed53361163f565b610ef15760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610af282600019610a8b565b610f333361163f565b610f4f5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b2290612954565b610fc5612710610fbf83600a54611b0a90919063ffffffff16565b90611b8c565b600b5550565b6000546001600160a01b03163314610ff55760405162461bcd60e51b8152600401610b2290612954565b611010612710610fbf83600a54611b0a90919063ffffffff16565b600d5550565b61101f3361163f565b61103b5760405162461bcd60e51b8152600401610b2290612974565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050565b6110a63361163f565b6110c25760405162461bcd60e51b8152600401610b2290612974565b620b71b081106110d157600080fd5b602855565b6110df3361163f565b6110fb5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c3d338484611697565b6000546001600160a01b0316331461117f5760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146111d05760405162461bcd60e51b8152600401610b2290612954565b6019859055601a849055601b839055601c8290556111f482610eba85818989611aab565b601d5560235550505050565b6000610af261120d610cb3565b602c546001600160a01b03166000908152600e6020526040902054610fbf90611237906002611b0a565b8590611b0a565b6112473361163f565b6112635760405162461bcd60e51b8152600401610b2290612974565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b6112ab3361163f565b6112c75760405162461bcd60e51b8152600401610b2290612974565b602e805461ff00191661010084151502179055600a54612710906112ec9083906129c8565b6112f691906129df565b6024555050565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610b2290612954565b611342612710610fbf83600a54611b0a90919063ffffffff16565b600c5550565b6000546001600160a01b031633146113725760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160205260409020805460ff19169055565b602754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461141c5760405162461bcd60e51b8152600401610b2290612954565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6114913361163f565b6114ad5760405162461bcd60e51b8152600401610b2290612974565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114e7573d6000803e3d6000fd5b5050565b6114f43361163f565b6115105760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03821630148015906115375750602c546001600160a01b03838116911614155b61154057600080fd5b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556115a657602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d5e565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d5e565b6115f83361163f565b6116145760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156116815760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e8486612a01565b95945050505050565b602e5460009062010000900460ff16156116bd576116b6848484611bce565b9050610c3d565b6001600160a01b03841660009081526001602052604090205460ff161580156116ff57506001600160a01b03831660009081526001602052604090205460ff16155b801561171957506006546001600160a01b03858116911614155b1561177057602e5460ff166117705760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b22565b602c546001600160a01b0384811691161461178a81611cb4565b611795858585611cfd565b61179f8585611eb9565b6117ab85848684611f9b565b6117b36120d3565b156117c0576117c061212d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e909152919091205461181291859061165d565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff16156118475783611851565b61185186856125e6565b6001600160a01b0386166000908152600e60205260409020549091506118779082611aab565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff1661191b576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561190857600080fd5b505af1925050508015611919575060015b505b6001600160a01b03851660009081526013602052604090205460ff166119ac576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561199957600080fd5b505af19250505080156119aa575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119e49160040190815260200190565b600060405180830381600087803b1580156119fe57600080fd5b505af1925050508015611a0f575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a5591815260200190565b60405180910390a350600195945050505050565b6000610c3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061165d565b600080611ab88385612a14565b905083811015610c3d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b22565b600082600003611b1c57506000610af2565b6000611b2883856129c8565b905082611b3585836129df565b14610c3d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b22565b6000610c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061268c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611c1f91849061165d565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c4e9083611aab565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ca29086815260200190565b60405180910390a35060019392505050565b8015611cdb57601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d3f57506001600160a01b03831660009081526011602052604090205460ff16155b8015611d6457506001600160a01b03821660009081526011602052604090205460ff16155b8015611d7e57506000546001600160a01b03838116911614155b8015611d9357506001600160a01b0382163014155b8015611dad57506004546001600160a01b03838116911614155b8015611dc75750602c546001600160a01b03838116911614155b8015611de157506008546001600160a01b03838116911614155b8015611dfb57506007546001600160a01b03838116911614155b8015611e1557506009546001600160a01b03838116911614155b15611eb4576001600160a01b0382166000908152600e6020526040902054600d54611e408383612a14565b11156113ec5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b22565b505050565b602c546001600160a01b038381169116148015611ed8575060295460ff165b8015611efd57506001600160a01b03811660009081526012602052604090205460ff16155b156114e7576001600160a01b0381166000908152602a60205260409020544211611f695760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b22565b602954611f7e90610100900460ff1642612a14565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b038381169116146113ec57801561204757600c5483111580611fdf57506001600160a01b03841660009081526011602052604090205460ff165b8061200257506001600160a01b03821660009081526011602052604090205460ff165b6120425760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b6113ec565b600b548311158061207057506001600160a01b03841660009081526011602052604090205460ff165b8061209357506001600160a01b03821660009081526011602052604090205460ff165b6113ec5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b602c546000906001600160a01b031633148015906120fa5750602e5462010000900460ff16155b801561210d5750602e54610100900460ff165b8015610d00575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161215091610b3e565b61215c57601e5461215f565b60005b905060006121836002610fbf602254610fbf86602454611b0a90919063ffffffff16565b9050600061219c82602454611a6990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121d6576121d6612a27565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061220757612207612a27565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac94790612251908690600090879030904290600401612a3d565b600060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b5050505060006122988247611a6990919063ffffffff16565b905060006122b36122aa886002611b8c565b60225490611a69565b905060006122c86002610fbf8481878d611b0a565b905060006122e583610fbf60205487611b0a90919063ffffffff16565b9050600061230284610fbf60215488611b0a90919063ffffffff16565b9050600061231f85610fbf601f5489611b0a90919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561237157600080fd5b505af193505050508015612383575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146123d6576040519150601f19603f3d011682016040523d82523d6000602084013e6123db565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612434576040519150601f19603f3d011682016040523d82523d6000602084013e612439565b606091505b505090508161249b5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b22565b806124f35760405162461bcd60e51b815260206004820152602260248201527f74746d2072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610b22565b8b156125cb57602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612569573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258e9190612aae565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b600080612604602354610fbf60225486611b0a90919063ffffffff16565b306000908152600e60205260409020549091506126219082611aab565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126729085815260200190565b60405180910390a36126848382611a69565b949350505050565b600081836126ad5760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e84866129df565b600060208083528351808285015260005b818110156126e7578581018301518582016040015282016126cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cfa57600080fd5b6000806040838503121561273057600080fd5b823561273b81612708565b946020939093013593505050565b8035801515811461275957600080fd5b919050565b60006020828403121561277057600080fd5b610c3d82612749565b6000806040838503121561278c57600080fd5b50508035926020909101359150565b6000806000606084860312156127b057600080fd5b83356127bb81612708565b925060208401356127cb81612708565b929592945050506040919091013590565b6000602082840312156127ee57600080fd5b8135610c3d81612708565b6000806040838503121561280c57600080fd5b61281583612749565b9150602083013560ff8116811461282b57600080fd5b809150509250929050565b600080600080600060a0868803121561284e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561288457600080fd5b823561288f81612708565b915061289d60208401612749565b90509250929050565b6000602082840312156128b857600080fd5b5035919050565b6000806000606084860312156128d457600080fd5b83356128df81612708565b925060208401356128ef81612708565b915060408401356128ff81612708565b809150509250925092565b6000806040838503121561291d57600080fd5b823561292881612708565b9150602083013561282b81612708565b6000806040838503121561294b57600080fd5b61273b83612749565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6000602082840312156129ab57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610af257610af26129b2565b6000826129fc57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610af257610af26129b2565b80820180821115610af257610af26129b2565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a8d5784516001600160a01b031683529383019391830191600101612a68565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ac357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f490c9f3edcf94cc26d3e39dc98eb5c923dd54bf3bb17c5e1ddedb8be17b8d164736f6c634300081100336080604052600180546001600160a01b031990811673912ce59144191c1204e64559fe8253a0e49e654817909155600280549091167382af49447d8a07e3bd95bd0d56f35241523fbab11790556ec097ce7bc90715b34b9f1000000000600c55610e10600d5564e8d4a51000600e5534801561007a57600080fd5b506040516110d03803806110d0833981016040819052610099916100f3565b6001600160a01b0381166100c157731b02da8cb0d097eb8d57a175b88c7d8b479975066100c3565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610123565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b610f9e806101326000396000f3fe6080604052600436106100f35760003560e01c80638aee81271161008a578063e2d2e21911610059578063e2d2e2191461029c578063efca2eed146102b2578063ffb2c479146102c8578063ffd49c84146102e857600080fd5b80638aee812714610207578063997664d714610227578063ce7c2ac21461023d578063d0e30db01461029457600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634fab0ae8146101b957806364a285fd146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610d37565b6102fe565b005b34801561014f57600080fd5b5061014161015e366004610d63565b610476565b34801561016f57600080fd5b5061010e61017e366004610d63565b610499565b34801561018f57600080fd5b5061014161019e366004610d80565b610524565b3480156101af57600080fd5b5061010e60085481565b3480156101c557600080fd5b5061010e600e5481565b3480156101db57600080fd5b506001546101ef906001600160a01b031681565b6040516001600160a01b039091168152602001610118565b34801561021357600080fd5b50610141610222366004610d63565b610546565b34801561023357600080fd5b5061010e60095481565b34801561024957600080fd5b50610279610258366004610d63565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b61014161057f565b3480156102a857600080fd5b5061010e600b5481565b3480156102be57600080fd5b5061010e600a5481565b3480156102d457600080fd5b506101416102e3366004610da2565b6107ae565b3480156102f457600080fd5b5061010e600d5481565b6000546001600160a01b0316331461031557600080fd5b6001600160a01b0382166000908152600760205260409020541561033c5761033c826108b2565b60008111801561036257506001600160a01b038216600090815260076020526040902054155b156103c857600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103fb565b801580156103ed57506001600160a01b03821660009081526007602052604090205415155b156103fb576103fb826109d0565b6001600160a01b03821660009081526007602052604090205460085461042c91839161042691610ae5565b90610b30565b6008556001600160a01b038216600090815260076020526040902081905561045381610b94565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461048d57600080fd5b610496816108b2565b50565b6001600160a01b03811660009081526007602052604081205481036104c057506000919050565b6001600160a01b0382166000908152600760205260408120546104e290610b94565b6001600160a01b038416600090815260076020526040902060010154909150808211610512575060009392505050565b61051c8282610ae5565b949350505050565b6000546001600160a01b0316331461053b57600080fd5b600d91909155600e55565b6000546001600160a01b0316331461055d57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461059657600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156105df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106039190610dbb565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061064957610649610dd4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061067957610679610dd4565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906106bf90600090869030904290600401610dea565b6000604051808303818588803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061076c93508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107669190610dbb565b90610ae5565b60095490915061077c9082610b30565b600955600854600c546107a69161079d916107979085610bb1565b90610c33565b600b5490610b30565b600b55505050565b6000546001600160a01b031633146107c557600080fd5b60045460008190036107d5575050565b6000805a905060005b84831080156107ec57508381105b156108ab5783600f5410610800576000600f555b6108326004600f548154811061081857610818610dd4565b6000918252602090912001546001600160a01b0316610c75565b15610869576108696004600f548154811061084f5761084f610dd4565b6000918252602090912001546001600160a01b03166108b2565b61087e6108775a8490610ae5565b8490610b30565b92505a600f8054919350600061089383610e6a565b919050555080806108a390610e6a565b9150506107de565b5050505050565b6001600160a01b03811660009081526007602052604081205490036108d45750565b60006108df82610499565b905080156109cc57600a546108f49082610b30565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af115801561094a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096e9190610e83565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109a29082610b30565b6001600160a01b038316600090815260076020526040902060028101919091555461045390610b94565b5050565b600480546109e090600190610ea5565b815481106109f0576109f0610dd4565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a2e57610a2e610dd4565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a7a90600190610ea5565b81548110610a8a57610a8a610dd4565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610ac057610ac0610eb8565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610cba565b90505b92915050565b600080610b3d8385610ece565b905083811015610b275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610b2a600c54610797600b5485610bb190919063ffffffff16565b600082600003610bc357506000610b2a565b6000610bcf8385610ee1565b905082610bdc8583610ef8565b14610b275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b8b565b6000610b2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cf4565b600d546001600160a01b03821660009081526006602052604081205490914291610c9f9190610ece565b108015610b2a5750600e54610cb383610499565b1192915050565b60008184841115610cde5760405162461bcd60e51b8152600401610b8b9190610f1a565b506000610ceb8486610ea5565b95945050505050565b60008183610d155760405162461bcd60e51b8152600401610b8b9190610f1a565b506000610ceb8486610ef8565b6001600160a01b038116811461049657600080fd5b60008060408385031215610d4a57600080fd5b8235610d5581610d22565b946020939093013593505050565b600060208284031215610d7557600080fd5b8135610b2781610d22565b60008060408385031215610d9357600080fd5b50508035926020909101359150565b600060208284031215610db457600080fd5b5035919050565b600060208284031215610dcd57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610e345784516001600160a01b031683529383019391830191600101610e0f565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610e7c57610e7c610e54565b5060010190565b600060208284031215610e9557600080fd5b81518015158114610b2757600080fd5b81810381811115610b2a57610b2a610e54565b634e487b7160e01b600052603160045260246000fd5b80820180821115610b2a57610b2a610e54565b8082028115828204841417610b2a57610b2a610e54565b600082610f1557634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610f4757858101830151858201604001528201610f2b565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220d9ac963b644cdfdd0c752782590471da9afc5a7f5d6fff8a37fed82160ca378d64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806382bf293c116101c6578063d7c01032116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a11578063f887ea4014610a31578063fe9fbb8014610a51578063ffb54a9914610a7157600080fd5b8063f2fde38b146109bc578063f4293890146109dc578063f708a64f146109f157600080fd5b8063df4a76c5116100d1578063df4a76c514610947578063e96fada214610967578063f0b37c0414610987578063f0fc6bca146109a757600080fd5b8063d7c01032146108c1578063dd62ed3e146108e1578063df20fd491461092757600080fd5b8063a9059cbb11610164578063c1cf53c41161013e578063c1cf53c41461084b578063ca33e64c1461086b578063cf4be3941461088b578063d51ed1c8146108a157600080fd5b8063a9059cbb146107f5578063b6a5d7de14610815578063bf56b3711461083557600080fd5b806395d89b41116101a057806395d89b41146107665780639d1944f514610795578063a6b06a27146107b5578063a8aa1b31146107d557600080fd5b806382bf293c14610708578063893d20e8146107285780638aee81271461074657600080fd5b8063313ce567116102a0578063658d4b7f1161023e57806370d6948b1161021857806370d6948b1461067b578063722b62ad146106b357806378109e54146106d25780637affa29b146106e857600080fd5b8063658d4b7f146106065780636ddd17131461062657806370a082311461064557600080fd5b806347a28b791161027a57806347a28b791461058c57806350db71fb146105ac578063571ac8b0146105cc578063617fe0ed146105ec57600080fd5b8063313ce56714610534578063334773271461055657806338280e6b1461056c57600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104b05780632d48e896146104c55780632d594567146104e55780632f54bf6e1461050557600080fd5b8063201e79911461045057806323b872dd1461047057806328fd31981461049057600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c95780630d295980146103f95780631161ae391461041b57806318160ddd1461043b57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5060408051808201909152600e81526d131550d25108141c9bdd1bd8dbdb60921b60208201525b60405161038091906126ba565b3480156103d557600080fd5b506103e96103e436600461271d565b610a8b565b6040519015158152602001610380565b34801561040557600080fd5b5061041961041436600461275e565b610af8565b005b34801561042757600080fd5b506103e9610436366004612779565b610b3e565b34801561044757600080fd5b50600a54610376565b34801561045c57600080fd5b5061041961046b366004612779565b610b52565b34801561047c57600080fd5b506103e961048b36600461279b565b610b82565b34801561049c57600080fd5b506103766104ab3660046127dc565b610c44565b3480156104bc57600080fd5b50610376610cb3565b3480156104d157600080fd5b506104196104e0366004612779565b610d05565b3480156104f157600080fd5b506104196105003660046127f9565b610d94565b34801561051157600080fd5b506103e96105203660046127dc565b6000546001600160a01b0391821691161490565b34801561054057600080fd5b5060125b60405160ff9091168152602001610380565b34801561056257600080fd5b50610376600b5481565b34801561057857600080fd5b506104196105873660046127dc565b610de5565b34801561059857600080fd5b506104196105a7366004612836565b610e6c565b3480156105b857600080fd5b506104196105c7366004612871565b610ecc565b3480156105d857600080fd5b506103e96105e73660046127dc565b610f1c565b3480156105f857600080fd5b506029546103e99060ff1681565b34801561061257600080fd5b50610419610621366004612871565b610f2a565b34801561063257600080fd5b50602e546103e990610100900460ff1681565b34801561065157600080fd5b506103766106603660046127dc565b6001600160a01b03166000908152600e602052604090205490565b34801561068757600080fd5b5060095461069b906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156106bf57600080fd5b5060295461054490610100900460ff1681565b3480156106de57600080fd5b50610376600d5481565b3480156106f457600080fd5b506104196107033660046128a6565b610f7a565b34801561071457600080fd5b506104196107233660046128a6565b610fcb565b34801561073457600080fd5b506000546001600160a01b031661069b565b34801561075257600080fd5b506104196107613660046127dc565b611016565b34801561077257600080fd5b5060408051808201909152600681526509131550d25160d21b60208201526103bc565b3480156107a157600080fd5b506104196107b03660046128a6565b61109d565b3480156107c157600080fd5b506104196107d0366004612871565b6110d6565b3480156107e157600080fd5b50602c5461069b906001600160a01b031681565b34801561080157600080fd5b506103e961081036600461271d565b611148565b34801561082157600080fd5b506104196108303660046127dc565b611155565b34801561084157600080fd5b50610376602d5481565b34801561085757600080fd5b50610419610866366004612836565b6111a6565b34801561087757600080fd5b5060075461069b906001600160a01b031681565b34801561089757600080fd5b50610376600c5481565b3480156108ad57600080fd5b506103766108bc3660046128a6565b611200565b3480156108cd57600080fd5b506104196108dc3660046128bf565b61123e565b3480156108ed57600080fd5b506103766108fc36600461290a565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561093357600080fd5b50610419610942366004612938565b6112a2565b34801561095357600080fd5b506104196109623660046128a6565b6112fd565b34801561097357600080fd5b5060085461069b906001600160a01b031681565b34801561099357600080fd5b506104196109a23660046127dc565b611348565b3480156109b357600080fd5b50610419611393565b3480156109c857600080fd5b506104196109d73660046127dc565b6113f2565b3480156109e857600080fd5b50610419611488565b3480156109fd57600080fd5b50610419610a0c366004612871565b6114eb565b348015610a1d57600080fd5b50610419610a2c366004612871565b6115ef565b348015610a3d57600080fd5b50602b5461069b906001600160a01b031681565b348015610a5d57600080fd5b506103e9610a6c3660046127dc565b61163f565b348015610a7d57600080fd5b50602e546103e99060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae69086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b2b5760405162461bcd60e51b8152600401610b2290612954565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b4a83611200565b119392505050565b610b5b3361163f565b610b775760405162461bcd60e51b8152600401610b2290612974565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c2f576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610c0a91849061165d565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c3a848484611697565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af29190612999565b6005546001600160a01b03166000908152600e6020526040812054610d00906004546001600160a01b03166000908152600e6020526040902054610cfa90600a5490611a69565b90611a69565b905090565b610d0e3361163f565b610d2a5760405162461bcd60e51b8152600401610b2290612974565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b2290612954565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610dee3361163f565b610e0a5760405162461bcd60e51b8152600401610b2290612974565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b6000546001600160a01b03163314610e965760405162461bcd60e51b8152600401610b2290612954565b6014859055601584905560168390556017829055610ec082610eba85818989611aab565b90611aab565b60185560235550505050565b610ed53361163f565b610ef15760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610af282600019610a8b565b610f333361163f565b610f4f5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610b2290612954565b610fc5612710610fbf83600a54611b0a90919063ffffffff16565b90611b8c565b600b5550565b6000546001600160a01b03163314610ff55760405162461bcd60e51b8152600401610b2290612954565b611010612710610fbf83600a54611b0a90919063ffffffff16565b600d5550565b61101f3361163f565b61103b5760405162461bcd60e51b8152600401610b2290612974565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050565b6110a63361163f565b6110c25760405162461bcd60e51b8152600401610b2290612974565b620b71b081106110d157600080fd5b602855565b6110df3361163f565b6110fb5760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c3d338484611697565b6000546001600160a01b0316331461117f5760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146111d05760405162461bcd60e51b8152600401610b2290612954565b6019859055601a849055601b839055601c8290556111f482610eba85818989611aab565b601d5560235550505050565b6000610af261120d610cb3565b602c546001600160a01b03166000908152600e6020526040902054610fbf90611237906002611b0a565b8590611b0a565b6112473361163f565b6112635760405162461bcd60e51b8152600401610b2290612974565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b6112ab3361163f565b6112c75760405162461bcd60e51b8152600401610b2290612974565b602e805461ff00191661010084151502179055600a54612710906112ec9083906129c8565b6112f691906129df565b6024555050565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610b2290612954565b611342612710610fbf83600a54611b0a90919063ffffffff16565b600c5550565b6000546001600160a01b031633146113725760405162461bcd60e51b8152600401610b2290612954565b6001600160a01b03166000908152600160205260409020805460ff19169055565b602754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461141c5760405162461bcd60e51b8152600401610b2290612954565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6114913361163f565b6114ad5760405162461bcd60e51b8152600401610b2290612974565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114e7573d6000803e3d6000fd5b5050565b6114f43361163f565b6115105760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03821630148015906115375750602c546001600160a01b03838116911614155b61154057600080fd5b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556115a657602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d5e565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d5e565b6115f83361163f565b6116145760405162461bcd60e51b8152600401610b2290612974565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156116815760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e8486612a01565b95945050505050565b602e5460009062010000900460ff16156116bd576116b6848484611bce565b9050610c3d565b6001600160a01b03841660009081526001602052604090205460ff161580156116ff57506001600160a01b03831660009081526001602052604090205460ff16155b801561171957506006546001600160a01b03858116911614155b1561177057602e5460ff166117705760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b22565b602c546001600160a01b0384811691161461178a81611cb4565b611795858585611cfd565b61179f8585611eb9565b6117ab85848684611f9b565b6117b36120d3565b156117c0576117c061212d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e909152919091205461181291859061165d565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff16156118475783611851565b61185186856125e6565b6001600160a01b0386166000908152600e60205260409020549091506118779082611aab565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff1661191b576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561190857600080fd5b505af1925050508015611919575060015b505b6001600160a01b03851660009081526013602052604090205460ff166119ac576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561199957600080fd5b505af19250505080156119aa575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119e49160040190815260200190565b600060405180830381600087803b1580156119fe57600080fd5b505af1925050508015611a0f575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a5591815260200190565b60405180910390a350600195945050505050565b6000610c3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061165d565b600080611ab88385612a14565b905083811015610c3d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b22565b600082600003611b1c57506000610af2565b6000611b2883856129c8565b905082611b3585836129df565b14610c3d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b22565b6000610c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061268c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611c1f91849061165d565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c4e9083611aab565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ca29086815260200190565b60405180910390a35060019392505050565b8015611cdb57601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d3f57506001600160a01b03831660009081526011602052604090205460ff16155b8015611d6457506001600160a01b03821660009081526011602052604090205460ff16155b8015611d7e57506000546001600160a01b03838116911614155b8015611d9357506001600160a01b0382163014155b8015611dad57506004546001600160a01b03838116911614155b8015611dc75750602c546001600160a01b03838116911614155b8015611de157506008546001600160a01b03838116911614155b8015611dfb57506007546001600160a01b03838116911614155b8015611e1557506009546001600160a01b03838116911614155b15611eb4576001600160a01b0382166000908152600e6020526040902054600d54611e408383612a14565b11156113ec5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b22565b505050565b602c546001600160a01b038381169116148015611ed8575060295460ff165b8015611efd57506001600160a01b03811660009081526012602052604090205460ff16155b156114e7576001600160a01b0381166000908152602a60205260409020544211611f695760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b22565b602954611f7e90610100900460ff1642612a14565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b038381169116146113ec57801561204757600c5483111580611fdf57506001600160a01b03841660009081526011602052604090205460ff165b8061200257506001600160a01b03821660009081526011602052604090205460ff165b6120425760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b6113ec565b600b548311158061207057506001600160a01b03841660009081526011602052604090205460ff165b8061209357506001600160a01b03821660009081526011602052604090205460ff165b6113ec5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b22565b602c546000906001600160a01b031633148015906120fa5750602e5462010000900460ff16155b801561210d5750602e54610100900460ff165b8015610d00575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161215091610b3e565b61215c57601e5461215f565b60005b905060006121836002610fbf602254610fbf86602454611b0a90919063ffffffff16565b9050600061219c82602454611a6990919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121d6576121d6612a27565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061220757612207612a27565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac94790612251908690600090879030904290600401612a3d565b600060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b5050505060006122988247611a6990919063ffffffff16565b905060006122b36122aa886002611b8c565b60225490611a69565b905060006122c86002610fbf8481878d611b0a565b905060006122e583610fbf60205487611b0a90919063ffffffff16565b9050600061230284610fbf60215488611b0a90919063ffffffff16565b9050600061231f85610fbf601f5489611b0a90919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561237157600080fd5b505af193505050508015612383575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146123d6576040519150601f19603f3d011682016040523d82523d6000602084013e6123db565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612434576040519150601f19603f3d011682016040523d82523d6000602084013e612439565b606091505b505090508161249b5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b22565b806124f35760405162461bcd60e51b815260206004820152602260248201527f74746d2072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610b22565b8b156125cb57602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612569573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258e9190612aae565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b600080612604602354610fbf60225486611b0a90919063ffffffff16565b306000908152600e60205260409020549091506126219082611aab565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126729085815260200190565b60405180910390a36126848382611a69565b949350505050565b600081836126ad5760405162461bcd60e51b8152600401610b2291906126ba565b50600061168e84866129df565b600060208083528351808285015260005b818110156126e7578581018301518582016040015282016126cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cfa57600080fd5b6000806040838503121561273057600080fd5b823561273b81612708565b946020939093013593505050565b8035801515811461275957600080fd5b919050565b60006020828403121561277057600080fd5b610c3d82612749565b6000806040838503121561278c57600080fd5b50508035926020909101359150565b6000806000606084860312156127b057600080fd5b83356127bb81612708565b925060208401356127cb81612708565b929592945050506040919091013590565b6000602082840312156127ee57600080fd5b8135610c3d81612708565b6000806040838503121561280c57600080fd5b61281583612749565b9150602083013560ff8116811461282b57600080fd5b809150509250929050565b600080600080600060a0868803121561284e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561288457600080fd5b823561288f81612708565b915061289d60208401612749565b90509250929050565b6000602082840312156128b857600080fd5b5035919050565b6000806000606084860312156128d457600080fd5b83356128df81612708565b925060208401356128ef81612708565b915060408401356128ff81612708565b809150509250925092565b6000806040838503121561291d57600080fd5b823561292881612708565b9150602083013561282b81612708565b6000806040838503121561294b57600080fd5b61273b83612749565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6000602082840312156129ab57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610af257610af26129b2565b6000826129fc57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610af257610af26129b2565b80820180821115610af257610af26129b2565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a8d5784516001600160a01b031683529383019391830191600101612a68565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ac357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f490c9f3edcf94cc26d3e39dc98eb5c923dd54bf3bb17c5e1ddedb8be17b8d164736f6c63430008110033

Deployed Bytecode Sourcemap

12831:19555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14820:54;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14820:54:0;;;;;;;;17248:80;;;;;;;;;;-1:-1:-1;17320:5:0;;;;;;;;;;;;-1:-1:-1;;;17320:5:0;;;;17248:80;;;;;;;:::i;17670:216::-;;;;;;;;;;-1:-1:-1;17670:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;17670:216:0;1205:187:1;24137:94:0;;;;;;;;;;-1:-1:-1;24137:94:0;;;;;:::i;:::-;;:::i;:::-;;32158:150;;;;;;;;;;-1:-1:-1;32158:150:0;;;;;:::i;:::-;;:::i;16978:88::-;;;;;;;;;;-1:-1:-1;17051:12:0;;16978:88;;30394:183;;;;;;;;;;-1:-1:-1;30394:183:0;;;;;:::i;:::-;;:::i;18188:370::-;;;;;;;;;;-1:-1:-1;18188:370:0;;;;;:::i;:::-;;:::i;31386:146::-;;;;;;;;;;-1:-1:-1;31386:146:0;;;;;:::i;:::-;;:::i;31755:142::-;;;;;;;;;;;;;:::i;30852:183::-;;;;;;;;;;-1:-1:-1;30852:183:0;;;;;:::i;:::-;;:::i;24278:164::-;;;;;;;;;;-1:-1:-1;24278:164:0;;;;;:::i;:::-;;:::i;4228:103::-;;;;;;;;;;-1:-1:-1;4228:103:0;;;;;:::i;:::-;4283:4;4318:5;-1:-1:-1;;;;;4307:16:0;;;4318:5;;4307:16;;4228:103;17072:80;;;;;;;;;;-1:-1:-1;13523:2:0;17072:80;;;3227:4:1;3215:17;;;3197:36;;3185:2;3170:18;17072:80:0;3055:184:1;13638:57:0;;;;;;;;;;;;;;;;18888:283;;;;;;;;;;-1:-1:-1;18888:283:0;;;;;:::i;:::-;;:::i;28751:486::-;;;;;;;;;;-1:-1:-1;28751:486:0;;;;;:::i;:::-;;:::i;28369:130::-;;;;;;;;;;-1:-1:-1;28369:130:0;;;;;:::i;:::-;;:::i;17894:122::-;;;;;;;;;;-1:-1:-1;17894:122:0;;;;;:::i;:::-;;:::i;15181:37::-;;;;;;;;;;-1:-1:-1;15181:37:0;;;;;;;;28051:120;;;;;;;;;;-1:-1:-1;28051:120:0;;;;;:::i;:::-;;:::i;15477:30::-;;;;;;;;;;-1:-1:-1;15477:30:0;;;;;;;;;;;17418:105;;;;;;;;;;-1:-1:-1;17418:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17502:18:0;17484:7;17502:18;;;:9;:18;;;;;;;17418:105;13348:29;;;;;;;;;;-1:-1:-1;13348:29:0;;;;-1:-1:-1;;;;;13348:29:0;;;;;;-1:-1:-1;;;;;4187:32:1;;;4169:51;;4157:2;4142:18;13348:29:0;4023:203:1;15225:38:0;;;;;;;;;;-1:-1:-1;15225:38:0;;;;;;;;;;;13779:61;;;;;;;;;;;;;;;;27284:157;;;;;;;;;;-1:-1:-1;27284:157:0;;;;;:::i;:::-;;:::i;18636:156::-;;;;;;;;;;-1:-1:-1;18636:156:0;;;;;:::i;:::-;;:::i;17334:78::-;;;;;;;;;;-1:-1:-1;17386:7:0;17404:5;-1:-1:-1;;;;;17404:5:0;17334:78;;31223:108;;;;;;;;;;-1:-1:-1;31223:108:0;;;;;:::i;:::-;;:::i;17158:84::-;;;;;;;;;;-1:-1:-1;17232:7:0;;;;;;;;;;;;-1:-1:-1;;;17232:7:0;;;;17158:84;;31573:136;;;;;;;;;;-1:-1:-1;31573:136:0;;;;;:::i;:::-;;:::i;28507:209::-;;;;;;;;;;-1:-1:-1;28507:209:0;;;;;:::i;:::-;;:::i;15381:19::-;;;;;;;;;;-1:-1:-1;15381:19:0;;;;-1:-1:-1;;;;;15381:19:0;;;18024:156;;;;;;;;;;-1:-1:-1;18024:156:0;;;;;:::i;:::-;;:::i;3886:102::-;;;;;;;;;;-1:-1:-1;3886:102:0;;;;;:::i;:::-;;:::i;15407:25::-;;;;;;;;;;;;;;;;29271:506;;;;;;;;;;-1:-1:-1;29271:506:0;;;;;:::i;:::-;;:::i;13263:36::-;;;;;;;;;;-1:-1:-1;13263:36:0;;;;-1:-1:-1;;;;;13263:36:0;;;13708:58;;;;;;;;;;;;;;;;31939:167;;;;;;;;;;-1:-1:-1;31939:167:0;;;;;:::i;:::-;;:::i;29835:296::-;;;;;;;;;;-1:-1:-1;29835:296:0;;;;;:::i;:::-;;:::i;17529:133::-;;;;;;;;;;-1:-1:-1;17529:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17631:19:0;;;17613:7;17631:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17529:133;30177:180;;;;;;;;;;-1:-1:-1;30177:180:0;;;;;:::i;:::-;;:::i;27474:161::-;;;;;;;;;;-1:-1:-1;27474:161:0;;;;;:::i;:::-;;:::i;13306:35::-;;;;;;;;;;-1:-1:-1;13306:35:0;;;;-1:-1:-1;;;;;13306:35:0;;;4063:105;;;;;;;;;;-1:-1:-1;4063:105:0;;;;;:::i;:::-;;:::i;31087:90::-;;;;;;;;;;;;;:::i;4635:189::-;;;;;;;;;;-1:-1:-1;4635:189:0;;;;;:::i;:::-;;:::i;30616:181::-;;;;;;;;;;;;;:::i;27672:347::-;;;;;;;;;;-1:-1:-1;27672:347:0;;;;;:::i;:::-;;:::i;28206:128::-;;;;;;;;;;-1:-1:-1;28206:128:0;;;;;:::i;:::-;;:::i;15350:24::-;;;;;;;;;;-1:-1:-1;15350:24:0;;;;-1:-1:-1;;;;;15350:24:0;;;4401:115;;;;;;;;;;-1:-1:-1;4401:115:0;;;;;:::i;:::-;;:::i;15439:31::-;;;;;;;;;;-1:-1:-1;15439:31:0;;;;;;;;17670:216;17774:10;17745:4;17762:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17762:32:0;;;;;;;;;;:41;;;17819:37;17745:4;;17762:32;;17819:37;;;;17797:6;160:25:1;;148:2;133:18;;14:177;17819:37:0;;;;;;;;-1:-1:-1;17874:4:0;17670:216;;;;;:::o;24137:94::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;;;;;;;;;24202:11:::1;:21:::0;;-1:-1:-1;;24202:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24137:94::o;32158:150::-;32238:4;32294:6;32262:29;32282:8;32262:19;:29::i;:::-;:38;;32158:150;-1:-1:-1;;;32158:150:0:o;30394:183::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30492:15:::1;:25:::0;;;;30528:26:::1;:41:::0;30394:183::o;18188:370::-;-1:-1:-1;;;;;18308:19:0;;18288:4;18308:19;;;:11;:19;;;;;;;;18328:10;18308:31;;;;;;;;-1:-1:-1;;18308:52:0;18305:186;;18410:69;;;;;;;;;;;-1:-1:-1;;;18410:69:0;;;;;;;;-1:-1:-1;;;;;18410:19:0;;-1:-1:-1;18410:19:0;;;:11;:19;;;;;18430:10;18410:31;;;;;;;;;;:69;;18446:6;;18410:35;:69::i;:::-;-1:-1:-1;;;;;18376:19:0;;;;;;:11;:19;;;;;;;;18396:10;18376:31;;;;;;;:103;18305:186;18510:40;18524:6;18532:9;18543:6;18510:13;:40::i;:::-;18503:47;;18188:370;;;;;;:::o;31386:146::-;31482:11;;:42;;-1:-1:-1;;;31482:42:0;;-1:-1:-1;;;;;4187:32:1;;;31482:42:0;;;4169:51:1;31455:7:0;;31482:11;;:29;;4142:18:1;;31482:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31755:142::-;31883:4;;-1:-1:-1;;;;;31883:4:0;31808:7;17502:18;;;:9;:18;;;;;;31835:54;;31862:4;;-1:-1:-1;;;;;31862:4:0;17484:7;17502:18;;;:9;:18;;;;;;31835:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;31828:61;;31755:142;:::o;30852:183::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30962:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;30962:65:0;;::::1;::::0;::::1;7385:25:1::0;;;7426:18;;;7419:34;;;-1:-1:-1;;;;;30962:11:0;;::::1;::::0;:35:::1;::::0;7358:18:1;;30962:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30852:183:::0;;:::o;24278:164::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;24362:18:::1;:28:::0;;-1:-1:-1;;24401:33:0;24362:28;::::1;;-1:-1:-1::0;;24401:33:0;;;;;24362:28:::1;;24401:33:::0;;;::::1;::::0;;;::::1;;::::0;;24278:164::o;18888:283::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;18974:16:::1;:36:::0;;-1:-1:-1;;;;;18974:36:0;;::::1;-1:-1:-1::0;;;;;;18974:36:0;;::::1;::::0;::::1;::::0;;:16:::1;19021:30:::0;;;:11:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;19021:37:0;;::::1;18974:36:::0;19021:37;;::::1;::::0;;;19069:15:::1;:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;19121:16:::1;:35:::0;;;;;:42;;;;::::1;::::0;;::::1;::::0;;18888:283::o;28751:486::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;28925:15:::1;:34:::0;;;28970:9:::1;:22:::0;;;29003:16:::1;:36:::0;;;29050:15:::1;:34:::0;;;29109:77:::1;29068:16:::0;29109:55:::1;29022:17:::0;29109:55;28943:16;28982:10;29109:20:::1;:32::i;:::-;:36:::0;::::1;:55::i;:77::-;29095:11;:91:::0;29197:14:::1;:32:::0;-1:-1:-1;;;;28751:486:0:o;28369:130::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28458:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;28458:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28369:130::o;17894:122::-;17949:4;17973:35;17981:7;-1:-1:-1;;17973:7:0;:35::i;28051:120::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28135:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28135:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28051:120::o;27284:157::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;27389:44:::1;27427:5;27389:33;27406:15;27389:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;27371:15;:62:::0;-1:-1:-1;27284:157:0:o;18636:156::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;18739:43:::1;18776:5;18739:32;18756:14;18739:12;;:16;;:32;;;;:::i;:43::-;18721:15;:61:::0;-1:-1:-1;18636:156:0:o;31223:108::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;31291:11:::1;::::0;:32:::1;::::0;-1:-1:-1;;;31291:32:0;;-1:-1:-1;;;;;4187:32:1;;;31291::0::1;::::0;::::1;4169:51:1::0;31291:11:0;;::::1;::::0;:26:::1;::::0;4142:18:1;;31291:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31223:108:::0;:::o;31573:136::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;31663:6:::1;31657:3;:12;31649:21;;;::::0;::::1;;31681:14;:20:::0;31573:136::o;28507:209::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28593:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;28593:32:0;;::::1;::::0;::::1;::::0;;;28636:11:::1;:19:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;28675:16:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;28507:209::o;18024:156::-;18104:4;18128:44;18142:10;18154:9;18165:6;18128:13;:44::i;3886:102::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3950:23:0::1;;::::0;;;3976:4:::1;3950:23;::::0;;;;;;;:30;;-1:-1:-1;;3950:30:0::1;::::0;;::::1;::::0;;3886:102::o;29271:506::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;29450:16:::1;:36:::0;;;29497:10:::1;:24:::0;;;29532:17:::1;:38:::0;;;29581:16:::1;:36:::0;;;29645:81:::1;29600:17:::0;29645:58:::1;29552:18:::0;29645:58;29469:17;29510:11;29645:21:::1;:34::i;:81::-;29630:12;:96:::0;29737:14:::1;:32:::0;-1:-1:-1;;;;29271:506:0:o;31939:167::-;32007:7;32034:64;32075:22;:20;:22::i;:::-;32057:4;;-1:-1:-1;;;;;32057:4:0;17484:7;17502:18;;;:9;:18;;;;;;32034:36;;32047:22;;32067:1;32047:19;:22::i;:::-;32034:8;;:12;:36::i;29835:296::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;29979:21:::1;:46:::0;;-1:-1:-1;;;;;29979:46:0;;::::1;-1:-1:-1::0;;;;;;29979:46:0;;::::1;;::::0;;;30036:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30091:14:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;29835:296::o;30177:180::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30269:11:::1;:22:::0;;-1:-1:-1;;30269:22:0::1;;::::0;::::1;;;;::::0;;30318:12:::1;::::0;30343:5:::1;::::0;30318:22:::1;::::0;30333:7;;30318:22:::1;:::i;:::-;:30;;;;:::i;:::-;30302:13;:46:::0;-1:-1:-1;;30177:180:0:o;27474:161::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;27582:45:::1;27621:5;27582:34;27599:16;27582:12;;:16;;:34;;;;:::i;:45::-;27563:16;:64:::0;-1:-1:-1;27474:161:0:o;4063:105::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4129:23:0::1;4155:5;4129:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;4129:31:0::1;::::0;;4063:105::o;31087:90::-;31132:11;;:37;;-1:-1:-1;;;31132:37:0;;31158:10;31132:37;;;4169:51:1;-1:-1:-1;;;;;31132:11:0;;;;:25;;4142:18:1;;31132:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31087:90::o;4635:189::-;4283:4;4318:5;-1:-1:-1;;;;;4318:5:0;3610:10;4307:16;3594:38;;;;-1:-1:-1;;;3594:38:0;;;;;;;:::i;:::-;4715:5:::1;:15:::0;;-1:-1:-1;;;;;;4715:15:0::1;-1:-1:-1::0;;;;;4715:15:0;::::1;::::0;;::::1;::::0;;4741:23;;;-1:-1:-1;4741:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;4741:30:0::1;::::0;;::::1;::::0;;;4787:29;;4169:51:1;;;4787:29:0::1;::::0;4142:18:1;4787:29:0::1;;;;;;;4635:189:::0;:::o;30616:181::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;30738:21:::1;::::0;30730:59:::1;::::0;30698:21:::1;::::0;-1:-1:-1;;;;;30738:21:0::1;::::0;30730:59;::::1;;;::::0;30698:21;;30669:26:::1;30730:59:::0;30669:26;30730:59;30698:21;30738;30730:59;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30658:139;30616:181::o:0;27672:347::-;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27769:23:0;::::1;27787:4;27769:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;27806:4:0::1;::::0;-1:-1:-1;;;;;27796:14:0;;::::1;27806:4:::0;::::1;27796:14;;27769:41;27761:50;;;::::0;::::1;;-1:-1:-1::0;;;;;27822:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;27822:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27866:146:::1;;27891:11;::::0;:31:::1;::::0;-1:-1:-1;;;27891:31:0;;-1:-1:-1;;;;;8629:32:1;;;27891:31:0::1;::::0;::::1;8611:51:1::0;27891:11:0::1;8678:18:1::0;;;8671:34;27891:11:0;;::::1;::::0;:20:::1;::::0;8584:18:1;;27891:31:0::1;8429:282:1::0;27866:146:0::1;27953:11;::::0;-1:-1:-1;;;;;27982:17:0;;::::1;27953:11;27982:17:::0;;;:9:::1;:17;::::0;;;;;;;27953:47;;-1:-1:-1;;;27953:47:0;;::::1;::::0;::::1;8611:51:1::0;;;;8678:18;;;8671:34;27953:11:0;::::1;::::0;:20:::1;::::0;8584:18:1;;27953:47:0::1;8429:282:1::0;28206:128:0;3771:24;3784:10;3771:12;:24::i;:::-;3763:48;;;;-1:-1:-1;;;3763:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28294:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;28294:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28206:128::o;4401:115::-;-1:-1:-1;;;;;4485:23:0;4461:4;4485:23;;;:14;:23;;;;;;;;;4401:115::o;1288:192::-;1374:7;1410:12;1402:6;;;;1394:29;;;;-1:-1:-1;;;1394:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1434:9:0;1446:5;1450:1;1446;:5;:::i;:::-;1434:17;1288:192;-1:-1:-1;;;;;1288:192:0:o;19210:1609::-;19322:6;;19302:4;;19322:6;;;;;19319:63;;;19338:41;19353:6;19361:9;19372:6;19338:14;:41::i;:::-;19331:48;;;;19319:63;-1:-1:-1;;;;;19438:22:0;;;;;;:14;:22;;;;;;;;19437:23;:53;;;;-1:-1:-1;;;;;;19465:25:0;;;;;;:14;:25;;;;;;;;19464:26;19437:53;:83;;;;-1:-1:-1;19494:16:0;;-1:-1:-1;;;;;19494:26:0;;;:16;;:26;;19437:83;19434:160;;;19544:11;;;;19536:46;;;;-1:-1:-1;;;19536:46:0;;9330:2:1;19536:46:0;;;9312:21:1;9369:2;9349:18;;;9342:30;9408:25;9388:18;;;9381:53;9451:18;;19536:46:0;9128:347:1;19536:46:0;19672:4;;-1:-1:-1;;;;;19659:17:0;;;19672:4;;19659:17;19723:22;19659:17;19723:14;:22::i;:::-;19787:41;19802:6;19810:9;19821:6;19787:14;:41::i;:::-;19869:35;19886:6;19894:9;19869:16;:35::i;:::-;19942:47;19955:6;19963;19971:9;19982:6;19942:12;:47::i;:::-;20052:16;:14;:16::i;:::-;20049:35;;;20071:10;:8;:10::i;:::-;20143:53;;;;;;;;;;;-1:-1:-1;;;20143:53:0;;;;;;;;-1:-1:-1;;;;;20143:17:0;;-1:-1:-1;20143:17:0;;;:9;:17;;;;;;;;:53;;20165:6;;20143:21;:53::i;:::-;-1:-1:-1;;;;;20123:17:0;;;;;;:9;:17;;;;;;;;:73;;;;23460:11;:19;;;;;;;;23459:20;20234:56;;20284:6;20234:56;;;20258:23;20266:6;20274;20258:7;:23::i;:::-;-1:-1:-1;;;;;20324:20:0;;;;;;:9;:20;;;;;;20209:81;;-1:-1:-1;20324:40:0;;20209:81;20324:24;:40::i;:::-;-1:-1:-1;;;;;20301:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20410:24;;;;;:16;:24;;;;;;;20406:119;;20455:11;;-1:-1:-1;;;;;20484:17:0;;;20455:11;20484:17;;;:9;:17;;;;;;;;20455:47;;-1:-1:-1;;;20455:47:0;;;;;8611:51:1;;;;8678:18;;;8671:34;20455:11:0;;;:20;;8584:18:1;;20455:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20451:63;;-1:-1:-1;;;;;20541:27:0;;;;;;:16;:27;;;;;;;;20537:129;;20589:11;;-1:-1:-1;;;;;20621:20:0;;;20589:11;20621:20;;;:9;:20;;;;;;;;20589:53;;-1:-1:-1;;;20589:53:0;;;;;8611:51:1;;;;8678:18;;;8671:34;20589:11:0;;;:20;;8584:18:1;;20589:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20585:69;;20682:11;;20702:14;;20682:35;;-1:-1:-1;;;;;;20682:35:0;;-1:-1:-1;;;;;20682:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;20682:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20678:51;20763:9;-1:-1:-1;;;;;20746:43:0;20755:6;-1:-1:-1;;;;;20746:43:0;;20774:14;20746:43;;;;160:25:1;;148:2;133:18;;14:177;20746:43:0;;;;;;;;-1:-1:-1;20807:4:0;;19210:1609;-1:-1:-1;;;;;19210:1609:0:o;1146:136::-;1204:7;1231:43;1235:1;1238;1231:43;;;;;;;;;;;;;;;;;:3;:43::i;959:181::-;1017:7;;1049:5;1053:1;1049;:5;:::i;:::-;1037:17;;1078:1;1073;:6;;1065:46;;;;-1:-1:-1;;;1065:46:0;;9812:2:1;1065:46:0;;;9794:21:1;9851:2;9831:18;;;9824:30;9890:29;9870:18;;;9863:57;9937:18;;1065:46:0;9610:351:1;1486:250:0;1544:7;1568:1;1573;1568:6;1564:47;;-1:-1:-1;1598:1:0;1591:8;;1564:47;1623:9;1635:5;1639:1;1635;:5;:::i;:::-;1623:17;-1:-1:-1;1668:1:0;1659:5;1663:1;1623:17;1659:5;:::i;:::-;:10;1651:56;;;;-1:-1:-1;;;1651:56:0;;10168:2:1;1651:56:0;;;10150:21:1;10207:2;10187:18;;;10180:30;10246:34;10226:18;;;10219:62;-1:-1:-1;;;10297:18:1;;;10290:31;10338:19;;1651:56:0;9966:397:1;1742:132:0;1800:7;1827:39;1831:1;1834;1827:39;;;;;;;;;;;;;;;;;:3;:39::i;20856:330::-;20986:53;;;;;;;;;;;-1:-1:-1;;;20986:53:0;;;;;;;;-1:-1:-1;;;;;20986:17:0;;20949:4;20986:17;;;:9;:17;;;;;;;:53;;21008:6;;20986:21;:53::i;:::-;-1:-1:-1;;;;;20966:17:0;;;;;;;:9;:17;;;;;;:73;;;;21073:20;;;;;;;:32;;21098:6;21073:24;:32::i;:::-;-1:-1:-1;;;;;21050:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21121:35;;;;;;;;;;21149:6;160:25:1;;148:2;133:18;;14:177;21121:35:0;;;;;;;;-1:-1:-1;21174:4:0;20856:330;;;;;:::o;21245:523::-;21305:6;21302:459;;;21342:16;;21327:12;:31;21382:10;;21373:6;:19;21423:17;;21407:13;:33;21470:16;;21455:12;:31;21512:12;;21501:8;:23;21245:523;:::o;21302:459::-;21572:15;;21557:12;:30;21611:9;;21602:6;:18;21651:16;;21635:13;:32;21697:15;;21682:12;:30;21738:11;;21727:8;:22;21302:459;21245:523;:::o;22723:601::-;-1:-1:-1;;;;;22828:22:0;;;;;;:14;:22;;;;;;;;22827:23;:51;;;;-1:-1:-1;;;;;;22855:23:0;;;;;;:15;:23;;;;;;;;22854:24;22827:51;:82;;;;-1:-1:-1;;;;;;22883:26:0;;;;;;:15;:26;;;;;;;;22882:27;22827:82;:104;;;;-1:-1:-1;22926:5:0;;-1:-1:-1;;;;;22913:18:0;;;22926:5;;22913:18;;22827:104;:134;;;;-1:-1:-1;;;;;;22935:26:0;;22956:4;22935:26;;22827:134;:165;;;;-1:-1:-1;22987:4:0;;-1:-1:-1;;;;;22966:26:0;;;22987:4;;22966:26;;22827:165;:186;;;;-1:-1:-1;23009:4:0;;-1:-1:-1;;;;;22996:17:0;;;23009:4;;22996:17;;22827:186;:223;;;;-1:-1:-1;23030:20:0;;-1:-1:-1;;;;;23017:33:0;;;23030:20;;23017:33;;22827:223;:261;;;;-1:-1:-1;23067:21:0;;-1:-1:-1;;;;;23054:34:0;;;23067:21;;23054:34;;22827:261;:292;;;;-1:-1:-1;23105:14:0;;-1:-1:-1;;;;;23092:27:0;;;23105:14;;23092:27;;22827:292;22823:494;;;-1:-1:-1;;;;;17502:18:0;;23135;17502;;;:9;:18;;;;;;23224:15;;23200:19;23213:6;17502:18;23200:19;:::i;:::-;23199:40;;23191:114;;;;-1:-1:-1;;;23191:114:0;;10570:2:1;23191:114:0;;;10552:21:1;10609:2;10589:18;;;10582:30;10648:34;10628:18;;;10621:62;10719:32;10699:18;;;10692:60;10769:19;;23191:114:0;10368:426:1;22823:494:0;22723:601;;;:::o;22313:378::-;22408:4;;-1:-1:-1;;;;;22398:14:0;;;22408:4;;22398:14;:49;;;;-1:-1:-1;22429:18:0;;;;22398:49;:94;;;;-1:-1:-1;;;;;;22465:27:0;;;;;;:16;:27;;;;;;;;22464:28;22398:94;22394:290;;;-1:-1:-1;;;;;22517:24:0;;;;;;:13;:24;;;;;;22544:15;-1:-1:-1;22509:82:0;;;;-1:-1:-1;;;22509:82:0;;11001:2:1;22509:82:0;;;10983:21:1;11040:2;11020:18;;;11013:30;11079;11059:18;;;11052:58;11127:18;;22509:82:0;10799:352:1;22509:82:0;22651:21;;22633:39;;22651:21;;;;;22633:15;:39;:::i;:::-;-1:-1:-1;;;;;22606:24:0;;;;;;:13;:24;;;;;:66;22313:378;;:::o;21800:478::-;21928:5;;-1:-1:-1;;;;;21915:18:0;;;21928:5;;21915:18;21911:360;;21952:6;21949:311;;;21996:16;;21986:6;:26;;:53;;;-1:-1:-1;;;;;;22016:23:0;;;;;;:15;:23;;;;;;;;21986:53;:83;;;-1:-1:-1;;;;;;22043:26:0;;;;;;:15;:26;;;;;;;;21986:83;21978:113;;;;-1:-1:-1;;;21978:113:0;;11358:2:1;21978:113:0;;;11340:21:1;11397:2;11377:18;;;11370:30;-1:-1:-1;;;11416:18:1;;;11409:47;11473:18;;21978:113:0;11156:341:1;21978:113:0;21949:311;;;22150:15;;22140:6;:25;;:52;;;-1:-1:-1;;;;;;22169:23:0;;;;;;:15;:23;;;;;;;;22140:52;:82;;;-1:-1:-1;;;;;;22196:26:0;;;;;;:15;:26;;;;;;;;22140:82;22132:112;;;;-1:-1:-1;;;22132:112:0;;11358:2:1;22132:112:0;;;11340:21:1;11397:2;11377:18;;;11370:30;-1:-1:-1;;;11416:18:1;;;11409:47;11473:18;;22132:112:0;11156:341:1;23909:197:0;23996:4;;23958;;-1:-1:-1;;;;;23996:4:0;23982:10;:18;;;;:38;;-1:-1:-1;24014:6:0;;;;;;;24013:7;23982:38;:62;;;;-1:-1:-1;24033:11:0;;;;;;;23982:62;:116;;;;-1:-1:-1;;24085:13:0;;24075:4;24057:24;;;;:9;:24;;;;;;:41;;;23909:197::o;24496:2067::-;15554:6;:13;;-1:-1:-1;;15554:13:0;;;;;24591:15:::1;::::0;24608:26:::1;::::0;15554:13;;24575:60:::1;::::0;:15:::1;:60::i;:::-;:79;;24642:12;;24575:79;;;24638:1;24575:79;24545:109;;24665:23;24691:59;24748:1;24691:52;24734:8;;24691:38;24709:19;24691:13;;:17;;:38;;;;:::i;:59::-;24665:85;;24761:20;24784:34;24802:15;24784:13;;:17;;:34;;;;:::i;:::-;24855:16;::::0;;24869:1:::1;24855:16:::0;;;;;::::1;::::0;;24761:57;;-1:-1:-1;24831:21:0::1;::::0;24855:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24855:16:0::1;24831:40;;24900:4;24882;24887:1;24882:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24882:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24926:4:::1;::::0;24916:7;;24926:4;::::1;::::0;24916;;24926;;24916:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;24916:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;25001:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;25001:188:0;;24967:21:::1;::::0;25001:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;25073:12;;24943:21:::1;::::0;25116:4;;25143::::1;::::0;25163:15:::1;::::0;25001:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25200:18;25221:40;25247:13;25221:21;:25;;:40;;;;:::i;:::-;25200:61:::0;-1:-1:-1;25272:20:0::1;25295:40;25308:26;:19:::0;25332:1:::1;25308:23;:26::i;:::-;25295:8;::::0;;:12:::1;:40::i;:::-;25272:63:::0;-1:-1:-1;25346:27:0::1;25376:60;25434:1;25376:53;25272:63:::0;25376:53;:10;25391:19;25376:14:::1;:35::i;:60::-;25346:90;;25447:28;25478:47;25512:12;25478:29;25493:13;;25478:10;:14;;:29;;;;:::i;:47::-;25447:78;;25536:27;25566:46;25599:12;25566:28;25581:12;;25566:10;:14;;:28;;;;:::i;:46::-;25536:76;;25623:21;25647:40;25674:12;25647:22;25662:6;;25647:10;:14;;:22;;;;:::i;:40::-;25623:64;;25707:11;;;;;;;;;-1:-1:-1::0;;;;;25707:11:0::1;-1:-1:-1::0;;;;;25707:19:0::1;;25734:20;25707:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;25838:20:0::1;::::0;25830:78:::1;::::0;25780:21:::1;::::0;-1:-1:-1;;;;;25838:20:0::1;::::0;25898:5:::1;::::0;25872:19;;25780:21;25830:78;25780:21;25830:78;25872:19;25838:20;25898:5;25830:78:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25972:14:0::1;::::0;25964:66:::1;::::0;25779:129;;-1:-1:-1;25920:15:0::1;::::0;-1:-1:-1;;;;;25972:14:0;;::::1;::::0;26020:5:::1;::::0;26000:13;;25920:15;25964:66;25920:15;25964:66;26000:13;25972:14;26020:5;25964:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25919:111;;;26050:16;26042:69;;;::::0;-1:-1:-1;;;26042:69:0;;13163:2:1;26042:69:0::1;::::0;::::1;13145:21:1::0;13202:2;13182:18;;;13175:30;13241:34;13221:18;;;13214:62;-1:-1:-1;;;13292:18:1;;;13285:38;13340:19;;26042:69:0::1;12961:404:1::0;26042:69:0::1;26130:10;26122:57;;;::::0;-1:-1:-1;;;26122:57:0;;13572:2:1;26122:57:0::1;::::0;::::1;13554:21:1::0;13611:2;13591:18;;;13584:30;13650:34;13630:18;;;13623:62;-1:-1:-1;;;13701:18:1;;;13694:32;13743:19;;26122:57:0::1;13370:398:1::0;26122:57:0::1;26195:19:::0;;26192:364:::1;;26230:6;::::0;26405:21:::1;::::0;26230:245:::1;::::0;-1:-1:-1;;;26230:245:0;;26307:4:::1;26230:245;::::0;::::1;14114:34:1::0;14164:18;;;14157:34;;;26230:6:0::1;14207:18:1::0;;;14200:34;;;14250:18;;;14243:34;-1:-1:-1;;;;;26405:21:0;;::::1;14293:19:1::0;;;14286:44;26445:15:0::1;14346:19:1::0;;;14339:35;26230:6:0;::::1;::::0;:22:::1;::::0;26260:19;;14048::1;;26230:245:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26495:49:0::1;::::0;;7385:25:1;;;7441:2;7426:18;;7419:34;;;26495:49:0::1;::::0;-1:-1:-1;7358:18:1;26495:49:0::1;;;;;;;26192:364;-1:-1:-1::0;;15572:6:0;:14;;-1:-1:-1;;15572:14:0;;;-1:-1:-1;;;;;;;;;;;24496:2067:0:o;23529:333::-;23596:7;23616:17;23636:40;23661:14;;23636:20;23647:8;;23636:6;:10;;:20;;;;:::i;:40::-;23734:4;23716:24;;;;:9;:24;;;;;;23616:60;;-1:-1:-1;23716:39:0;;23616:60;23716:28;:39::i;:::-;23707:4;23689:24;;;;:9;:24;;;;;;;:66;;;;23771:42;;-1:-1:-1;;;;;23771:42:0;;;;;;;23803:9;160:25:1;;148:2;133:18;;14:177;23771:42:0;;;;;;;;23833:21;:6;23844:9;23833:10;:21::i;:::-;23826:28;23529:333;-1:-1:-1;;;;23529:333:0:o;1880:345::-;1966:7;2068:12;2061:5;2053:28;;;;-1:-1:-1;;;2053:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2092:9:0;2104:5;2108:1;2104;: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:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:160::-;1462:20;;1518:13;;1511:21;1501:32;;1491:60;;1547:1;1544;1537:12;1491:60;1397:160;;;:::o;1562:180::-;1618:6;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:26;1726:9;1710:26;:::i;1747:248::-;1815:6;1823;1876:2;1864:9;1855:7;1851:23;1847:32;1844:52;;;1892:1;1889;1882:12;1844:52;-1:-1:-1;;1915:23:1;;;1985:2;1970:18;;;1957:32;;-1:-1:-1;1747:248:1:o;2000:456::-;2077:6;2085;2093;2146:2;2134:9;2125:7;2121:23;2117:32;2114:52;;;2162:1;2159;2152:12;2114:52;2201:9;2188:23;2220:31;2245:5;2220:31;:::i;:::-;2270:5;-1:-1:-1;2327:2:1;2312:18;;2299:32;2340:33;2299:32;2340:33;:::i;:::-;2000:456;;2392:7;;-1:-1:-1;;;2446:2:1;2431:18;;;;2418:32;;2000:456::o;2461:247::-;2520:6;2573:2;2561:9;2552:7;2548:23;2544:32;2541:52;;;2589:1;2586;2579:12;2541:52;2628:9;2615:23;2647:31;2672:5;2647:31;:::i;2713:337::-;2776:6;2784;2837:2;2825:9;2816:7;2812:23;2808:32;2805:52;;;2853:1;2850;2843:12;2805:52;2876:26;2892:9;2876:26;:::i;:::-;2866:36;;2952:2;2941:9;2937:18;2924:32;2996:4;2989:5;2985:16;2978:5;2975:27;2965:55;;3016:1;3013;3006:12;2965:55;3039:5;3029:15;;;2713:337;;;;;:::o;3244:454::-;3339:6;3347;3355;3363;3371;3424:3;3412:9;3403:7;3399:23;3395:33;3392:53;;;3441:1;3438;3431:12;3392:53;-1:-1:-1;;3464:23:1;;;3534:2;3519:18;;3506:32;;-1:-1:-1;3585:2:1;3570:18;;3557:32;;3636:2;3621:18;;3608:32;;-1:-1:-1;3687:3:1;3672:19;3659:33;;-1:-1:-1;3244:454:1;-1:-1:-1;3244:454:1:o;3703:315::-;3768:6;3776;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3884:9;3871:23;3903:31;3928:5;3903:31;:::i;:::-;3953:5;-1:-1:-1;3977:35:1;4008:2;3993:18;;3977:35;:::i;:::-;3967:45;;3703:315;;;;;:::o;4231:180::-;4290:6;4343:2;4331:9;4322:7;4318:23;4314:32;4311:52;;;4359:1;4356;4349:12;4311:52;-1:-1:-1;4382:23:1;;4231:180;-1:-1:-1;4231:180:1:o;4682:529::-;4759:6;4767;4775;4828:2;4816:9;4807:7;4803:23;4799:32;4796:52;;;4844:1;4841;4834:12;4796:52;4883:9;4870:23;4902:31;4927:5;4902:31;:::i;:::-;4952:5;-1:-1:-1;5009:2:1;4994:18;;4981:32;5022:33;4981:32;5022:33;:::i;:::-;5074:7;-1:-1:-1;5133:2:1;5118:18;;5105:32;5146:33;5105:32;5146:33;:::i;:::-;5198:7;5188:17;;;4682:529;;;;;:::o;5216:388::-;5284:6;5292;5345:2;5333:9;5324:7;5320:23;5316:32;5313:52;;;5361:1;5358;5351:12;5313:52;5400:9;5387:23;5419:31;5444:5;5419:31;:::i;:::-;5469:5;-1:-1:-1;5526:2:1;5511:18;;5498:32;5539:33;5498:32;5539:33;:::i;5609:248::-;5674:6;5682;5735:2;5723:9;5714:7;5710:23;5706:32;5703:52;;;5751:1;5748;5741:12;5703:52;5774:26;5790:9;5774:26;:::i;6348:329::-;6550:2;6532:21;;;6589:1;6569:18;;;6562:29;-1:-1:-1;;;6622:2:1;6607:18;;6600:36;6668:2;6653:18;;6348:329::o;6682:335::-;6884:2;6866:21;;;6923:2;6903:18;;;6896:30;-1:-1:-1;;;6957:2:1;6942:18;;6935:41;7008:2;6993:18;;6682:335::o;7022:184::-;7092:6;7145:2;7133:9;7124:7;7120:23;7116:32;7113:52;;;7161:1;7158;7151:12;7113:52;-1:-1:-1;7184:16:1;;7022:184;-1:-1:-1;7022:184:1:o;7686:127::-;7747:10;7742:3;7738:20;7735:1;7728:31;7778:4;7775:1;7768:15;7802:4;7799:1;7792:15;7818:168;7891:9;;;7922;;7939:15;;;7933:22;;7919:37;7909:71;;7960:18;;:::i;7991:217::-;8031:1;8057;8047:132;;8101:10;8096:3;8092:20;8089:1;8082:31;8136:4;8133:1;8126:15;8164:4;8161:1;8154:15;8047:132;-1:-1:-1;8193:9:1;;7991:217::o;8995:128::-;9062:9;;;9083:11;;;9080:37;;;9097:18;;:::i;9480:125::-;9545:9;;;9566:10;;;9563:36;;;9579:18;;:::i;11634:127::-;11695:10;11690:3;11686:20;11683:1;11676:31;11726:4;11723:1;11716:15;11750:4;11747:1;11740:15;11766:980;12028:4;12076:3;12065:9;12061:19;12107:6;12096:9;12089:25;12133:2;12171:6;12166:2;12155:9;12151:18;12144:34;12214:3;12209:2;12198:9;12194:18;12187:31;12238:6;12273;12267:13;12304:6;12296;12289:22;12342:3;12331:9;12327:19;12320:26;;12381:2;12373:6;12369:15;12355:29;;12402:1;12412:195;12426:6;12423:1;12420:13;12412:195;;;12491:13;;-1:-1:-1;;;;;12487:39:1;12475:52;;12582:15;;;;12547:12;;;;12523:1;12441:9;12412:195;;;-1:-1:-1;;;;;;;12663:32:1;;;;12658:2;12643:18;;12636:60;-1:-1:-1;;;12727:3:1;12712:19;12705:35;12624:3;11766:980;-1:-1:-1;;;11766:980:1:o;14385:306::-;14473:6;14481;14489;14542:2;14530:9;14521:7;14517:23;14513:32;14510:52;;;14558:1;14555;14548:12;14510:52;14587:9;14581:16;14571:26;;14637:2;14626:9;14622:18;14616:25;14606:35;;14681:2;14670:9;14666:18;14660:25;14650:35;;14385:306;;;;;:::o

Swarm Source

ipfs://d9ac963b644cdfdd0c752782590471da9afc5a7f5d6fff8a37fed82160ca378d

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.