ETH Price: $3,496.25 (+4.50%)

Contract

0x760Ea31711aC14cb9Ba81aC25453C6f378fA5794
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve210020942024-10-19 20:45:5938 days ago1729370759IN
Bowl Shibarium: BOWL Token
0 ETH0.0008073917.46955168
Approve209787582024-10-16 14:35:4742 days ago1729089347IN
Bowl Shibarium: BOWL Token
0 ETH0.0011021623.71827428
Approve209573182024-10-13 14:42:1144 days ago1728830531IN
Bowl Shibarium: BOWL Token
0 ETH0.0006574914.14920606
Approve209169822024-10-07 23:30:2350 days ago1728343823IN
Bowl Shibarium: BOWL Token
0 ETH0.0034896775
Approve209169482024-10-07 23:23:3550 days ago1728343415IN
Bowl Shibarium: BOWL Token
0 ETH0.0034896775
Transfer207277052024-09-11 13:35:5977 days ago1726061759IN
Bowl Shibarium: BOWL Token
0 ETH0.00027863.32819631
Approve205241522024-08-14 3:21:59105 days ago1723605719IN
Bowl Shibarium: BOWL Token
0 ETH0.000097132.09023345
Approve205195122024-08-13 11:50:11106 days ago1723549811IN
Bowl Shibarium: BOWL Token
0 ETH0.00010082.1693571
Approve204963922024-08-10 6:22:47109 days ago1723270967IN
Bowl Shibarium: BOWL Token
0 ETH0.0005608312.14752848
Approve204177032024-07-30 6:50:35120 days ago1722322235IN
Bowl Shibarium: BOWL Token
0 ETH0.000073572.80226956
Approve204177012024-07-30 6:50:11120 days ago1722322211IN
Bowl Shibarium: BOWL Token
0 ETH0.00011952.58909407
Approve202693182024-07-09 13:45:59141 days ago1720532759IN
Bowl Shibarium: BOWL Token
0 ETH0.000411628.89256622
Approve201242632024-06-19 7:21:59161 days ago1718781719IN
Bowl Shibarium: BOWL Token
0 ETH0.000271225.83662564
Approve200002522024-06-01 23:27:23178 days ago1717284443IN
Bowl Shibarium: BOWL Token
0 ETH0.000276435.94873293
Approve199803892024-05-30 4:50:59181 days ago1717044659IN
Bowl Shibarium: BOWL Token
0 ETH0.000332087.13719749
Approve199803852024-05-30 4:50:11181 days ago1717044611IN
Bowl Shibarium: BOWL Token
0 ETH0.000352537.57669641
Approve199776412024-05-29 19:37:47181 days ago1717011467IN
Bowl Shibarium: BOWL Token
0 ETH0.0005956512.81828761
Approve199238352024-05-22 7:08:23189 days ago1716361703IN
Bowl Shibarium: BOWL Token
0 ETH0.000333647.22668432
Approve198882582024-05-17 7:38:59194 days ago1715931539IN
Bowl Shibarium: BOWL Token
0 ETH0.000326387.06009201
Approve198830662024-05-16 14:14:59195 days ago1715868899IN
Bowl Shibarium: BOWL Token
0 ETH0.000269745.80473627
Approve198651282024-05-14 1:59:35197 days ago1715651975IN
Bowl Shibarium: BOWL Token
0 ETH0.000287326.18323659
Transfer198592232024-05-13 6:12:11198 days ago1715580731IN
Bowl Shibarium: BOWL Token
0 ETH0.000301184.52067635
Approve198546662024-05-12 14:54:47198 days ago1715525687IN
Bowl Shibarium: BOWL Token
0 ETH0.000214554.6170653
Transfer198534892024-05-12 10:57:35199 days ago1715511455IN
Bowl Shibarium: BOWL Token
0 ETH0.000250373.75807551
Transfer198345142024-05-09 19:15:47201 days ago1715282147IN
Bowl Shibarium: BOWL Token
0 ETH0.000410986.16865874
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
209787692024-10-16 14:37:5941 days ago1729089479
Bowl Shibarium: BOWL Token
0.00214102 ETH
209787692024-10-16 14:37:5941 days ago1729089479
Bowl Shibarium: BOWL Token
0.00214102 ETH
209169952024-10-07 23:32:5950 days ago1728343979
Bowl Shibarium: BOWL Token
0.00206742 ETH
209169952024-10-07 23:32:5950 days ago1728343979
Bowl Shibarium: BOWL Token
0.00206742 ETH
205195222024-08-13 11:52:11106 days ago1723549931
Bowl Shibarium: BOWL Token
0.00136059 ETH
205195222024-08-13 11:52:11106 days ago1723549931
Bowl Shibarium: BOWL Token
0.00136059 ETH
204963952024-08-10 6:23:23109 days ago1723271003
Bowl Shibarium: BOWL Token
0.00359823 ETH
204963952024-08-10 6:23:23109 days ago1723271003
Bowl Shibarium: BOWL Token
0.00359823 ETH
201242632024-06-19 7:21:59161 days ago1718781719
Bowl Shibarium: BOWL Token
0.00414378 ETH
201242632024-06-19 7:21:59161 days ago1718781719
Bowl Shibarium: BOWL Token
0.00414378 ETH
199803902024-05-30 4:51:11181 days ago1717044671
Bowl Shibarium: BOWL Token
0.0257644 ETH
199803902024-05-30 4:51:11181 days ago1717044671
Bowl Shibarium: BOWL Token
0.0257644 ETH
198882622024-05-17 7:39:47194 days ago1715931587
Bowl Shibarium: BOWL Token
0.00181955 ETH
198882622024-05-17 7:39:47194 days ago1715931587
Bowl Shibarium: BOWL Token
0.00181955 ETH
198546752024-05-12 14:56:35198 days ago1715525795
Bowl Shibarium: BOWL Token
0.0019583 ETH
198546752024-05-12 14:56:35198 days ago1715525795
Bowl Shibarium: BOWL Token
0.0019583 ETH
197642262024-04-29 23:24:47211 days ago1714433087
Bowl Shibarium: BOWL Token
0.01846433 ETH
197642262024-04-29 23:24:47211 days ago1714433087
Bowl Shibarium: BOWL Token
0.01846433 ETH
196999952024-04-20 23:46:35220 days ago1713656795
Bowl Shibarium: BOWL Token
0.00237608 ETH
196999952024-04-20 23:46:35220 days ago1713656795
Bowl Shibarium: BOWL Token
0.00237608 ETH
191728272024-02-07 0:42:35294 days ago1707266555
Bowl Shibarium: BOWL Token
0.00201078 ETH
191728272024-02-07 0:42:35294 days ago1707266555
Bowl Shibarium: BOWL Token
0.00201078 ETH
191727432024-02-07 0:25:47294 days ago1707265547
Bowl Shibarium: BOWL Token
0.00479335 ETH
191727432024-02-07 0:25:47294 days ago1707265547
Bowl Shibarium: BOWL Token
0.00479335 ETH
190094772024-01-15 3:03:11317 days ago1705287791
Bowl Shibarium: BOWL Token
0.01009068 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BowlToken

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-03
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract BowlToken is IERC20, Ownable {
    using Address for address;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "BOWL SHIBARIUM";
    string constant _symbol = "BOWL";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 _maxBuyTxAmount = (_totalSupply * 1) / 50;
    uint256 _maxSellTxAmount = (_totalSupply * 1) / 50;
    uint256 _maxWalletSize = (_totalSupply * 1) / 50;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) public lastSell;
    mapping (address => uint256) public lastBuy;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public liquidityCreator;

    uint256 marketingFee = 800;
    uint256 marketingSellFee = 3000;
    uint256 liquidityFee = 200;
    uint256 liquiditySellFee = 1000;
    uint256 totalBuyFee = marketingFee + liquidityFee;
    uint256 totalSellFee = marketingSellFee + liquiditySellFee;
    uint256 feeDenominator = 10000;
    bool public transferTax = false;

    address payable public liquidityFeeReceiver = payable(0xf760f83b69188397F9115EFB783b37621b934366);
    address payable public marketingFeeReceiver = payable(0xf760f83b69188397F9115EFB783b37621b934366);

    IDEXRouter public router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => bool) liquidityPools;
    mapping (address => uint256) public protected;
    bool protectionEnabled = true;
    bool protectionDisabled = false;
    uint256 protectionLimit;
    uint256 public protectionCount;
    uint256 protectionTimer;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public deadBlocks;
    bool startBullRun = false;
    bool pauseDisabled = false;
    uint256 public rateLimit = 2;

    bool public swapEnabled = false;
    uint256 public swapThreshold = _totalSupply / 1000;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    mapping (address => bool) teamMember;
    
    modifier onlyTeam() {
        require(teamMember[_msgSender()] || msg.sender == owner(), "Caller is not a team member");
        _;
    }
    
    event ProtectedWallet(address, address, uint256, uint8);

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[owner()] = true;
        liquidityCreator[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[owner()] = _totalSupply;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function maxBuyTxTokens() external view returns (uint256) { return _maxBuyTxAmount / (10 ** _decimals); }
    function maxSellTxTokens() external view returns (uint256) { return _maxSellTxAmount / (10 ** _decimals); }
    function maxWalletTokens() external view returns (uint256) { return _maxWalletSize / (10 ** _decimals); }
    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 setTeamMember(address _team, bool _enabled) external onlyOwner {
        teamMember[_team] = _enabled;
    }
    
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint i = 0; i < addresses.length; i++) {
            if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
                _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }
    
    function clearStuckBalance(uint256 amountPercentage, address adr) external onlyTeam {
        uint256 amountETH = address(this).balance;

        if(amountETH > 0) {
            (bool sent, ) = adr.call{value: (amountETH * amountPercentage) / 100}("");
            require(sent,"Failed to transfer funds");
        }
    }
    
    function openTrading(uint256 _deadBlocks, uint256 _protection, uint256 _limit) external onlyTeam {
        require(!startBullRun && _deadBlocks < 10);
        deadBlocks = _deadBlocks;
        startBullRun = true;
        launchedAt = block.number;
        protectionTimer = block.timestamp + _protection;
        protectionLimit = _limit * (10 ** _decimals);
    }
    
    function pauseTrading() external onlyTeam {
        require(!pauseDisabled);
        startBullRun = false;
    }
    
    function disablePause() external onlyTeam {
        pauseDisabled = true;
        startBullRun = true;
    }
    
    function setProtection(bool _protect, uint256 _addTime) external onlyTeam {
        require(!protectionDisabled);
        protectionEnabled = _protect;
        require(_addTime < 1 days);
        protectionTimer += _addTime;
    }
    
    function disableProtection() external onlyTeam {
        protectionDisabled = true;
        protectionEnabled = false;
    }
    
    function protectWallet(address[] calldata _wallets, bool _protect) external onlyTeam {
        if (_protect) {
            require(protectionEnabled);
        }
        
        for (uint i = 0; i < _wallets.length; i++) {
            
            if (_protect) {
                protectionCount++;
                emit ProtectedWallet(tx.origin, _wallets[i], block.number, 2);
            }
            else {
                if (protected[_wallets[i]] != 0)
                    protectionCount--;      
            }
            protected[_wallets[i]] = _protect ? block.number : 0;
        }
    }

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "BEP20: transfer from 0x0");
        require(recipient != address(0), "BEP20: transfer to 0x0");
        require(amount > 0, "Amount must be > zero");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); launch(); }
        if(!startBullRun){ require(liquidityCreator[sender] || liquidityCreator[recipient], "Trading not open yet."); }

        checkTxLimit(sender, recipient, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) {
                checkWalletLimit(recipient, amount);
            }
        }
        
        if(protectionEnabled && protectionTimer > block.timestamp) {
            if(liquidityPools[sender] && tx.origin != recipient && protected[recipient] == 0) {
                protected[recipient] = block.number;
                protectionCount++;
                emit ProtectedWallet(tx.origin, recipient, block.number, 0);
            }
        }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = amount;

        if(shouldTakeFee(sender, recipient)) {
            amountReceived = takeFee(recipient, amount);
            if(shouldSwapBack(recipient) && amount > 0) swapBack(amount);
        }
        
        _balances[recipient] = _balances[recipient] + amountReceived;

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
        swapEnabled = true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal {
        if (isTxLimitExempt[sender] || isTxLimitExempt[recipient]) return;
        require(amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
        require(lastBuy[recipient] + rateLimit <= block.number, "Transfer rate limit exceeded.");
        
        if (protected[sender] != 0){
            require(amount <= protectionLimit * (10 ** _decimals) && lastSell[sender] == 0 && protectionTimer > block.timestamp, "Wallet protected, please contact support.");
            lastSell[sender] = block.number;
        }
        
        if (liquidityPools[recipient]) {
            lastSell[sender] = block.number;
        } else if (shouldTakeFee(sender, recipient)) {
            if (protectionEnabled && protectionTimer > block.timestamp && lastBuy[tx.origin] == block.number && protected[recipient] == 0) {
                protected[recipient] = block.number;
                emit ProtectedWallet(tx.origin, recipient, block.number, 1);
            }
            lastBuy[recipient] = block.number;
            if (tx.origin != recipient)
                lastBuy[tx.origin] = block.number;
        }
    }

    function shouldTakeFee(address sender, address recipient) public view returns (bool) {
        if(!transferTax && !liquidityPools[recipient] && !liquidityPools[sender]) return false;
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator - 1; }
        if (selling) return totalSellFee;
        return totalBuyFee;
    }

    function takeFee(address recipient, uint256 amount) internal returns (uint256) {
        bool selling = liquidityPools[recipient];
        uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;
        
        _balances[address(this)] += feeAmount;
    
        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum 
        && totalBuyFee + totalSellFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 totalFee = totalBuyFee + totalSellFee;
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        
        uint256 totalLiquidityFee = liquidityFee + liquiditySellFee;
        uint256 amountToLiquify = (amountToSwap * totalLiquidityFee / 2) / totalFee;
        amountToSwap -= amountToLiquify;

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

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

        uint256 amountETH = address(this).balance - balanceBefore;
        uint256 totalETHFee = totalFee - (totalLiquidityFee / 2);

        uint256 amountETHLiquidity = (amountETH * totalLiquidityFee / 2) / totalETHFee;
        uint256 amountETHMarketing = amountETH - amountETHLiquidity;
        
        if (amountETHMarketing > 0) {
            (bool sentMarketing, ) = marketingFeeReceiver.call{value: amountETHMarketing}("");
            if(!sentMarketing) {
                //Failed to transfer to marketing wallet
            }
        }
        
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityFeeReceiver,
                block.timestamp
            );
        }

        emit FundsDistributed(amountETHMarketing, amountETHLiquidity, amountToLiquify);
    }
    
    function addLiquidityPool(address lp, bool isPool) external onlyOwner {
        require(lp != pair, "Can't alter current liquidity pair");
        liquidityPools[lp] = isPool;
    }

    function setRateLimit(uint256 rate) external onlyOwner {
        require(rate <= 60 seconds);
        rateLimit = rate;
    }

    function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
        require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
        _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
        _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

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

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

    function setFees(uint256 _liquidityFee, uint256 _liquiditySellFee, uint256 _marketingFee, uint256 _marketingSellFee, uint256 _feeDenominator) external onlyOwner {
        require(((_liquidityFee + _liquiditySellFee) / 2) * 2 == (_liquidityFee + _liquiditySellFee), "Liquidity fee must be an even number due to rounding");
        liquidityFee = _liquidityFee;
        liquiditySellFee = _liquiditySellFee;
        marketingFee = _marketingFee;
        marketingSellFee = _marketingSellFee;
        totalBuyFee = _liquidityFee + _marketingFee;
        totalSellFee = _liquiditySellFee + _marketingSellFee;
        feeDenominator = _feeDenominator;
        require(totalBuyFee + totalSellFee <= feeDenominator / 2, "Fees too high");
        emit FeesSet(totalBuyFee, totalSellFee, feeDenominator);
    }

    function toggleTransferTax() external onlyOwner {
        transferTax = !transferTax;
    }

    function setFeeReceivers(address _liquidityFeeReceiver, address _marketingFeeReceiver) external onlyOwner {
        liquidityFeeReceiver = payable(_liquidityFeeReceiver);
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _swapMinimum) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        swapThreshold = _totalSupply / _denominator;
        swapMinimum = _swapMinimum * (10 ** _decimals);
    }

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

    event FundsDistributed(uint256 marketingETH, uint256 liquidityETH, uint256 liquidityTokens);
    event FeesSet(uint256 totalBuyFees, uint256 totalSellFees, uint256 denominator);
}

Contract Security Audit

Contract ABI

[{"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":"totalBuyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSellFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTokens","type":"uint256"}],"name":"FundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"","type":"uint8"}],"name":"ProtectedWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"},{"internalType":"address","name":"adr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disablePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityCreator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"},{"internalType":"uint256","name":"_protection","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_protect","type":"bool"}],"name":"protectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","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":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"},{"internalType":"uint256","name":"_addTime","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapMinimum","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"shouldTakeFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"toggleTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326009600a62000616565b6200004290633b9aca006200062e565b600355603260035460016200005891906200062e565b62000064919062000648565b600455603260035460016200007a91906200062e565b62000086919062000648565b600555603260035460016200009c91906200062e565b620000a8919062000648565b600655610320600e819055610bb8600f5560c860108190556103e8601155620000d1916200066b565b601255601154600f54620000e691906200066b565b6013556127106014556015805474f760f83b69188397f9115efb783b37621b934366006001600160a81b0319909116179055601680546001600160a01b031990811673f760f83b69188397f9115efb783b37621b9343661790915560188054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055601b805461ffff1990811660011790915560238054909116905560026024556025805460ff191690556003546200019b906103e89062000648565b602655612710600354620001b0919062000648565b602755348015620001c057600080fd5b50620001cc33620004b1565b601854601780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f919062000681565b6001600160a01b031663c9c65396601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d7919062000681565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a919062000681565b601f80546001600160a01b0319166001600160a01b039290921691821790556000908152601960205260408120805460ff19166001179055600019906008906200039c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601880548416835290855283822095909555308082526008855283822086548416835285528382206000199055815483168252600b85528382208054600160ff199182168117909255835485168452600d87528584208054821683179055918352600c865284832080548316821790558254841683528483208054831682179055955483168252838220805482168717905585548316825283822080549091169095179094556003548454821685526007845282852081905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620006ac565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005585781600019048211156200053c576200053c62000501565b808516156200054a57918102915b93841c93908002906200051c565b509250929050565b600082620005715750600162000610565b81620005805750600062000610565b8160018114620005995760028114620005a457620005c4565b600191505062000610565b60ff841115620005b857620005b862000501565b50506001821b62000610565b5060208310610133831016604e8410600b8410161715620005e9575081810a62000610565b620005f5838362000517565b80600019048211156200060c576200060c62000501565b0290505b92915050565b60006200062760ff84168362000560565b9392505050565b808202811582820484141762000610576200061062000501565b6000826200066657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000610576200061062000501565b6000602082840312156200069457600080fd5b81516001600160a01b03811681146200062757600080fd5b612e3580620006bc6000396000f3fe6080604052600436106103855760003560e01c806370a08231116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a9b578063f8821a6214610abb578063f887ea4014610ad1578063fabb0b4f14610af157600080fd5b8063dd62ed3e146109f5578063e96fada214610a3b578063f1f3bca314610a5b578063f2fde38b14610a7b57600080fd5b8063d0889358116100dc578063d088935814610970578063d686014214610990578063d912b2ce146109b0578063dae39f92146109c557600080fd5b8063bfa21d6a146108fe578063c1adf7bc14610923578063c287184e1461095057600080fd5b80639b02c4021161016f578063a9059cbb11610149578063a9059cbb14610893578063abe57e70146108b3578063bafe446b146108d3578063bf56b371146108e857600080fd5b80639b02c4021461083d578063a4b45c0014610853578063a8aa1b311461087357600080fd5b8063893d20e8116101ab578063893d20e8146107905780638b42507f146107c25780638da5cb5b146107f257806395d89b411461081057600080fd5b806370a082311461072b578063715018a6146107615780638124f7ac1461077657600080fd5b8063421dd7c7116102b6578063584f969a11610254578063658d4b7f11610223578063658d4b7f146106a457806367243482146106c45780636ddd1713146106e45780636f4ce428146106fe57600080fd5b8063584f969a1461064457806360bba03d1461065957806361e08e721461067957806363a803e11461068f57600080fd5b8063507139351161029057806350713935146105ce57806356a227f2146105ee578063571ac8b01461060e5780635804f1e41461062e57600080fd5b8063421dd7c71461056c57806346d7edaa14610581578063492a937b146105ae57600080fd5b8063234e949411610323578063313ce567116102fd578063313ce567146104e0578063332402f8146104fc57806334848b9a1461051c5780633f4218e01461053c57600080fd5b8063234e94941461049657806323b872dd146104ab5780632b112e49146104cb57600080fd5b8063095db78f1161035f578063095db78f1461041c578063095ea7b31461043c5780631031e36e1461046c57806318160ddd1461048157600080fd5b80630445b6671461039157806304a66b48146103ba57806306fdde03146103dc57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a760265481565b6040519081526020015b60405180910390f35b3480156103c657600080fd5b506103da6103d5366004612786565b610b07565b005b3480156103e857600080fd5b5060408051808201909152600e81526d424f574c2053484942415249554d60901b60208201525b6040516103b191906127c1565b34801561042857600080fd5b506103da610437366004612870565b610c83565b34801561044857600080fd5b5061045c6104573660046128d9565b610e36565b60405190151581526020016103b1565b34801561047857600080fd5b506103da610ea3565b34801561048d57600080fd5b506003546103a7565b3480156104a257600080fd5b506103a7610f08565b3480156104b757600080fd5b5061045c6104c6366004612905565b610f28565b3480156104d757600080fd5b506103a7610fbd565b3480156104ec57600080fd5b50604051600981526020016103b1565b34801561050857600080fd5b5061045c610517366004612946565b610ffe565b34801561052857600080fd5b506103da61053736600461297f565b6110a5565b34801561054857600080fd5b5061045c6105573660046129ab565b600b6020526000908152604090205460ff1681565b34801561057857600080fd5b506103da611146565b34801561058d57600080fd5b506103a761059c3660046129ab565b601a6020526000908152604090205481565b3480156105ba57600080fd5b506103da6105c93660046129c8565b61119b565b3480156105da57600080fd5b506103da6105e936600461297f565b611237565b3480156105fa57600080fd5b506103da6106093660046129fd565b6112b0565b34801561061a57600080fd5b5061045c6106293660046129ab565b6113b4565b34801561063a57600080fd5b506103a760215481565b34801561065057600080fd5b506103da6113c2565b34801561066557600080fd5b506103da6106743660046129c8565b611417565b34801561068557600080fd5b506103a760245481565b34801561069b57600080fd5b506103a761144a565b3480156106b057600080fd5b506103da6106bf3660046129c8565b611465565b3480156106d057600080fd5b506103da6106df366004612a22565b611498565b3480156106f057600080fd5b5060255461045c9060ff1681565b34801561070a57600080fd5b506103a76107193660046129ab565b60096020526000908152604090205481565b34801561073757600080fd5b506103a76107463660046129ab565b6001600160a01b031660009081526007602052604090205490565b34801561076d57600080fd5b506103da6115dd565b34801561078257600080fd5b5060155461045c9060ff1681565b34801561079c57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103b1565b3480156107ce57600080fd5b5061045c6107dd3660046129ab565b600c6020526000908152604090205460ff1681565b3480156107fe57600080fd5b506000546001600160a01b03166107aa565b34801561081c57600080fd5b506040805180820190915260048152631093d5d360e21b602082015261040f565b34801561084957600080fd5b506103a7601d5481565b34801561085f57600080fd5b506103da61086e366004612946565b6115f1565b34801561087f57600080fd5b50601f546107aa906001600160a01b031681565b34801561089f57600080fd5b5061045c6108ae3660046128d9565b611631565b3480156108bf57600080fd5b506103da6108ce366004612a8e565b61163e565b3480156108df57600080fd5b506103a761168d565b3480156108f457600080fd5b506103a760205481565b34801561090a57600080fd5b506015546107aa9061010090046001600160a01b031681565b34801561092f57600080fd5b506103a761093e3660046129ab565b600a6020526000908152604090205481565b34801561095c57600080fd5b506103da61096b366004612ab0565b6116a8565b34801561097c57600080fd5b506103da61098b366004612ac9565b6116c3565b34801561099c57600080fd5b506103da6109ab366004612afc565b611715565b3480156109bc57600080fd5b506103da6117a6565b3480156109d157600080fd5b5061045c6109e03660046129ab565b600d6020526000908152604090205460ff1681565b348015610a0157600080fd5b506103a7610a10366004612946565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a4757600080fd5b506016546107aa906001600160a01b031681565b348015610a6757600080fd5b506103a7610a76366004612b18565b6117c2565b348015610a8757600080fd5b506103da610a963660046129ab565b6117ff565b348015610aa757600080fd5b506103da610ab63660046129c8565b611878565b348015610ac757600080fd5b506103a760275481565b348015610add57600080fd5b506017546107aa906001600160a01b031681565b348015610afd57600080fd5b506103a760225481565b610b0f6118ab565b610b198486612b49565b6002610b258688612b49565b610b2f9190612b5c565b610b3a906002612b7e565b14610ba95760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b60648201526084015b60405180910390fd5b60108590556011849055600e839055600f829055610bc78386612b49565b601255610bd48285612b49565b6013556014819055610be7600282612b5c565b601354601254610bf79190612b49565b1115610c355760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610ba0565b60125460135460145460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b3360009081526029602052604090205460ff1680610cab57506000546001600160a01b031633145b610cc75760405162461bcd60e51b8152600401610ba090612b95565b8015610cdc57601b5460ff16610cdc57600080fd5b60005b82811015610e30578115610d6b57601d8054906000610cfd83612bcc565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610d3657610d36612be5565b9050602002016020810190610d4b91906129ab565b436002604051610d5e9493929190612bfb565b60405180910390a1610dcb565b601a6000858584818110610d8157610d81612be5565b9050602002016020810190610d9691906129ab565b6001600160a01b0316815260208101919091526040016000205415610dcb57601d8054906000610dc583612c26565b91905055505b81610dd7576000610dd9565b435b601a6000868685818110610def57610def612be5565b9050602002016020810190610e0491906129ab565b6001600160a01b0316815260208101919091526040016000205580610e2881612bcc565b915050610cdf565b50505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e919086815260200190565b60405180910390a35060015b92915050565b3360009081526029602052604090205460ff1680610ecb57506000546001600160a01b031633145b610ee75760405162461bcd60e51b8152600401610ba090612b95565b602354610100900460ff1615610efc57600080fd5b6023805460ff19169055565b6000610f166009600a612d21565b600554610f239190612b5c565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610fa8576001600160a01b0384166000908152600860209081526040808320338452909152902054610f83908390612d30565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610fb3848484611905565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610ff191612b49565b600354610f239190612d30565b60155460009060ff1615801561102d57506001600160a01b03821660009081526019602052604090205460ff16155b801561105257506001600160a01b03831660009081526019602052604090205460ff16155b1561105f57506000610e9d565b6001600160a01b0383166000908152600b602052604090205460ff16158015610fb65750506001600160a01b03166000908152600b602052604090205460ff1615919050565b3360009081526029602052604090205460ff16806110cd57506000546001600160a01b031633145b6110e95760405162461bcd60e51b8152600401610ba090612b95565b60235460ff161580156110fc5750600a83105b61110557600080fd5b60228390556023805460ff19166001179055436020556111258242612b49565b601e556111346009600a612d21565b61113e9082612b7e565b601c55505050565b3360009081526029602052604090205460ff168061116e57506000546001600160a01b031633145b61118a5760405162461bcd60e51b8152600401610ba090612b95565b601b805461ffff1916610100179055565b6111a36118ab565b601f546001600160a01b039081169083160361120c5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610ba0565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b61123f6118ab565b60008311801561124f5750600082115b801561125b5750600081115b801561126957506127108111155b61127257600080fd5b80836003546112819190612b7e565b61128b9190612b5c565b600455600354819061129e908490612b7e565b6112a89190612b5c565b600555505050565b3360009081526029602052604090205460ff16806112d857506000546001600160a01b031633145b6112f45760405162461bcd60e51b8152600401610ba090612b95565b4780156113af5760006001600160a01b03831660646113138685612b7e565b61131d9190612b5c565b604051600081818185875af1925050503d8060008114611359576040519150601f19603f3d011682016040523d82523d6000602084013e61135e565b606091505b5050905080610e305760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610ba0565b505050565b6000610e9d82600019610e36565b3360009081526029602052604090205460ff16806113ea57506000546001600160a01b031633145b6114065760405162461bcd60e51b8152600401610ba090612b95565b6023805461ffff1916610101179055565b61141f6118ab565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b60006114586009600a612d21565b600654610f239190612b5c565b61146d6118ab565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6114a06118ab565b82158015906114ae57508083145b6114b757600080fd5b3360005b848110156115d557601960008787848181106114d9576114d9612be5565b90506020020160208101906114ee91906129ab565b6001600160a01b0316815260208101919091526040016000205460ff1615801561155d5750600d600087878481811061152957611529612be5565b905060200201602081019061153e91906129ab565b6001600160a01b0316815260208101919091526040016000205460ff16155b156115c3576115c18287878481811061157857611578612be5565b905060200201602081019061158d91906129ab565b6115996009600a612d21565b8787868181106115ab576115ab612be5565b905060200201356115bc9190612b7e565b611e01565b505b806115cd81612bcc565b9150506114bb565b505050505050565b6115e56118ab565b6115ef6000611ebb565b565b6115f96118ab565b60158054610100600160a81b0319166101006001600160a01b0394851602179055601680546001600160a01b03191691909216179055565b6000610fb6338484611905565b6116466118ab565b6000821180156116565750600081115b801561166457506127108111155b61166d57600080fd5b808260035461167c9190612b7e565b6116869190612b5c565b6006555050565b600061169b6009600a612d21565b600454610f239190612b5c565b6116b06118ab565b603c8111156116be57600080fd5b602455565b6116cb6118ab565b600082116116d857600080fd5b6025805460ff19168415151790556003546116f4908390612b5c565b6026556117036009600a612d21565b61170d9082612b7e565b602755505050565b3360009081526029602052604090205460ff168061173d57506000546001600160a01b031633145b6117595760405162461bcd60e51b8152600401610ba090612b95565b601b54610100900460ff161561176e57600080fd5b601b805460ff191683151517905562015180811061178b57600080fd5b80601e600082825461179d9190612b49565b90915550505050565b6117ae6118ab565b6015805460ff19811660ff90911615179055565b6000436022546020546117d59190612b49565b106117e9576001601454610e9d9190612d30565b81156117f757505060135490565b505060125490565b6118076118ab565b6001600160a01b03811661186c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba0565b61187581611ebb565b50565b6118806118ab565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba0565b60006001600160a01b03841661195d5760405162461bcd60e51b815260206004820152601860248201527f42455032303a207472616e736665722066726f6d2030783000000000000000006044820152606401610ba0565b6001600160a01b0383166119ac5760405162461bcd60e51b8152602060048201526016602482015275042455032303a207472616e7366657220746f203078360541b6044820152606401610ba0565b600082116119f45760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610ba0565b6001600160a01b038416600090815260076020526040902054821115611a535760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610ba0565b602054158015611a7b57506001600160a01b03831660009081526019602052604090205460ff165b15611b02576001600160a01b0384166000908152600d602052604090205460ff16611ae85760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610ba0565b611b0243602055426021556025805460ff19166001179055565b60235460ff16611b8f576001600160a01b0384166000908152600d602052604090205460ff1680611b4b57506001600160a01b0383166000908152600d602052604090205460ff165b611b8f5760405162461bcd60e51b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b6044820152606401610ba0565b611b9a848484611f0b565b6001600160a01b03831660009081526019602052604090205460ff16158015611bd157506001546001600160a01b03848116911614155b15611c00576001600160a01b0383166000908152600c602052604090205460ff16611c0057611c008383612251565b601b5460ff168015611c13575042601e54115b15611cdd576001600160a01b03841660009081526019602052604090205460ff168015611c495750326001600160a01b03841614155b8015611c6b57506001600160a01b0383166000908152601a6020526040902054155b15611cdd576001600160a01b0383166000908152601a60205260408120439055601d805491611c9983612bcc565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051611cd49493929190612bfb565b60405180910390a15b60285460ff1615611cfa57611cf3848484611e01565b9050610fb6565b6001600160a01b038416600090815260076020526040902054611d1e908390612d30565b6001600160a01b03851660009081526007602052604090205581611d428585610ffe565b15611d7657611d5184846122d6565b9050611d5c84612354565b8015611d685750600083115b15611d7657611d76836123e6565b6001600160a01b038416600090815260076020526040902054611d9a908290612b49565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dee9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054611e25908390612d30565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611e55908390612b49565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ea99086815260200190565b60405180910390a35060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600c602052604090205460ff1680611f4a57506001600160a01b0382166000908152600c602052604090205460ff165b15611f5457505050565b6001600160a01b03831660009081526019602052604090205460ff16611f7c57600554611f80565b6004545b811115611fc35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ba0565b6024546001600160a01b0383166000908152600a60205260409020544391611fea91612b49565b11156120385760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722072617465206c696d69742065786365656465642e0000006044820152606401610ba0565b6001600160a01b0383166000908152601a60205260409020541561211b576120626009600a612d21565b601c5461206f9190612b7e565b811115801561209457506001600160a01b038316600090815260096020526040902054155b80156120a1575042601e54115b6120ff5760405162461bcd60e51b815260206004820152602960248201527f57616c6c65742070726f7465637465642c20706c6561736520636f6e746163746044820152681039bab83837b93a1760b91b6064820152608401610ba0565b6001600160a01b03831660009081526009602052604090204390555b6001600160a01b03821660009081526019602052604090205460ff161561215a5750506001600160a01b03166000908152600960205260409020439055565b6121648383610ffe565b156113af57601b5460ff16801561217c575042601e54115b80156121965750326000908152600a602052604090205443145b80156121b857506001600160a01b0382166000908152601a6020526040902054155b15612219576001600160a01b0382166000908152601a602052604090819020439081905590517f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea916122109132918691600190612bfb565b60405180910390a15b6001600160a01b0382166000818152600a6020526040902043905532146113af57326000908152600a60205260409020439055505050565b6006546001600160a01b038316600090815260076020526040902054819061227a908490612b49565b11156113af5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610ba0565b6001600160a01b03821660009081526019602052604081205460145460ff909116908290612303836117c2565b61230d9086612b7e565b6123179190612b5c565b3060009081526007602052604081208054929350839290919061233b908490612b49565b9091555061234b90508185612d30565b95945050505050565b3360009081526019602052604081205460ff16158015612377575060285460ff16155b8015612385575060255460ff165b80156123a957506001600160a01b03821660009081526019602052604090205460ff165b80156123c657506027543060009081526007602052604090205410155b8015610e9d575060006013546012546123df9190612b49565b1192915050565b6028805460ff1916600117905560135460125460009161240591612b49565b90506000602654831061241a5760265461241c565b825b306000908152600760205260409020549091508111156124485750306000908152600760205260409020545b600060115460105461245a9190612b49565b9050600083600261246b8486612b7e565b6124759190612b5c565b61247f9190612b5c565b905061248b8184612d30565b604080516002808252606082018352929550600092909160208301908036833701905050905030816000815181106124c5576124c5612be5565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125429190612d43565b8160018151811061255557612555612be5565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b81524792919091169063791ac9479061259f908890600090879030904290600401612d60565b600060405180830381600087803b1580156125b957600080fd5b505af11580156125cd573d6000803e3d6000fd5b50505050600081476125df9190612d30565b905060006125ee600287612b5c565b6125f89089612d30565b905060008160026126098986612b7e565b6126139190612b5c565b61261d9190612b5c565b9050600061262b8285612d30565b9050801561268a576016546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612680576040519150601f19603f3d011682016040523d82523d6000602084013e612685565b606091505b505050505b861561272e5760175460155460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af1158015612705573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061272a9190612dd1565b5050505b60408051828152602081018490529081018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506028805460ff19169055505050505050505050565b600080600080600060a0868803121561279e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156127ee578581018301518582016040015282016127d2565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261282157600080fd5b50813567ffffffffffffffff81111561283957600080fd5b6020830191508360208260051b850101111561285457600080fd5b9250929050565b8035801515811461286b57600080fd5b919050565b60008060006040848603121561288557600080fd5b833567ffffffffffffffff81111561289c57600080fd5b6128a88682870161280f565b90945092506128bb90506020850161285b565b90509250925092565b6001600160a01b038116811461187557600080fd5b600080604083850312156128ec57600080fd5b82356128f7816128c4565b946020939093013593505050565b60008060006060848603121561291a57600080fd5b8335612925816128c4565b92506020840135612935816128c4565b929592945050506040919091013590565b6000806040838503121561295957600080fd5b8235612964816128c4565b91506020830135612974816128c4565b809150509250929050565b60008060006060848603121561299457600080fd5b505081359360208301359350604090920135919050565b6000602082840312156129bd57600080fd5b8135610fb6816128c4565b600080604083850312156129db57600080fd5b82356129e6816128c4565b91506129f46020840161285b565b90509250929050565b60008060408385031215612a1057600080fd5b823591506020830135612974816128c4565b60008060008060408587031215612a3857600080fd5b843567ffffffffffffffff80821115612a5057600080fd5b612a5c8883890161280f565b90965094506020870135915080821115612a7557600080fd5b50612a828782880161280f565b95989497509550505050565b60008060408385031215612aa157600080fd5b50508035926020909101359150565b600060208284031215612ac257600080fd5b5035919050565b600080600060608486031215612ade57600080fd5b612ae78461285b565b95602085013595506040909401359392505050565b60008060408385031215612b0f57600080fd5b6128f78361285b565b600060208284031215612b2a57600080fd5b610fb68261285b565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e9d57610e9d612b33565b600082612b7957634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610e9d57610e9d612b33565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b600060018201612bde57612bde612b33565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260800190565b600081612c3557612c35612b33565b506000190190565b600181815b80851115612c78578160001904821115612c5e57612c5e612b33565b80851615612c6b57918102915b93841c9390800290612c42565b509250929050565b600082612c8f57506001610e9d565b81612c9c57506000610e9d565b8160018114612cb25760028114612cbc57612cd8565b6001915050610e9d565b60ff841115612ccd57612ccd612b33565b50506001821b610e9d565b5060208310610133831016604e8410600b8410161715612cfb575081810a610e9d565b612d058383612c3d565b8060001904821115612d1957612d19612b33565b029392505050565b6000610fb660ff841683612c80565b81810381811115610e9d57610e9d612b33565b600060208284031215612d5557600080fd5b8151610fb6816128c4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612db05784516001600160a01b031683529383019391830191600101612d8b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612de657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201707b65a416fadc1fa3d99c0277f8faaacef08a8e36b9fdb6f674aa52c159a5564736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806370a08231116101d1578063bfa21d6a11610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a9b578063f8821a6214610abb578063f887ea4014610ad1578063fabb0b4f14610af157600080fd5b8063dd62ed3e146109f5578063e96fada214610a3b578063f1f3bca314610a5b578063f2fde38b14610a7b57600080fd5b8063d0889358116100dc578063d088935814610970578063d686014214610990578063d912b2ce146109b0578063dae39f92146109c557600080fd5b8063bfa21d6a146108fe578063c1adf7bc14610923578063c287184e1461095057600080fd5b80639b02c4021161016f578063a9059cbb11610149578063a9059cbb14610893578063abe57e70146108b3578063bafe446b146108d3578063bf56b371146108e857600080fd5b80639b02c4021461083d578063a4b45c0014610853578063a8aa1b311461087357600080fd5b8063893d20e8116101ab578063893d20e8146107905780638b42507f146107c25780638da5cb5b146107f257806395d89b411461081057600080fd5b806370a082311461072b578063715018a6146107615780638124f7ac1461077657600080fd5b8063421dd7c7116102b6578063584f969a11610254578063658d4b7f11610223578063658d4b7f146106a457806367243482146106c45780636ddd1713146106e45780636f4ce428146106fe57600080fd5b8063584f969a1461064457806360bba03d1461065957806361e08e721461067957806363a803e11461068f57600080fd5b8063507139351161029057806350713935146105ce57806356a227f2146105ee578063571ac8b01461060e5780635804f1e41461062e57600080fd5b8063421dd7c71461056c57806346d7edaa14610581578063492a937b146105ae57600080fd5b8063234e949411610323578063313ce567116102fd578063313ce567146104e0578063332402f8146104fc57806334848b9a1461051c5780633f4218e01461053c57600080fd5b8063234e94941461049657806323b872dd146104ab5780632b112e49146104cb57600080fd5b8063095db78f1161035f578063095db78f1461041c578063095ea7b31461043c5780631031e36e1461046c57806318160ddd1461048157600080fd5b80630445b6671461039157806304a66b48146103ba57806306fdde03146103dc57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a760265481565b6040519081526020015b60405180910390f35b3480156103c657600080fd5b506103da6103d5366004612786565b610b07565b005b3480156103e857600080fd5b5060408051808201909152600e81526d424f574c2053484942415249554d60901b60208201525b6040516103b191906127c1565b34801561042857600080fd5b506103da610437366004612870565b610c83565b34801561044857600080fd5b5061045c6104573660046128d9565b610e36565b60405190151581526020016103b1565b34801561047857600080fd5b506103da610ea3565b34801561048d57600080fd5b506003546103a7565b3480156104a257600080fd5b506103a7610f08565b3480156104b757600080fd5b5061045c6104c6366004612905565b610f28565b3480156104d757600080fd5b506103a7610fbd565b3480156104ec57600080fd5b50604051600981526020016103b1565b34801561050857600080fd5b5061045c610517366004612946565b610ffe565b34801561052857600080fd5b506103da61053736600461297f565b6110a5565b34801561054857600080fd5b5061045c6105573660046129ab565b600b6020526000908152604090205460ff1681565b34801561057857600080fd5b506103da611146565b34801561058d57600080fd5b506103a761059c3660046129ab565b601a6020526000908152604090205481565b3480156105ba57600080fd5b506103da6105c93660046129c8565b61119b565b3480156105da57600080fd5b506103da6105e936600461297f565b611237565b3480156105fa57600080fd5b506103da6106093660046129fd565b6112b0565b34801561061a57600080fd5b5061045c6106293660046129ab565b6113b4565b34801561063a57600080fd5b506103a760215481565b34801561065057600080fd5b506103da6113c2565b34801561066557600080fd5b506103da6106743660046129c8565b611417565b34801561068557600080fd5b506103a760245481565b34801561069b57600080fd5b506103a761144a565b3480156106b057600080fd5b506103da6106bf3660046129c8565b611465565b3480156106d057600080fd5b506103da6106df366004612a22565b611498565b3480156106f057600080fd5b5060255461045c9060ff1681565b34801561070a57600080fd5b506103a76107193660046129ab565b60096020526000908152604090205481565b34801561073757600080fd5b506103a76107463660046129ab565b6001600160a01b031660009081526007602052604090205490565b34801561076d57600080fd5b506103da6115dd565b34801561078257600080fd5b5060155461045c9060ff1681565b34801561079c57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103b1565b3480156107ce57600080fd5b5061045c6107dd3660046129ab565b600c6020526000908152604090205460ff1681565b3480156107fe57600080fd5b506000546001600160a01b03166107aa565b34801561081c57600080fd5b506040805180820190915260048152631093d5d360e21b602082015261040f565b34801561084957600080fd5b506103a7601d5481565b34801561085f57600080fd5b506103da61086e366004612946565b6115f1565b34801561087f57600080fd5b50601f546107aa906001600160a01b031681565b34801561089f57600080fd5b5061045c6108ae3660046128d9565b611631565b3480156108bf57600080fd5b506103da6108ce366004612a8e565b61163e565b3480156108df57600080fd5b506103a761168d565b3480156108f457600080fd5b506103a760205481565b34801561090a57600080fd5b506015546107aa9061010090046001600160a01b031681565b34801561092f57600080fd5b506103a761093e3660046129ab565b600a6020526000908152604090205481565b34801561095c57600080fd5b506103da61096b366004612ab0565b6116a8565b34801561097c57600080fd5b506103da61098b366004612ac9565b6116c3565b34801561099c57600080fd5b506103da6109ab366004612afc565b611715565b3480156109bc57600080fd5b506103da6117a6565b3480156109d157600080fd5b5061045c6109e03660046129ab565b600d6020526000908152604090205460ff1681565b348015610a0157600080fd5b506103a7610a10366004612946565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a4757600080fd5b506016546107aa906001600160a01b031681565b348015610a6757600080fd5b506103a7610a76366004612b18565b6117c2565b348015610a8757600080fd5b506103da610a963660046129ab565b6117ff565b348015610aa757600080fd5b506103da610ab63660046129c8565b611878565b348015610ac757600080fd5b506103a760275481565b348015610add57600080fd5b506017546107aa906001600160a01b031681565b348015610afd57600080fd5b506103a760225481565b610b0f6118ab565b610b198486612b49565b6002610b258688612b49565b610b2f9190612b5c565b610b3a906002612b7e565b14610ba95760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b60648201526084015b60405180910390fd5b60108590556011849055600e839055600f829055610bc78386612b49565b601255610bd48285612b49565b6013556014819055610be7600282612b5c565b601354601254610bf79190612b49565b1115610c355760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610ba0565b60125460135460145460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b3360009081526029602052604090205460ff1680610cab57506000546001600160a01b031633145b610cc75760405162461bcd60e51b8152600401610ba090612b95565b8015610cdc57601b5460ff16610cdc57600080fd5b60005b82811015610e30578115610d6b57601d8054906000610cfd83612bcc565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610d3657610d36612be5565b9050602002016020810190610d4b91906129ab565b436002604051610d5e9493929190612bfb565b60405180910390a1610dcb565b601a6000858584818110610d8157610d81612be5565b9050602002016020810190610d9691906129ab565b6001600160a01b0316815260208101919091526040016000205415610dcb57601d8054906000610dc583612c26565b91905055505b81610dd7576000610dd9565b435b601a6000868685818110610def57610def612be5565b9050602002016020810190610e0491906129ab565b6001600160a01b0316815260208101919091526040016000205580610e2881612bcc565b915050610cdf565b50505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e919086815260200190565b60405180910390a35060015b92915050565b3360009081526029602052604090205460ff1680610ecb57506000546001600160a01b031633145b610ee75760405162461bcd60e51b8152600401610ba090612b95565b602354610100900460ff1615610efc57600080fd5b6023805460ff19169055565b6000610f166009600a612d21565b600554610f239190612b5c565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610fa8576001600160a01b0384166000908152600860209081526040808320338452909152902054610f83908390612d30565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610fb3848484611905565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610ff191612b49565b600354610f239190612d30565b60155460009060ff1615801561102d57506001600160a01b03821660009081526019602052604090205460ff16155b801561105257506001600160a01b03831660009081526019602052604090205460ff16155b1561105f57506000610e9d565b6001600160a01b0383166000908152600b602052604090205460ff16158015610fb65750506001600160a01b03166000908152600b602052604090205460ff1615919050565b3360009081526029602052604090205460ff16806110cd57506000546001600160a01b031633145b6110e95760405162461bcd60e51b8152600401610ba090612b95565b60235460ff161580156110fc5750600a83105b61110557600080fd5b60228390556023805460ff19166001179055436020556111258242612b49565b601e556111346009600a612d21565b61113e9082612b7e565b601c55505050565b3360009081526029602052604090205460ff168061116e57506000546001600160a01b031633145b61118a5760405162461bcd60e51b8152600401610ba090612b95565b601b805461ffff1916610100179055565b6111a36118ab565b601f546001600160a01b039081169083160361120c5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610ba0565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b61123f6118ab565b60008311801561124f5750600082115b801561125b5750600081115b801561126957506127108111155b61127257600080fd5b80836003546112819190612b7e565b61128b9190612b5c565b600455600354819061129e908490612b7e565b6112a89190612b5c565b600555505050565b3360009081526029602052604090205460ff16806112d857506000546001600160a01b031633145b6112f45760405162461bcd60e51b8152600401610ba090612b95565b4780156113af5760006001600160a01b03831660646113138685612b7e565b61131d9190612b5c565b604051600081818185875af1925050503d8060008114611359576040519150601f19603f3d011682016040523d82523d6000602084013e61135e565b606091505b5050905080610e305760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610ba0565b505050565b6000610e9d82600019610e36565b3360009081526029602052604090205460ff16806113ea57506000546001600160a01b031633145b6114065760405162461bcd60e51b8152600401610ba090612b95565b6023805461ffff1916610101179055565b61141f6118ab565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b60006114586009600a612d21565b600654610f239190612b5c565b61146d6118ab565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6114a06118ab565b82158015906114ae57508083145b6114b757600080fd5b3360005b848110156115d557601960008787848181106114d9576114d9612be5565b90506020020160208101906114ee91906129ab565b6001600160a01b0316815260208101919091526040016000205460ff1615801561155d5750600d600087878481811061152957611529612be5565b905060200201602081019061153e91906129ab565b6001600160a01b0316815260208101919091526040016000205460ff16155b156115c3576115c18287878481811061157857611578612be5565b905060200201602081019061158d91906129ab565b6115996009600a612d21565b8787868181106115ab576115ab612be5565b905060200201356115bc9190612b7e565b611e01565b505b806115cd81612bcc565b9150506114bb565b505050505050565b6115e56118ab565b6115ef6000611ebb565b565b6115f96118ab565b60158054610100600160a81b0319166101006001600160a01b0394851602179055601680546001600160a01b03191691909216179055565b6000610fb6338484611905565b6116466118ab565b6000821180156116565750600081115b801561166457506127108111155b61166d57600080fd5b808260035461167c9190612b7e565b6116869190612b5c565b6006555050565b600061169b6009600a612d21565b600454610f239190612b5c565b6116b06118ab565b603c8111156116be57600080fd5b602455565b6116cb6118ab565b600082116116d857600080fd5b6025805460ff19168415151790556003546116f4908390612b5c565b6026556117036009600a612d21565b61170d9082612b7e565b602755505050565b3360009081526029602052604090205460ff168061173d57506000546001600160a01b031633145b6117595760405162461bcd60e51b8152600401610ba090612b95565b601b54610100900460ff161561176e57600080fd5b601b805460ff191683151517905562015180811061178b57600080fd5b80601e600082825461179d9190612b49565b90915550505050565b6117ae6118ab565b6015805460ff19811660ff90911615179055565b6000436022546020546117d59190612b49565b106117e9576001601454610e9d9190612d30565b81156117f757505060135490565b505060125490565b6118076118ab565b6001600160a01b03811661186c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba0565b61187581611ebb565b50565b6118806118ab565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba0565b60006001600160a01b03841661195d5760405162461bcd60e51b815260206004820152601860248201527f42455032303a207472616e736665722066726f6d2030783000000000000000006044820152606401610ba0565b6001600160a01b0383166119ac5760405162461bcd60e51b8152602060048201526016602482015275042455032303a207472616e7366657220746f203078360541b6044820152606401610ba0565b600082116119f45760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610ba0565b6001600160a01b038416600090815260076020526040902054821115611a535760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610ba0565b602054158015611a7b57506001600160a01b03831660009081526019602052604090205460ff165b15611b02576001600160a01b0384166000908152600d602052604090205460ff16611ae85760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610ba0565b611b0243602055426021556025805460ff19166001179055565b60235460ff16611b8f576001600160a01b0384166000908152600d602052604090205460ff1680611b4b57506001600160a01b0383166000908152600d602052604090205460ff165b611b8f5760405162461bcd60e51b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b6044820152606401610ba0565b611b9a848484611f0b565b6001600160a01b03831660009081526019602052604090205460ff16158015611bd157506001546001600160a01b03848116911614155b15611c00576001600160a01b0383166000908152600c602052604090205460ff16611c0057611c008383612251565b601b5460ff168015611c13575042601e54115b15611cdd576001600160a01b03841660009081526019602052604090205460ff168015611c495750326001600160a01b03841614155b8015611c6b57506001600160a01b0383166000908152601a6020526040902054155b15611cdd576001600160a01b0383166000908152601a60205260408120439055601d805491611c9983612bcc565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051611cd49493929190612bfb565b60405180910390a15b60285460ff1615611cfa57611cf3848484611e01565b9050610fb6565b6001600160a01b038416600090815260076020526040902054611d1e908390612d30565b6001600160a01b03851660009081526007602052604090205581611d428585610ffe565b15611d7657611d5184846122d6565b9050611d5c84612354565b8015611d685750600083115b15611d7657611d76836123e6565b6001600160a01b038416600090815260076020526040902054611d9a908290612b49565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611dee9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054611e25908390612d30565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611e55908390612b49565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ea99086815260200190565b60405180910390a35060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600c602052604090205460ff1680611f4a57506001600160a01b0382166000908152600c602052604090205460ff165b15611f5457505050565b6001600160a01b03831660009081526019602052604090205460ff16611f7c57600554611f80565b6004545b811115611fc35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ba0565b6024546001600160a01b0383166000908152600a60205260409020544391611fea91612b49565b11156120385760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722072617465206c696d69742065786365656465642e0000006044820152606401610ba0565b6001600160a01b0383166000908152601a60205260409020541561211b576120626009600a612d21565b601c5461206f9190612b7e565b811115801561209457506001600160a01b038316600090815260096020526040902054155b80156120a1575042601e54115b6120ff5760405162461bcd60e51b815260206004820152602960248201527f57616c6c65742070726f7465637465642c20706c6561736520636f6e746163746044820152681039bab83837b93a1760b91b6064820152608401610ba0565b6001600160a01b03831660009081526009602052604090204390555b6001600160a01b03821660009081526019602052604090205460ff161561215a5750506001600160a01b03166000908152600960205260409020439055565b6121648383610ffe565b156113af57601b5460ff16801561217c575042601e54115b80156121965750326000908152600a602052604090205443145b80156121b857506001600160a01b0382166000908152601a6020526040902054155b15612219576001600160a01b0382166000908152601a602052604090819020439081905590517f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea916122109132918691600190612bfb565b60405180910390a15b6001600160a01b0382166000818152600a6020526040902043905532146113af57326000908152600a60205260409020439055505050565b6006546001600160a01b038316600090815260076020526040902054819061227a908490612b49565b11156113af5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610ba0565b6001600160a01b03821660009081526019602052604081205460145460ff909116908290612303836117c2565b61230d9086612b7e565b6123179190612b5c565b3060009081526007602052604081208054929350839290919061233b908490612b49565b9091555061234b90508185612d30565b95945050505050565b3360009081526019602052604081205460ff16158015612377575060285460ff16155b8015612385575060255460ff165b80156123a957506001600160a01b03821660009081526019602052604090205460ff165b80156123c657506027543060009081526007602052604090205410155b8015610e9d575060006013546012546123df9190612b49565b1192915050565b6028805460ff1916600117905560135460125460009161240591612b49565b90506000602654831061241a5760265461241c565b825b306000908152600760205260409020549091508111156124485750306000908152600760205260409020545b600060115460105461245a9190612b49565b9050600083600261246b8486612b7e565b6124759190612b5c565b61247f9190612b5c565b905061248b8184612d30565b604080516002808252606082018352929550600092909160208301908036833701905050905030816000815181106124c5576124c5612be5565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125429190612d43565b8160018151811061255557612555612be5565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b81524792919091169063791ac9479061259f908890600090879030904290600401612d60565b600060405180830381600087803b1580156125b957600080fd5b505af11580156125cd573d6000803e3d6000fd5b50505050600081476125df9190612d30565b905060006125ee600287612b5c565b6125f89089612d30565b905060008160026126098986612b7e565b6126139190612b5c565b61261d9190612b5c565b9050600061262b8285612d30565b9050801561268a576016546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612680576040519150601f19603f3d011682016040523d82523d6000602084013e612685565b606091505b505050505b861561272e5760175460155460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af1158015612705573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061272a9190612dd1565b5050505b60408051828152602081018490529081018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506028805460ff19169055505050505050505050565b600080600080600060a0868803121561279e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156127ee578581018301518582016040015282016127d2565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261282157600080fd5b50813567ffffffffffffffff81111561283957600080fd5b6020830191508360208260051b850101111561285457600080fd5b9250929050565b8035801515811461286b57600080fd5b919050565b60008060006040848603121561288557600080fd5b833567ffffffffffffffff81111561289c57600080fd5b6128a88682870161280f565b90945092506128bb90506020850161285b565b90509250925092565b6001600160a01b038116811461187557600080fd5b600080604083850312156128ec57600080fd5b82356128f7816128c4565b946020939093013593505050565b60008060006060848603121561291a57600080fd5b8335612925816128c4565b92506020840135612935816128c4565b929592945050506040919091013590565b6000806040838503121561295957600080fd5b8235612964816128c4565b91506020830135612974816128c4565b809150509250929050565b60008060006060848603121561299457600080fd5b505081359360208301359350604090920135919050565b6000602082840312156129bd57600080fd5b8135610fb6816128c4565b600080604083850312156129db57600080fd5b82356129e6816128c4565b91506129f46020840161285b565b90509250929050565b60008060408385031215612a1057600080fd5b823591506020830135612974816128c4565b60008060008060408587031215612a3857600080fd5b843567ffffffffffffffff80821115612a5057600080fd5b612a5c8883890161280f565b90965094506020870135915080821115612a7557600080fd5b50612a828782880161280f565b95989497509550505050565b60008060408385031215612aa157600080fd5b50508035926020909101359150565b600060208284031215612ac257600080fd5b5035919050565b600080600060608486031215612ade57600080fd5b612ae78461285b565b95602085013595506040909401359392505050565b60008060408385031215612b0f57600080fd5b6128f78361285b565b600060208284031215612b2a57600080fd5b610fb68261285b565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e9d57610e9d612b33565b600082612b7957634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610e9d57610e9d612b33565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b600060018201612bde57612bde612b33565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260800190565b600081612c3557612c35612b33565b506000190190565b600181815b80851115612c78578160001904821115612c5e57612c5e612b33565b80851615612c6b57918102915b93841c9390800290612c42565b509250929050565b600082612c8f57506001610e9d565b81612c9c57506000610e9d565b8160018114612cb25760028114612cbc57612cd8565b6001915050610e9d565b60ff841115612ccd57612ccd612b33565b50506001821b610e9d565b5060208310610133831016604e8410600b8410161715612cfb575081810a610e9d565b612d058383612c3d565b8060001904821115612d1957612d19612b33565b029392505050565b6000610fb660ff841683612c80565b81810381811115610e9d57610e9d612b33565b600060208284031215612d5557600080fd5b8151610fb6816128c4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612db05784516001600160a01b031683529383019391830191600101612d8b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612de657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201707b65a416fadc1fa3d99c0277f8faaacef08a8e36b9fdb6f674aa52c159a5564736f6c63430008120033

Deployed Bytecode Sourcemap

7020:17647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9161:50;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9161:50:0;;;;;;;;22866:812;;;;;;;;;;-1:-1:-1;22866:812:0;;;;;:::i;:::-;;:::i;:::-;;10625:71;;;;;;;;;;-1:-1:-1;10688:5:0;;;;;;;;;;;;-1:-1:-1;;;10688:5:0;;;;10625:71;;;;;;;:::i;13696:617::-;;;;;;;;;;-1:-1:-1;13696:617:0;;;;;:::i;:::-;;:::i;11366:216::-;;;;;;;;;;-1:-1:-1;11366:216:0;;;;;:::i;:::-;;:::i;:::-;;;2876:14:1;;2869:22;2851:41;;2839:2;2824:18;11366:216:0;2711:187:1;13060:115:0;;;;;;;;;;;;;:::i;10373:88::-;;;;;;;;;;-1:-1:-1;10446:12:0;;10373:88;;10890:107;;;;;;;;;;;;;:::i;14485:341::-;;;;;;;;;;-1:-1:-1;14485:341:0;;;;;:::i;:::-;;:::i;24340:138::-;;;;;;;;;;;;;:::i;10467:71::-;;;;;;;;;;-1:-1:-1;10467:71:0;;7346:1;3506:36:1;;3494:2;3479:18;10467:71:0;3364:184:1;18698:255:0;;;;;;;;;;-1:-1:-1;18698:255:0;;;;;:::i;:::-;;:::i;12676:372::-;;;;;;;;;;-1:-1:-1;12676:372:0;;;;;:::i;:::-;;:::i;7805:44::-;;;;;;;;;;-1:-1:-1;7805:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13557:127;;;;;;;;;;;;;:::i;8670:45::-;;;;;;;;;;-1:-1:-1;8670:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;21698:184;;;;;;;;;;-1:-1:-1;21698:184:0;;;;;:::i;:::-;;:::i;22026:339::-;;;;;;;;;;-1:-1:-1;22026:339:0;;;;;:::i;:::-;;:::i;12335:329::-;;;;;;;;;;-1:-1:-1;12335:329:0;;;;;:::i;:::-;;:::i;11590:122::-;;;;;;;;;;-1:-1:-1;11590:122:0;;;;;:::i;:::-;;:::i;8955:27::-;;;;;;;;;;;;;;;;13187:111;;;;;;;;;;;;;:::i;11724:119::-;;;;;;;;;;-1:-1:-1;11724:119:0;;;;;:::i;:::-;;:::i;9086:28::-;;;;;;;;;;;;;;;;11003:105;;;;;;;;;;;;;:::i;22604:119::-;;;;;;;;;;-1:-1:-1;22604:119:0;;;;;:::i;:::-;;:::i;11855:468::-;;;;;;;;;;-1:-1:-1;11855:468:0;;;;;:::i;:::-;;:::i;9123:31::-;;;;;;;;;;-1:-1:-1;9123:31:0;;;;;;;;7702:44;;;;;;;;;;-1:-1:-1;7702:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;11114:105;;;;;;;;;;-1:-1:-1;11114:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;11198:18:0;11180:7;11198:18;;;:9;:18;;;;;;;11114:105;6506:103;;;;;;;;;;;;;:::i;8269:31::-;;;;;;;;;;-1:-1:-1;8269:31:0;;;;;;;;10702:71;;;;;;;;;;-1:-1:-1;10745:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;10702:71;;;-1:-1:-1;;;;;6101:32:1;;;6083:51;;6071:2;6056:18;10702:71:0;5937:203:1;7856:48:0;;;;;;;;;;-1:-1:-1;7856:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6275:87;;;;;;;;;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;6275:87;;10544:75;;;;;;;;;;-1:-1:-1;10609:7:0;;;;;;;;;;;;-1:-1:-1;;;10609:7:0;;;;10544:75;;8826:30;;;;;;;;;;;;;;;;23787:242;;;;;;;;;;-1:-1:-1;23787:242:0;;;;;:::i;:::-;;:::i;8895:19::-;;;;;;;;;;-1:-1:-1;8895:19:0;;;;-1:-1:-1;;;;;8895:19:0;;;14321:156;;;;;;;;;;-1:-1:-1;14321:156:0;;;;;:::i;:::-;;:::i;22377:219::-;;;;;;;;;;-1:-1:-1;22377:219:0;;;;;:::i;:::-;;:::i;10779:105::-;;;;;;;;;;;;;:::i;8923:25::-;;;;;;;;;;;;;;;;8309:97;;;;;;;;;;-1:-1:-1;8309:97:0;;;;;;;-1:-1:-1;;;;;8309:97:0;;;7753:43;;;;;;;;;;-1:-1:-1;7753:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;21890:128;;;;;;;;;;-1:-1:-1;21890:128:0;;;;;:::i;:::-;;:::i;24037:295::-;;;;;;;;;;-1:-1:-1;24037:295:0;;;;;:::i;:::-;;:::i;13310:235::-;;;;;;;;;;-1:-1:-1;13310:235:0;;;;;:::i;:::-;;:::i;23686:93::-;;;;;;;;;;;;;:::i;7911:49::-;;;;;;;;;;-1:-1:-1;7911:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11225:133;;;;;;;;;;-1:-1:-1;11225:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11327:19:0;;;11309:7;11327:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11225:133;8413:97;;;;;;;;;;-1:-1:-1;8413:97:0;;;;-1:-1:-1;;;;;8413:97:0;;;18961:228;;;;;;;;;;-1:-1:-1;18961:228:0;;;;;:::i;:::-;;:::i;6615:201::-;;;;;;;;;;-1:-1:-1;6615:201:0;;;;;:::i;:::-;;:::i;22731:127::-;;;;;;;;;;-1:-1:-1;22731:127:0;;;;;:::i;:::-;;:::i;9218:49::-;;;;;;;;;;;;;;;;8519:24;;;;;;;;;;-1:-1:-1;8519:24:0;;;;-1:-1:-1;;;;;8519:24:0;;;8989:25;;;;;;;;;;;;;;;;22866:812;6236:13;:11;:13::i;:::-;23096:33:::1;23112:17:::0;23096:13;:33:::1;:::i;:::-;23085:1;23048:33;23064:17:::0;23048:13;:33:::1;:::i;:::-;23047:39;;;;:::i;:::-;23046:45;::::0;23090:1:::1;23046:45;:::i;:::-;:84;23038:149;;;::::0;-1:-1:-1;;;23038:149:0;;8651:2:1;23038:149:0::1;::::0;::::1;8633:21:1::0;8690:2;8670:18;;;8663:30;8729:34;8709:18;;;8702:62;-1:-1:-1;;;8780:18:1;;;8773:50;8840:19;;23038:149:0::1;;;;;;;;;23198:12;:28:::0;;;23237:16:::1;:36:::0;;;23284:12:::1;:28:::0;;;23323:16:::1;:36:::0;;;23384:29:::1;23299:13:::0;23213;23384:29:::1;:::i;:::-;23370:11;:43:::0;23439:37:::1;23459:17:::0;23439;:37:::1;:::i;:::-;23424:12;:52:::0;23487:14:::1;:32:::0;;;23568:18:::1;23585:1;23504:15:::0;23568:18:::1;:::i;:::-;23552:12;;23538:11;;:26;;;;:::i;:::-;:48;;23530:74;;;::::0;-1:-1:-1;;;23530:74:0;;9072:2:1;23530:74:0::1;::::0;::::1;9054:21:1::0;9111:2;9091:18;;;9084:30;-1:-1:-1;;;9130:18:1;;;9123:43;9183:18;;23530:74:0::1;8870:337:1::0;23530:74:0::1;23628:11;::::0;23641:12:::1;::::0;23655:14:::1;::::0;23620:50:::1;::::0;;9414:25:1;;;9470:2;9455:18;;9448:34;;;;9498:18;;;9491:34;23620:50:0;::::1;::::0;;;;9402:2:1;23620:50:0;;::::1;22866:812:::0;;;;;:::o;13696:617::-;4405:10;9449:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;9477:10;:21;9449:49;9441:89;;;;-1:-1:-1;;;9441:89:0;;;;;;;:::i;:::-;13796:8:::1;13792:67;;;13829:17;::::0;::::1;;13821:26;;;::::0;::::1;;13884:6;13879:427;13896:19:::0;;::::1;13879:427;;;13955:8;13951:277;;;13984:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;14025:56;14041:9;14052:8;;14061:1;14052:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;14065:12;14079:1;14025:56;;;;;;;;;:::i;:::-;;;;;;;;13951:277;;;14139:9;:22;14149:8;;14158:1;14149:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14139:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14139:22:0;;:27;14135:71:::1;;14189:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;14135:71;14267:8;:27;;14293:1;14267:27;;;14278:12;14267:27;14242:9;:22;14252:8;;14261:1;14252:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14242:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14242:22:0;:52;13917:3;::::1;::::0;::::1;:::i;:::-;;;;13879:427;;;;13696:617:::0;;;:::o;11366:216::-;11470:10;11441:4;11458:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11458:32:0;;;;;;;;;;:41;;;11515:37;11441:4;;11458:32;;11515:37;;;;11493:6;160:25:1;;148:2;133:18;;14:177;11515:37:0;;;;;;;;-1:-1:-1;11570:4:0;11366:216;;;;;:::o;13060:115::-;4405:10;9449:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;9477:10;:21;9449:49;9441:89;;;;-1:-1:-1;;;9441:89:0;;;;;;;:::i;:::-;13122:13:::1;::::0;::::1;::::0;::::1;;;13121:14;13113:23;;;::::0;::::1;;13147:12;:20:::0;;-1:-1:-1;;13147:20:0::1;::::0;;13060:115::o;10890:107::-;10940:7;10978:15;7346:1;10978:2;:15;:::i;:::-;10958:16;;:36;;;;:::i;:::-;10951:43;;10890:107;:::o;14485:341::-;-1:-1:-1;;;;;14605:19:0;;14585:4;14605:19;;;:11;:19;;;;;;;;14625:10;14605:31;;;;;;;;-1:-1:-1;;14605:52:0;14602:157;;-1:-1:-1;;;;;14707:19:0;;;;;;:11;:19;;;;;;;;14727:10;14707:31;;;;;;;;:40;;14741:6;;14707:40;:::i;:::-;-1:-1:-1;;;;;14673:19:0;;;;;;:11;:19;;;;;;;;14693:10;14673:31;;;;;;;:74;14602:157;14778:40;14792:6;14800:9;14811:6;14778:13;:40::i;:::-;14771:47;;14485:341;;;;;;:::o;24340:138::-;24464:4;;-1:-1:-1;;;;;24464:4:0;;;24393:7;11198:18;;;:9;:18;;;;;;;24446:4;;;;;11198:18;;;;;24393:7;;24436:33;;;:::i;:::-;24420:12;;:50;;;;:::i;18698:255::-;18798:11;;18777:4;;18798:11;;18797:12;:42;;;;-1:-1:-1;;;;;;18814:25:0;;;;;;:14;:25;;;;;;;;18813:26;18797:42;:69;;;;-1:-1:-1;;;;;;18844:22:0;;;;;;:14;:22;;;;;;;;18843:23;18797:69;18794:86;;;-1:-1:-1;18875:5:0;18868:12;;18794:86;-1:-1:-1;;;;;18899:19:0;;;;;;:11;:19;;;;;;;;18898:20;:47;;;;-1:-1:-1;;;;;;;18923:22:0;;;;;:11;:22;;;;;;;;18922:23;;18891:54;-1:-1:-1;18698:255:0:o;12676:372::-;4405:10;9449:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;9477:10;:21;9449:49;9441:89;;;;-1:-1:-1;;;9441:89:0;;;;;;;:::i;:::-;12793:12:::1;::::0;::::1;;12792:13;:33:::0;::::1;;;;12823:2;12809:11;:16;12792:33;12784:42;;;::::0;::::1;;12837:10;:24:::0;;;12872:12:::1;:19:::0;;-1:-1:-1;;12872:19:0::1;12887:4;12872:19;::::0;;12915:12:::1;12902:10;:25:::0;12956:29:::1;12974:11:::0;12956:15:::1;:29;:::i;:::-;12938:15;:47:::0;13024:15:::1;7346:1;13024:2;:15;:::i;:::-;13014:26;::::0;:6;:26:::1;:::i;:::-;12996:15;:44:::0;-1:-1:-1;;;12676:372:0:o;13557:127::-;4405:10;9449:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;9477:10;:21;9449:49;9441:89;;;;-1:-1:-1;;;9441:89:0;;;;;;;:::i;:::-;13615:18:::1;:25:::0;;-1:-1:-1;;13651:25:0;13615::::1;13651::::0;;;13557:127::o;21698:184::-;6236:13;:11;:13::i;:::-;21793:4:::1;::::0;-1:-1:-1;;;;;21793:4:0;;::::1;21787:10:::0;;::::1;::::0;21779:57:::1;;;::::0;-1:-1:-1;;;21779:57:0;;12492:2:1;21779:57:0::1;::::0;::::1;12474:21:1::0;12531:2;12511:18;;;12504:30;12570:34;12550:18;;;12543:62;-1:-1:-1;;;12621:18:1;;;12614:32;12663:19;;21779:57:0::1;12290:398:1::0;21779:57:0::1;-1:-1:-1::0;;;;;21847:18:0;;;::::1;;::::0;;;:14:::1;:18;::::0;;;;:27;;-1:-1:-1;;21847:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21698:184::o;22026:339::-;6236:13;:11;:13::i;:::-;22161:1:::1;22146:12;:16;:37;;;;;22182:1;22166:13;:17;22146:37;:52;;;;;22197:1;22187:7;:11;22146:52;:72;;;;;22213:5;22202:7;:16;;22146:72;22138:81;;;::::0;::::1;;22280:7;22264:12;22249;;:27;;;;:::i;:::-;22248:39;;;;:::i;:::-;22230:15;:57:::0;22318:12:::1;::::0;22350:7;;22318:28:::1;::::0;22333:13;;22318:28:::1;:::i;:::-;22317:40;;;;:::i;:::-;22298:16;:59:::0;-1:-1:-1;;;22026:339:0:o;12335:329::-;4405:10;9449:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;9477:10;:21;9449:49;9441:89;;;;-1:-1:-1;;;9441:89:0;;;;;;;:::i;:::-;12450:21:::1;12487:13:::0;;12484:173:::1;;12518:9;-1:-1:-1::0;;;;;12533:8:0;::::1;12582:3;12550:28;12562:16:::0;12550:9;:28:::1;:::i;:::-;12549:36;;;;:::i;:::-;12533:57;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12517:73;;;12613:4;12605:40;;;::::0;-1:-1:-1;;;12605:40:0;;13105:2:1;12605:40:0::1;::::0;::::1;13087:21:1::0;13144:2;13124:18;;;13117:30;13183:26;13163:18;;;13156:54;13227:18;;12605:40:0::1;12903:348:1::0;12484:173:0::1;12419:245;12335:329:::0;;:::o;11590:122::-;11645:4;11669:35;11677:7;-1:-1:-1;;11669:7:0;:35::i;13187:111::-;4405:10;9449:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;9477:10;:21;9449:49;9441:89;;;;-1:-1:-1;;;9441:89:0;;;;;;;:::i;:::-;13240:13:::1;:20:::0;;-1:-1:-1;;13271:19:0;;;;;13187:111::o;11724:119::-;6236:13;:11;:13::i;:::-;-1:-1:-1;;;;;11807:17:0;;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:28;;-1:-1:-1;;11807:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11724:119::o;11003:105::-;11053:7;11089:15;7346:1;11089:2;:15;:::i;:::-;11071:14;;:34;;;;:::i;22604:119::-;6236:13;:11;:13::i;:::-;-1:-1:-1;;;;;22687:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;22687:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22604:119::o;11855:468::-;6236:13;:11;:13::i;:::-;11968:20;;;;;:58:::1;;-1:-1:-1::0;11992:34:0;;::::1;11968:58;11960:67;;;::::0;::::1;;12053:10;12038:12;12076:240;12093:20:::0;;::::1;12076:240;;;12139:14;:28;12154:9;;12164:1;12154:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12139:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12139:28:0;;::::1;;12138:29;:64:::0;::::1;;;;12172:16;:30;12189:9;;12199:1;12189:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12172:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12172:30:0;;::::1;;12171:31;12138:64;12135:170;;;12223:66;12238:4;12244:9;;12254:1;12244:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12272:15;7346:1;12272:2;:15;:::i;:::-;12258:7;;12266:1;12258:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;12223:14;:66::i;:::-;;12135:170;12115:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12076:240;;;;11949:374;11855:468:::0;;;;:::o;6506:103::-;6236:13;:11;:13::i;:::-;6571:30:::1;6598:1;6571:18;:30::i;:::-;6506:103::o:0;23787:242::-;6236:13;:11;:13::i;:::-;23904:20:::1;:53:::0;;-1:-1:-1;;;;;;23904:53:0::1;;-1:-1:-1::0;;;;;23904:53:0;;::::1;;;::::0;;23968:20:::1;:53:::0;;-1:-1:-1;;;;;;23968:53:0::1;::::0;;;::::1;;::::0;;23787:242::o;14321:156::-;14401:4;14425:44;14439:10;14451:9;14462:6;14425:13;:44::i;22377:219::-;6236:13;:11;:13::i;:::-;22487:1:::1;22475:9;:13;:28;;;;;22502:1;22492:7;:11;22475:28;:48;;;;;22518:5;22507:7;:16;;22475:48;22467:57;;;::::0;::::1;;22581:7;22568:9;22553:12;;:24;;;;:::i;:::-;22552:36;;;;:::i;:::-;22535:14;:53:::0;-1:-1:-1;;22377:219:0:o;10779:105::-;10828:7;10865:15;7346:1;10865:2;:15;:::i;:::-;10846;;:35;;;;:::i;21890:128::-;6236:13;:11;:13::i;:::-;21972:10:::1;21964:4;:18;;21956:27;;;::::0;::::1;;21994:9;:16:::0;21890:128::o;24037:295::-;6236:13;:11;:13::i;:::-;24178:1:::1;24163:12;:16;24155:25;;;::::0;::::1;;24191:11;:22:::0;;-1:-1:-1;;24191:22:0::1;::::0;::::1;;;::::0;;24240:12:::1;::::0;:27:::1;::::0;24255:12;;24240:27:::1;:::i;:::-;24224:13;:43:::0;24308:15:::1;7346:1;24308:2;:15;:::i;:::-;24292:32;::::0;:12;:32:::1;:::i;:::-;24278:11;:46:::0;-1:-1:-1;;;24037:295:0:o;13310:235::-;4405:10;9449:24;;;;:10;:24;;;;;;;;;:49;;-1:-1:-1;6321:7:0;6348:6;-1:-1:-1;;;;;6348:6:0;9477:10;:21;9449:49;9441:89;;;;-1:-1:-1;;;9441:89:0;;;;;;;:::i;:::-;13404:18:::1;::::0;::::1;::::0;::::1;;;13403:19;13395:28;;;::::0;::::1;;13434:17;:28:::0;;-1:-1:-1;;13434:28:0::1;::::0;::::1;;;::::0;;13492:6:::1;13481:17:::0;::::1;13473:26;;;::::0;::::1;;13529:8;13510:15;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;13310:235:0:o;23686:93::-;6236:13;:11;:13::i;:::-;23760:11:::1;::::0;;-1:-1:-1;;23745:26:0;::::1;23760:11;::::0;;::::1;23759:12;23745:26;::::0;;23686:93::o;18961:228::-;19017:7;19067:12;19053:10;;19040;;:23;;;;:::i;:::-;:39;19037:73;;19106:1;19089:14;;:18;;;;:::i;19037:73::-;19124:7;19120:32;;;-1:-1:-1;;19140:12:0;;;18961:228::o;19120:32::-;-1:-1:-1;;19170:11:0;;;18961:228::o;6615:201::-;6236:13;:11;:13::i;:::-;-1:-1:-1;;;;;6704:22:0;::::1;6696:73;;;::::0;-1:-1:-1;;;6696:73:0;;13458:2:1;6696:73:0::1;::::0;::::1;13440:21:1::0;13497:2;13477:18;;;13470:30;13536:34;13516:18;;;13509:62;-1:-1:-1;;;13587:18:1;;;13580:36;13633:19;;6696:73:0::1;13256:402:1::0;6696:73:0::1;6780:28;6799:8;6780:18;:28::i;:::-;6615:201:::0;:::o;22731:127::-;6236:13;:11;:13::i;:::-;-1:-1:-1;;;;;22818:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;22818:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22731:127::o;6368:132::-;6321:7;6348:6;-1:-1:-1;;;;;6348:6:0;4405:10;6432:23;6424:68;;;;-1:-1:-1;;;6424:68:0;;13865:2:1;6424:68:0;;;13847:21:1;;;13884:18;;;13877:30;13943:34;13923:18;;;13916:62;13995:18;;6424:68:0;13663:356:1;14834:1789:0;14926:4;-1:-1:-1;;;;;14951:20:0;;14943:57;;;;-1:-1:-1;;;14943:57:0;;14226:2:1;14943:57:0;;;14208:21:1;14265:2;14245:18;;;14238:30;14304:26;14284:18;;;14277:54;14348:18;;14943:57:0;14024:348:1;14943:57:0;-1:-1:-1;;;;;15019:23:0;;15011:58;;;;-1:-1:-1;;;15011:58:0;;14579:2:1;15011:58:0;;;14561:21:1;14618:2;14598:18;;;14591:30;-1:-1:-1;;;14637:18:1;;;14630:52;14699:18;;15011:58:0;14377:346:1;15011:58:0;15097:1;15088:6;:10;15080:44;;;;-1:-1:-1;;;15080:44:0;;14930:2:1;15080:44:0;;;14912:21:1;14969:2;14949:18;;;14942:30;-1:-1:-1;;;14988:18:1;;;14981:51;15049:18;;15080:44:0;14728:345:1;15080:44:0;-1:-1:-1;;;;;15143:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;15143:27:0;15135:60;;;;-1:-1:-1;;;15135:60:0;;15280:2:1;15135:60:0;;;15262:21:1;15319:2;15299:18;;;15292:30;-1:-1:-1;;;15338:18:1;;;15331:50;15398:18;;15135:60:0;15078:344:1;15135:60:0;16702:10;;:15;;;15209:40;;-1:-1:-1;;;;;;15224:25:0;;;;;;:14;:25;;;;;;;;15209:40;15206:120;;;-1:-1:-1;;;;;15260:24:0;;;;;;:16;:24;;;;;;;;15252:61;;;;-1:-1:-1;;;15252:61:0;;15629:2:1;15252:61:0;;;15611:21:1;15668:2;15648:18;;;15641:30;15707:26;15687:18;;;15680:54;15751:18;;15252:61:0;15427:348:1;15252:61:0;15315:8;16784:12;16771:10;:25;16822:15;16807:12;:30;16848:11;:18;;-1:-1:-1;;16848:18:0;16862:4;16848:18;;;16733:141;15315:8;15340:12;;;;15336:111;;-1:-1:-1;;;;;15363:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;15391:27:0;;;;;;:16;:27;;;;;;;;15363:55;15355:89;;;;-1:-1:-1;;;15355:89:0;;15982:2:1;15355:89:0;;;15964:21:1;16021:2;16001:18;;;15994:30;-1:-1:-1;;;16040:18:1;;;16033:51;16101:18;;15355:89:0;15780:345:1;15355:89:0;15459:39;15472:6;15480:9;15491:6;15459:12;:39::i;:::-;-1:-1:-1;;;;;15524:25:0;;;;;;:14;:25;;;;;;;;15523:26;:47;;;;-1:-1:-1;15566:4:0;;-1:-1:-1;;;;;15553:17:0;;;15566:4;;15553:17;;15523:47;15519:182;;;-1:-1:-1;;;;;15592:26:0;;;;;;:15;:26;;;;;;;;15587:103;;15639:35;15656:9;15667:6;15639:16;:35::i;:::-;15724:17;;;;:54;;;;;15763:15;15745;;:33;15724:54;15721:351;;;-1:-1:-1;;;;;15798:22:0;;;;;;:14;:22;;;;;;;;:48;;;;-1:-1:-1;15824:9:0;-1:-1:-1;;;;;15824:22:0;;;;15798:48;:77;;;;-1:-1:-1;;;;;;15850:20:0;;;;;;:9;:20;;;;;;:25;15798:77;15795:266;;;-1:-1:-1;;;;;15896:20:0;;;;;;:9;:20;;;;;15919:12;15896:35;;15950:15;:17;;;;;;:::i;:::-;;;;;;15991:54;16007:9;16018;16029:12;16043:1;15991:54;;;;;;;;;:::i;:::-;;;;;;;;15795:266;16095:6;;;;16092:63;;;16111:41;16126:6;16134:9;16145:6;16111:14;:41::i;:::-;16104:48;;;;16092:63;-1:-1:-1;;;;;16187:17:0;;;;;;:9;:17;;;;;;:26;;16207:6;;16187:26;:::i;:::-;-1:-1:-1;;;;;16167:17:0;;;;;;:9;:17;;;;;:46;16251:6;16273:32;16177:6;16295:9;16273:13;:32::i;:::-;16270:182;;;16339:26;16347:9;16358:6;16339:7;:26::i;:::-;16322:43;;16383:25;16398:9;16383:14;:25::i;:::-;:39;;;;;16421:1;16412:6;:10;16383:39;16380:60;;;16424:16;16433:6;16424:8;:16::i;:::-;-1:-1:-1;;;;;16495:20:0;;;;;;:9;:20;;;;;;:37;;16518:14;;16495:37;:::i;:::-;-1:-1:-1;;;;;16472:20:0;;;;;;;:9;:20;;;;;;;:60;;;;16550:43;;;;;;;;;;16578:14;160:25:1;;148:2;133:18;;14:177;16550:43:0;;;;;;;;-1:-1:-1;16611:4:0;;14834:1789;-1:-1:-1;;;;14834:1789:0:o;16882:300::-;-1:-1:-1;;;;;17012:17:0;;16975:4;17012:17;;;:9;:17;;;;;;:26;;17032:6;;17012:26;:::i;:::-;-1:-1:-1;;;;;16992:17:0;;;;;;;:9;:17;;;;;;:46;;;;17072:20;;;;;;;:29;;17095:6;;17072:29;:::i;:::-;-1:-1:-1;;;;;17049:20:0;;;;;;;:9;:20;;;;;;;:52;;;;17117:35;;;;;;;;;;17145:6;160:25:1;;148:2;133:18;;14:177;17117:35:0;;;;;;;;-1:-1:-1;17170:4:0;16882:300;;;;;:::o;6822:191::-;6896:16;6915:6;;-1:-1:-1;;;;;6932:17:0;;;-1:-1:-1;;;;;;6932:17:0;;;;;;6965:40;;6915:6;;;;;;;6965:40;;6896:16;6965:40;6885:128;6822:191;:::o;17437:1253::-;-1:-1:-1;;;;;17534:23:0;;;;;;:15;:23;;;;;;;;;:53;;-1:-1:-1;;;;;;17561:26:0;;;;;;:15;:26;;;;;;;;17534:53;17530:66;;;17437:1253;;;:::o;17530:66::-;-1:-1:-1;;;;;17625:22:0;;;;;;:14;:22;;;;;;;;:59;;17668:16;;17625:59;;;17650:15;;17625:59;17614:6;:71;;17606:101;;;;-1:-1:-1;;;17606:101:0;;16801:2:1;17606:101:0;;;16783:21:1;16840:2;16820:18;;;16813:30;-1:-1:-1;;;16859:18:1;;;16852:47;16916:18;;17606:101:0;16599:341:1;17606:101:0;17747:9;;-1:-1:-1;;;;;17726:18:0;;;;;;:7;:18;;;;;;17760:12;;17726:30;;;:::i;:::-;:46;;17718:88;;;;-1:-1:-1;;;17718:88:0;;17147:2:1;17718:88:0;;;17129:21:1;17186:2;17166:18;;;17159:30;17225:31;17205:18;;;17198:59;17274:18;;17718:88:0;16945:353:1;17718:88:0;-1:-1:-1;;;;;17831:17:0;;;;;;:9;:17;;;;;;:22;17827:261;;17906:15;7346:1;17906:2;:15;:::i;:::-;17887;;:35;;;;:::i;:::-;17877:6;:45;;:70;;;;-1:-1:-1;;;;;;17926:16:0;;;;;;:8;:16;;;;;;:21;17877:70;:107;;;;;17969:15;17951;;:33;17877:107;17869:161;;;;-1:-1:-1;;;17869:161:0;;17505:2:1;17869:161:0;;;17487:21:1;17544:2;17524:18;;;17517:30;17583:34;17563:18;;;17556:62;-1:-1:-1;;;17634:18:1;;;17627:39;17683:19;;17869:161:0;17303:405:1;17869:161:0;-1:-1:-1;;;;;18045:16:0;;;;;;:8;:16;;;;;18064:12;18045:31;;17827:261;-1:-1:-1;;;;;18112:25:0;;;;;;:14;:25;;;;;;;;18108:575;;;-1:-1:-1;;;;;;;18154:16:0;;;;;:8;:16;;;;;18173:12;18154:31;;12335:329::o;18108:575::-;18207:32;18221:6;18229:9;18207:13;:32::i;:::-;18203:480;;;18260:17;;;;:54;;;;;18299:15;18281;;:33;18260:54;:92;;;;-1:-1:-1;18326:9:0;18318:18;;;;:7;:18;;;;;;18340:12;18318:34;18260:92;:121;;;;-1:-1:-1;;;;;;18356:20:0;;;;;;:9;:20;;;;;;:25;18260:121;18256:275;;;-1:-1:-1;;;;;18402:20:0;;;;;;:9;:20;;;;;;;18425:12;18402:35;;;;18461:54;;;;;;18477:9;;18412;;18513:1;;18461:54;:::i;:::-;;;;;;;;18256:275;-1:-1:-1;;;;;18545:18:0;;;;;;:7;:18;;;;;18566:12;18545:33;;18597:9;:22;18593:78;;18646:9;18638:18;;;;:7;:18;;;;;18659:12;18638:33;;17437:1253;;;:::o;17194:235::-;17302:14;;-1:-1:-1;;;;;17335:20:0;;17280:19;17335:20;;;:9;:20;;;;;;17302:14;;17335:29;;17358:6;;17335:29;:::i;:::-;:44;;17327:94;;;;-1:-1:-1;;;17327:94:0;;18384:2:1;17327:94:0;;;18366:21:1;18423:2;18403:18;;;18396:30;18462:34;18442:18;;;18435:62;-1:-1:-1;;;18513:18:1;;;18506:35;18558:19;;17327:94:0;18182:401:1;19197:317:0;-1:-1:-1;;;;;19302:25:0;;19267:7;19302:25;;;:14;:25;;;;;;19392:14;;19302:25;;;;;19267:7;;19368:20;19302:25;19368:11;:20::i;:::-;19359:29;;:6;:29;:::i;:::-;19358:48;;;;:::i;:::-;19445:4;19427:24;;;;:9;:24;;;;;:37;;19338:68;;-1:-1:-1;19338:68:0;;19427:24;;;:37;;19338:68;;19427:37;:::i;:::-;;;;-1:-1:-1;19488:18:0;;-1:-1:-1;19497:9:0;19488:6;:18;:::i;:::-;19481:25;19197:317;-1:-1:-1;;;;;19197:317:0:o;19522:303::-;19628:10;19588:4;19613:26;;;:14;:26;;;;;;;;19612:27;:47;;;;-1:-1:-1;19653:6:0;;;;19652:7;19612:47;:71;;;;-1:-1:-1;19672:11:0;;;;19612:71;:109;;;;-1:-1:-1;;;;;;19696:25:0;;;;;;:14;:25;;;;;;;;19612:109;:161;;;;-1:-1:-1;19762:11:0;;19752:4;19734:24;;;;:9;:24;;;;;;:39;;19612:161;:205;;;;;19816:1;19801:12;;19787:11;;:26;;;;:::i;:::-;:30;19605:212;19522:303;-1:-1:-1;;19522:303:0:o;19833:1853::-;9314:6;:13;;-1:-1:-1;;9314:13:0;9323:4;9314:13;;;19929:12:::1;::::0;19915:11:::1;::::0;9314:6;;19915:26:::1;::::0;::::1;:::i;:::-;19896:45;;19952:20;19984:13;;19975:6;:22;:47;;20009:13;;19975:47;;;20000:6;19975:47;20055:4;20037:24;::::0;;;:9:::1;:24;::::0;;;;;19952:70;;-1:-1:-1;20037:39:0;-1:-1:-1;20033:84:0::1;;;-1:-1:-1::0;20111:4:0::1;20093:24;::::0;;;:9:::1;:24;::::0;;;;;20033:84:::1;20138:25;20181:16;;20166:12;;:31;;;;:::i;:::-;20138:59:::0;-1:-1:-1;20208:23:0::1;20275:8:::0;20270:1:::1;20235:32;20138:59:::0;20235:12;:32:::1;:::i;:::-;:36;;;;:::i;:::-;20234:49;;;;:::i;:::-;20208:75:::0;-1:-1:-1;20294:31:0::1;20208:75:::0;20294:31;::::1;:::i;:::-;20362:16;::::0;;20376:1:::1;20362:16:::0;;;;;::::1;::::0;;20294:31;;-1:-1:-1;20338:21:0::1;::::0;20362:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20362:16:0::1;20338:40;;20407:4;20389;20394:1;20389:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20389:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;20433:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;20433:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;20389:7;;20433:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20423:4;20428:1;20423:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20423:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;20525:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;20525:188:0;;20491:21:::1;::::0;20525:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;20597:12;;20467:21:::1;::::0;20640:4;;20667::::1;::::0;20687:15:::1;::::0;20525:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20726:17;20770:13;20746:21;:37;;;;:::i;:::-;20726:57:::0;-1:-1:-1;20794:19:0::1;20828:21;20848:1;20828:17:::0;:21:::1;:::i;:::-;20816:34;::::0;:8;:34:::1;:::i;:::-;20794:56:::0;-1:-1:-1;20863:26:0::1;20794:56:::0;20925:1:::1;20893:29;20905:17:::0;20893:9;:29:::1;:::i;:::-;:33;;;;:::i;:::-;20892:49;;;;:::i;:::-;20863:78:::0;-1:-1:-1;20952:26:0::1;20981:30;20863:78:::0;20981:9;:30:::1;:::i;:::-;20952:59:::0;-1:-1:-1;21036:22:0;;21032:243:::1;;21100:20;::::0;:56:::1;::::0;21076:18:::1;::::0;-1:-1:-1;;;;;21100:20:0::1;::::0;21133:18;;21076;21100:56;21076:18;21100:56;21133:18;21100:20;:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;21032:243:0::1;21298:19:::0;;21295:293:::1;;21333:6;::::0;21507:20:::1;::::0;21333:243:::1;::::0;-1:-1:-1;;;21333:243:0;;21409:4:::1;21333:243;::::0;::::1;20310:34:1::0;20360:18;;;20353:34;;;-1:-1:-1;20403:18:1;;;20396:34;;;20446:18;;;20439:34;-1:-1:-1;;;;;21333:6:0::1;21507:20:::0;;::::1;::::0;::::1;20489:19:1::0;;;20482:44;21546:15:0::1;20542:19:1::0;;;20535:35;21333:6:0;::::1;::::0;:22:::1;::::0;21363:18;;20244:19:1;;21333:243:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21295:293;21605:73;::::0;;9414:25:1;;;9470:2;9455:18;;9448:34;;;9498:18;;;9491:34;;;21605:73:0::1;::::0;9402:2:1;9387:18;21605:73:0::1;;;;;;;-1:-1:-1::0;;9332:6:0;:14;;-1:-1:-1;;9332:14:0;;;-1:-1:-1;;;;;;;;;19833:1853:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:548::-;767:4;796:2;825;814:9;807:21;857:6;851:13;900:6;895:2;884:9;880:18;873:34;925:1;935:140;949:6;946:1;943:13;935:140;;;1044:14;;;1040:23;;1034:30;1010:17;;;1029:2;1006:26;999:66;964:10;;935:140;;;939:3;1124:1;1119:2;1110:6;1099:9;1095:22;1091:31;1084:42;1194:2;1187;1183:7;1178:2;1170:6;1166:15;1162:29;1151:9;1147:45;1143:54;1135:62;;;;655:548;;;;:::o;1208:367::-;1271:8;1281:6;1335:3;1328:4;1320:6;1316:17;1312:27;1302:55;;1353:1;1350;1343:12;1302:55;-1:-1:-1;1376:20:1;;1419:18;1408:30;;1405:50;;;1451:1;1448;1441:12;1405:50;1488:4;1480:6;1476:17;1464:29;;1548:3;1541:4;1531:6;1528:1;1524:14;1516:6;1512:27;1508:38;1505:47;1502:67;;;1565:1;1562;1555:12;1502:67;1208:367;;;;;:::o;1580:160::-;1645:20;;1701:13;;1694:21;1684:32;;1674:60;;1730:1;1727;1720:12;1674:60;1580:160;;;:::o;1745:505::-;1837:6;1845;1853;1906:2;1894:9;1885:7;1881:23;1877:32;1874:52;;;1922:1;1919;1912:12;1874:52;1962:9;1949:23;1995:18;1987:6;1984:30;1981:50;;;2027:1;2024;2017:12;1981:50;2066:70;2128:7;2119:6;2108:9;2104:22;2066:70;:::i;:::-;2155:8;;-1:-1:-1;2040:96:1;-1:-1:-1;2209:35:1;;-1:-1:-1;2240:2:1;2225:18;;2209:35;:::i;:::-;2199:45;;1745:505;;;;;:::o;2255:131::-;-1:-1:-1;;;;;2330:31:1;;2320:42;;2310:70;;2376:1;2373;2366:12;2391:315;2459:6;2467;2520:2;2508:9;2499:7;2495:23;2491:32;2488:52;;;2536:1;2533;2526:12;2488:52;2575:9;2562:23;2594:31;2619:5;2594:31;:::i;:::-;2644:5;2696:2;2681:18;;;;2668:32;;-1:-1:-1;;;2391:315:1:o;2903:456::-;2980:6;2988;2996;3049:2;3037:9;3028:7;3024:23;3020:32;3017:52;;;3065:1;3062;3055:12;3017:52;3104:9;3091:23;3123:31;3148:5;3123:31;:::i;:::-;3173:5;-1:-1:-1;3230:2:1;3215:18;;3202:32;3243:33;3202:32;3243:33;:::i;:::-;2903:456;;3295:7;;-1:-1:-1;;;3349:2:1;3334:18;;;;3321:32;;2903:456::o;3553:388::-;3621:6;3629;3682:2;3670:9;3661:7;3657:23;3653:32;3650:52;;;3698:1;3695;3688:12;3650:52;3737:9;3724:23;3756:31;3781:5;3756:31;:::i;:::-;3806:5;-1:-1:-1;3863:2:1;3848:18;;3835:32;3876:33;3835:32;3876:33;:::i;:::-;3928:7;3918:17;;;3553:388;;;;;:::o;3946:316::-;4023:6;4031;4039;4092:2;4080:9;4071:7;4067:23;4063:32;4060:52;;;4108:1;4105;4098:12;4060:52;-1:-1:-1;;4131:23:1;;;4201:2;4186:18;;4173:32;;-1:-1:-1;4252:2:1;4237:18;;;4224:32;;3946:316;-1:-1:-1;3946:316:1:o;4267:247::-;4326:6;4379:2;4367:9;4358:7;4354:23;4350:32;4347:52;;;4395:1;4392;4385:12;4347:52;4434:9;4421:23;4453:31;4478:5;4453:31;:::i;4519:315::-;4584:6;4592;4645:2;4633:9;4624:7;4620:23;4616:32;4613:52;;;4661:1;4658;4651:12;4613:52;4700:9;4687:23;4719:31;4744:5;4719:31;:::i;:::-;4769:5;-1:-1:-1;4793:35:1;4824:2;4809:18;;4793:35;:::i;:::-;4783:45;;4519:315;;;;;:::o;4839:::-;4907:6;4915;4968:2;4956:9;4947:7;4943:23;4939:32;4936:52;;;4984:1;4981;4974:12;4936:52;5020:9;5007:23;4997:33;;5080:2;5069:9;5065:18;5052:32;5093:31;5118:5;5093:31;:::i;5159:773::-;5281:6;5289;5297;5305;5358:2;5346:9;5337:7;5333:23;5329:32;5326:52;;;5374:1;5371;5364:12;5326:52;5414:9;5401:23;5443:18;5484:2;5476:6;5473:14;5470:34;;;5500:1;5497;5490:12;5470:34;5539:70;5601:7;5592:6;5581:9;5577:22;5539:70;:::i;:::-;5628:8;;-1:-1:-1;5513:96:1;-1:-1:-1;5716:2:1;5701:18;;5688:32;;-1:-1:-1;5732:16:1;;;5729:36;;;5761:1;5758;5751:12;5729:36;;5800:72;5864:7;5853:8;5842:9;5838:24;5800:72;:::i;:::-;5159:773;;;;-1:-1:-1;5891:8:1;-1:-1:-1;;;;5159:773:1:o;6145:248::-;6213:6;6221;6274:2;6262:9;6253:7;6249:23;6245:32;6242:52;;;6290:1;6287;6280:12;6242:52;-1:-1:-1;;6313:23:1;;;6383:2;6368:18;;;6355:32;;-1:-1:-1;6145:248:1:o;6622:180::-;6681:6;6734:2;6722:9;6713:7;6709:23;6705:32;6702:52;;;6750:1;6747;6740:12;6702:52;-1:-1:-1;6773:23:1;;6622:180;-1:-1:-1;6622:180:1:o;6807:316::-;6881:6;6889;6897;6950:2;6938:9;6929:7;6925:23;6921:32;6918:52;;;6966:1;6963;6956:12;6918:52;6989:26;7005:9;6989:26;:::i;:::-;6979:36;7062:2;7047:18;;7034:32;;-1:-1:-1;7113:2:1;7098:18;;;7085:32;;6807:316;-1:-1:-1;;;6807:316:1:o;7128:248::-;7193:6;7201;7254:2;7242:9;7233:7;7229:23;7225:32;7222:52;;;7270:1;7267;7260:12;7222:52;7293:26;7309:9;7293:26;:::i;7381:180::-;7437:6;7490:2;7478:9;7469:7;7465:23;7461:32;7458:52;;;7506:1;7503;7496:12;7458:52;7529:26;7545:9;7529:26;:::i;7792:127::-;7853:10;7848:3;7844:20;7841:1;7834:31;7884:4;7881:1;7874:15;7908:4;7905:1;7898:15;7924:125;7989:9;;;8010:10;;;8007:36;;;8023:18;;:::i;8054:217::-;8094:1;8120;8110:132;;8164:10;8159:3;8155:20;8152:1;8145:31;8199:4;8196:1;8189:15;8227:4;8224:1;8217:15;8110:132;-1:-1:-1;8256:9:1;;8054:217::o;8276:168::-;8349:9;;;8380;;8397:15;;;8391:22;;8377:37;8367:71;;8418:18;;:::i;9536:351::-;9738:2;9720:21;;;9777:2;9757:18;;;9750:30;9816:29;9811:2;9796:18;;9789:57;9878:2;9863:18;;9536:351::o;9892:135::-;9931:3;9952:17;;;9949:43;;9972:18;;:::i;:::-;-1:-1:-1;10019:1:1;10008:13;;9892:135::o;10032:127::-;10093:10;10088:3;10084:20;10081:1;10074:31;10124:4;10121:1;10114:15;10148:4;10145:1;10138:15;10164:464;-1:-1:-1;;;;;10457:15:1;;;10439:34;;10509:15;;;;10504:2;10489:18;;10482:43;10556:2;10541:18;;10534:34;10616:4;10604:17;;;10599:2;10584:18;;10577:45;10388:3;10373:19;;10164:464::o;10633:136::-;10672:3;10700:5;10690:39;;10709:18;;:::i;:::-;-1:-1:-1;;;10745:18:1;;10633:136::o;10774:422::-;10863:1;10906:5;10863:1;10920:270;10941:7;10931:8;10928:21;10920:270;;;11000:4;10996:1;10992:6;10988:17;10982:4;10979:27;10976:53;;;11009:18;;:::i;:::-;11059:7;11049:8;11045:22;11042:55;;;11079:16;;;;11042:55;11158:22;;;;11118:15;;;;10920:270;;;10924:3;10774:422;;;;;:::o;11201:806::-;11250:5;11280:8;11270:80;;-1:-1:-1;11321:1:1;11335:5;;11270:80;11369:4;11359:76;;-1:-1:-1;11406:1:1;11420:5;;11359:76;11451:4;11469:1;11464:59;;;;11537:1;11532:130;;;;11444:218;;11464:59;11494:1;11485:10;;11508:5;;;11532:130;11569:3;11559:8;11556:17;11553:43;;;11576:18;;:::i;:::-;-1:-1:-1;;11632:1:1;11618:16;;11647:5;;11444:218;;11746:2;11736:8;11733:16;11727:3;11721:4;11718:13;11714:36;11708:2;11698:8;11695:16;11690:2;11684:4;11681:12;11677:35;11674:77;11671:159;;;-1:-1:-1;11783:19:1;;;11815:5;;11671:159;11862:34;11887:8;11881:4;11862:34;:::i;:::-;11932:6;11928:1;11924:6;11920:19;11911:7;11908:32;11905:58;;;11943:18;;:::i;:::-;11981:20;;11201:806;-1:-1:-1;;;11201:806:1:o;12012:140::-;12070:5;12099:47;12140:4;12130:8;12126:19;12120:4;12099:47;:::i;12157:128::-;12224:9;;;12245:11;;;12242:37;;;12259:18;;:::i;18720:251::-;18790:6;18843:2;18831:9;18822:7;18818:23;18814:32;18811:52;;;18859:1;18856;18849:12;18811:52;18891:9;18885:16;18910:31;18935:5;18910:31;:::i;18976:980::-;19238:4;19286:3;19275:9;19271:19;19317:6;19306:9;19299:25;19343:2;19381:6;19376:2;19365:9;19361:18;19354:34;19424:3;19419:2;19408:9;19404:18;19397:31;19448:6;19483;19477:13;19514:6;19506;19499:22;19552:3;19541:9;19537:19;19530:26;;19591:2;19583:6;19579:15;19565:29;;19612:1;19622:195;19636:6;19633:1;19630:13;19622:195;;;19701:13;;-1:-1:-1;;;;;19697:39:1;19685:52;;19792:15;;;;19757:12;;;;19733:1;19651:9;19622:195;;;-1:-1:-1;;;;;;;19873:32:1;;;;19868:2;19853:18;;19846:60;-1:-1:-1;;;19937:3:1;19922:19;19915:35;19834:3;18976:980;-1:-1:-1;;;18976:980:1:o;20581:306::-;20669:6;20677;20685;20738:2;20726:9;20717:7;20713:23;20709:32;20706:52;;;20754:1;20751;20744:12;20706:52;20783:9;20777:16;20767:26;;20833:2;20822:9;20818:18;20812:25;20802:35;;20877:2;20866:9;20862:18;20856:25;20846:35;;20581:306;;;;;:::o

Swarm Source

ipfs://1707b65a416fadc1fa3d99c0277f8faaacef08a8e36b9fdb6f674aa52c159a55

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Bowl aims to build a decentralized P2P lending platform on Shibarium.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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