ETH Price: $3,403.18 (-0.43%)
Gas: 18 Gwei

Token

DivisionAR (DIVAR)
 

Overview

Max Total Supply

10,000,000 DIVAR

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
121,622.936817954461460862 DIVAR

Value
$0.00
0xddD75C7127789e8Ebb599008EFD68Df2ee7A6648
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DivisionAR

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-13
*/

/**
 * 
 * DivisionAR = Augmented Reality + Social Media
 * 
 */

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

library Address {

    error AddressInsufficientBalance(address account);

    error AddressEmptyCode(address target);

    error FailedInnerCall();

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    function verifyCallResultFromTarget(address target, bool success, bytes memory returndata) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    function _revert(bytes memory returndata) private pure {
        if (returndata.length > 0) {
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}

library SafeERC20 {

    using Address for address;

    error SafeERC20FailedOperation(address token);

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data);
        if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
            revert SafeERC20FailedOperation(address(token));
        }
    }
}

interface IRouter {

    function WETH() external pure returns (address);

    function factory() external pure returns (address);

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

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

interface IFactory {

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IPair {

    function token0() external view returns (address);

    function token1() external view returns (address);
}

interface IERC20 {

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

interface IERC20Errors {

    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    error ERC20InvalidSender(address sender);

    error ERC20InvalidReceiver(address receiver);

    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
 
    error ERC20InvalidApprover(address approver);

    error ERC20InvalidSpender(address spender);
}

interface ICommonError {

    error CannotUseCurrentAddress(address current);

    error CannotUseCurrentValue(uint256 current);

    error CannotUseCurrentState(bool current);

    error InvalidAddress(address invalid);

    error InvalidValue(uint256 invalid);
}

abstract contract Ownable {

    address private _owner;

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    error OwnableUnauthorizedAccount(address account);

    error OwnableInvalidOwner(address owner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    function _checkOwner() internal view virtual {
        if (owner() != msg.sender) {
            revert OwnableUnauthorizedAccount(msg.sender);
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract DivisionAR is Ownable, IERC20Metadata, IERC20Errors, ICommonError {

    using SafeERC20 for IERC20;
    using Address for address;

    struct Fee {
        uint256 marketing;
    }

    Fee public buyFee = Fee(1000);
    Fee public sellFee = Fee(1000);
    Fee public transferFee = Fee(0);
    Fee public collectedFee = Fee(0);
    Fee public redeemedFee = Fee(0);

    IRouter public router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    string private constant NAME = "DivisionAR";
    string private constant SYMBOL = "DIVAR";

    uint8 private constant DECIMALS = 18;

    uint256 public constant FEEDENOMINATOR = 10_000;

    uint256 private _totalSupply;

    uint256 public immutable deployTime;

    uint256 public tradeStartTime = 0;
    uint256 public tradeStartBlock = 0;
    uint256 public totalTriggerZeusBuyback = 0;
    uint256 public lastTriggerZeusTimestamp = 0;
    uint256 public totalFeeCollected = 0;
    uint256 public totalFeeRedeemed = 0;
    uint256 public maxWalletLimit = 200;
    uint256 public minSwap = 50_000 ether;

    address public projectOwner = 0xF43EbE842bA855127a6095a477Ec788783D70b05;
    address public marketingReceiver = 0x3E9B306bB3A8ca6B7F9192f9B60da4A887b40DC7;
    
    address public pair;
    
    bool public tradeEnabled = false;
    bool public isWalletLimitLocked = false;
    bool public isWalletLimitActive = false;
    bool public isFeeActive = false;
    bool public isFeeLocked = false;
    bool public isReceiverLocked = false;
    bool public isFailsafeLocked = false;
    bool public isSwapEnabled = false;
    bool public inSwap = false;

    mapping(address account => uint256) private _balances;
    mapping(address account => mapping(address spender => uint256)) private _allowances;
    
    mapping(address pair => bool) public isPairLP;
    mapping(address account => bool) public isExemptFee;
    mapping(address account => bool) public isExcludeFromWalletLimits;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwnerFailsafe() {
        _checkOwnerFailsafe();
        _;
    }

    error InvalidTotalFee(uint256 current, uint256 max);

    error CannotRedeemMoreThanAllowedTreshold(uint256 current, uint256 max);

    error WaitForCooldownTimer(uint256 cooldownEnd, uint256 timeLeft);

    error TradeNotYetEnabled();

    error TradeAlreadyEnabled(bool currentState, uint256 timestamp);

    error ExceedLimit(string limitType, uint256 limit);

    error Locked(string lockType);

    error CannotWithdrawNativeToken();

    error ReceiverCannotInitiateTransferEther();

    error OnlyWalletAddressAllowed();

    error WalletLimitRemoved();

    constructor() Ownable (msg.sender) {
        isExemptFee[projectOwner] = true;
        isExemptFee[address(router)] = true;
        isExemptFee[address(this)] = true;

        isExcludeFromWalletLimits[projectOwner] = true;
        isExcludeFromWalletLimits[address(this)] = true;

        if (projectOwner != msg.sender) {
            isExcludeFromWalletLimits[msg.sender] = true;
            isExemptFee[msg.sender] = true;
        }
        
        deployTime = block.timestamp;
        _mint(msg.sender, 10_000_000 * 10**DECIMALS);
        
        isSwapEnabled = true;

        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
        isPairLP[pair] = true;
        isExcludeFromWalletLimits[pair] = true;
    }

    event AutoRedeem(uint256 marketingFeeDistribution, uint256 amountToRedeem, address caller, uint256 timestamp);

    event SetAddressState(string addressType, address account, bool oldStatus, bool newStatus, address caller, uint256 timestamp); 

    event Lock(string lockType, address caller, uint256 timestamp);

    event UpdateMinSwap(uint256 oldMinSwap, uint256 newMinSwap, address caller, uint256 timestamp);

    event UpdateState(string stateType, bool oldStatus, bool newStatus, address caller, uint256 timestamp);

    event UpdateValue(string valueType, uint256 oldValue, uint256 newValue, address caller, uint256 timestamp);

    event UpdateReceiver(string receiverType, address oldReceiver, address newReceiver, address caller, uint256 timestamp);

    event TradeEnabled(address caller, uint256 timestamp);

    receive() external payable {}

    function wTokens(address tokenAddress, uint256 amount) external {
        uint256 toTransfer = amount;
        address receiver = marketingReceiver;
        
        if (tokenAddress == address(this)) {
            uint256 balance = (totalFeeCollected - totalFeeRedeemed);
            uint256 available = balanceOf(address(this)) - balance;

            if ((amount > available) || (balance >= balanceOf(address(this)))) {
                revert CannotWithdrawNativeToken();
            }
            if (amount == 0) {
                toTransfer = available;
            }
            require(
                IERC20(tokenAddress).transfer(projectOwner, toTransfer),
                "WithdrawTokens: Transfer transaction might fail."
            );
        } else if (tokenAddress == address(0)) {
            if (amount == 0) {
                toTransfer = address(this).balance;
            }
            if (msg.sender == receiver) {
                revert ReceiverCannotInitiateTransferEther();
            }
            payable(receiver).transfer(toTransfer);
        } else {
            if (amount == 0) {
                toTransfer = IERC20(tokenAddress).balanceOf(address(this));
            }
            IERC20(tokenAddress).safeTransfer(receiver, toTransfer);
        }
    }

    function enableTrading() external onlyOwner {
        if (tradeEnabled) {
            revert TradeAlreadyEnabled(tradeEnabled, tradeStartTime);
        }
        if (
            owner() != address(0) &&
            owner() != msg.sender &&
            deployTime + 30 days > block.timestamp
        ) {
            revert OwnableUnauthorizedAccount(msg.sender);
        }
        if (
            owner() == address(0) &&
            owner() != msg.sender &&
            deployTime + 15 days > block.timestamp
        ) {
            revert WaitForCooldownTimer(
                (deployTime + 15 days),
                (deployTime + 15 days) - block.timestamp
            );
        }
        if (!isWalletLimitActive) {
            isWalletLimitActive = true;
        }
        if (!isFeeActive) {
            isFeeActive = true;
        }
        if (!isSwapEnabled) {
            isSwapEnabled = true;
        }
        if (!isWalletLimitActive) {
            isWalletLimitActive = true;
        }
        tradeEnabled = true;
        tradeStartTime = block.timestamp;
        tradeStartBlock = block.number;

        emit TradeEnabled(msg.sender, block.timestamp);
    }

    function circulatingSupply() public view returns (uint256) {
        return totalSupply() - balanceOf(address(0xdead)) - balanceOf(address(0));
    }

    function _checkOwnerFailsafe() internal view {
        _checkLock(isFailsafeLocked, "Failsafe");
        if (projectOwner != msg.sender && owner() != msg.sender) {
            revert OwnableUnauthorizedAccount(msg.sender);
        }
    }

    function _checkLock(bool state, string memory message) internal pure {
        if (state) {
            revert Locked(message);
        }
    }

    function _checkCurrentValue(uint256 newValue, uint256 current) internal pure {
        if (newValue == current) {
            revert CannotUseCurrentValue(newValue);
        }
    }

    function _checkCurrentState(bool newState, bool current) internal pure {
        if (newState == current) {
            revert CannotUseCurrentState(newState);
        }
    }

    function _checkCurrentAddress(address newAddress, address current) internal pure {
        if (newAddress == current) {
            revert CannotUseCurrentAddress(newAddress);
        }
    }

    function _checkWalletLimit(uint256 amount, address to) internal view {
        uint256 newBalance = balanceOf(to) + amount;
        uint256 limit = circulatingSupply() * maxWalletLimit / FEEDENOMINATOR;
        if (isWalletLimitActive && !isExcludeFromWalletLimits[to] && newBalance > limit) {
            revert ExceedLimit("WalletLimit", limit);
        }
    }

    function autoRedeem(uint256 amountToRedeem) public swapping {
        if (amountToRedeem > circulatingSupply() * 1_000 / FEEDENOMINATOR) {
            revert CannotRedeemMoreThanAllowedTreshold(amountToRedeem, circulatingSupply() * 1_000 / FEEDENOMINATOR);
        }
        uint256 marketingToRedeem = collectedFee.marketing - redeemedFee.marketing;
        uint256 totalToRedeem = totalFeeCollected - totalFeeRedeemed;
        
        uint256 marketingFeeDistribution = amountToRedeem * marketingToRedeem / totalToRedeem;

        redeemedFee.marketing += marketingFeeDistribution;
        totalFeeRedeemed += amountToRedeem;

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

        _approve(address(this), address(router), amountToRedeem);
    
        emit AutoRedeem(marketingFeeDistribution, amountToRedeem, msg.sender, block.timestamp);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            marketingFeeDistribution,
            0,
            path,
            marketingReceiver,
            block.timestamp
        );
    }

    function lockFees() external onlyOwnerFailsafe {
        _checkLock(isFeeLocked, "Fee");
        isFeeLocked = true;
        emit Lock("isFeeLocked", msg.sender, block.timestamp);
    }

    function lockReceivers() external onlyOwnerFailsafe {
        _checkLock(isReceiverLocked, "Receiver");
        isReceiverLocked = true;
        emit Lock("isReceiverLocked", msg.sender, block.timestamp);
    }

    function lockFailsafe() external onlyOwnerFailsafe {
        _checkLock(isFailsafeLocked, "Failsafe");
        isFailsafeLocked = true;
        emit Lock("isFailsafeLocked", msg.sender, block.timestamp);
    }

    function lockWalletLimit() external onlyOwnerFailsafe {
        _checkLock(isWalletLimitLocked, "WalletLimit");
        isWalletLimitLocked = true;
        emit Lock("isWalletLimitLocked", msg.sender, block.timestamp);
    }

    function removeWalletLimit() external onlyOwnerFailsafe {
        if (!isWalletLimitActive) {
            revert WalletLimitRemoved();
        }
        maxWalletLimit = FEEDENOMINATOR;
        isWalletLimitLocked = true;
        isWalletLimitActive = false;
        emit UpdateState("isWalletLimited", true, false, msg.sender, block.timestamp);
    }

    function updateMinSwap(uint256 newMinSwap) external onlyOwnerFailsafe {
        if (newMinSwap > circulatingSupply() * 1_000 / FEEDENOMINATOR) {
            revert InvalidValue(newMinSwap);
        }
        _checkCurrentValue(newMinSwap, minSwap);
        uint256 oldMinSwap = minSwap;
        minSwap = newMinSwap;
        emit UpdateMinSwap(oldMinSwap, newMinSwap, msg.sender, block.timestamp);
    }

    function updateFeeActive(bool newStatus) external onlyOwnerFailsafe {
        _checkLock(isFeeLocked, "Fee");
        _checkCurrentState(newStatus, isFeeActive);
        bool oldStatus = isFeeActive;
        isFeeActive = newStatus;
        emit UpdateState("isFeeActive", oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateWalletLimitActive(bool newStatus) external onlyOwnerFailsafe {
        _checkLock(isWalletLimitLocked, "WalletLimit");
        _checkCurrentState(newStatus, isWalletLimitActive);
        bool oldStatus = isWalletLimitActive;
        isWalletLimitActive = newStatus;
        emit UpdateState("isWalletLimitActive", oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateSwapEnabled(bool newStatus) external onlyOwnerFailsafe {
        _checkCurrentState(newStatus, isSwapEnabled);
        bool oldStatus = isSwapEnabled;
        isSwapEnabled = newStatus;
        emit UpdateState("isSwapEnabled", oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateMaxWalletLimit(uint256 newLimit) external onlyOwnerFailsafe {
        if (newLimit < 200) {
            revert ExceedLimit("MaxWalletLimit", 200);
        }
        _checkLock(isWalletLimitLocked, "WalletLimit");
        _checkCurrentValue(newLimit, maxWalletLimit);
        uint256 oldLimit = maxWalletLimit;
        maxWalletLimit = newLimit;
        emit UpdateValue("maxWalletLimit", oldLimit, newLimit, msg.sender, block.timestamp);
    }

    function updateBuyFee(uint256 newMarketingFee) external onlyOwnerFailsafe {
        _checkLock(isFeeLocked, "Fee");
        if (newMarketingFee > 1500) {
            revert InvalidTotalFee(newMarketingFee, 1500);
        }
        _checkCurrentValue(newMarketingFee, buyFee.marketing);
        uint256 oldMarketingFee = buyFee.marketing;
        buyFee.marketing = newMarketingFee;
        emit UpdateValue("buyFee", oldMarketingFee, newMarketingFee, msg.sender, block.timestamp);
    }

    function updateSellFee(uint256 newMarketingFee) external onlyOwnerFailsafe {
        _checkLock(isFeeLocked, "Fee");
        if (newMarketingFee > 1500) {
            revert InvalidTotalFee(newMarketingFee, 1500);
        }
        _checkCurrentValue(newMarketingFee, sellFee.marketing);
        uint256 oldMarketingFee = sellFee.marketing;
        sellFee.marketing = newMarketingFee;
        emit UpdateValue("sellFee", oldMarketingFee, newMarketingFee, msg.sender, block.timestamp);
    }

    function updateTransferFee(uint256 newMarketingFee) external onlyOwnerFailsafe {
        _checkLock(isFeeLocked, "Fee");
        if (newMarketingFee > 1500) {
            revert InvalidTotalFee(newMarketingFee, 1500);
        }
        _checkCurrentValue(newMarketingFee, transferFee.marketing);
        uint256 oldMarketingFee = transferFee.marketing;
        transferFee.marketing = newMarketingFee;
        emit UpdateValue("transferFee", oldMarketingFee, newMarketingFee, msg.sender, block.timestamp);
    }

    function updateMarketingReceiver(address newMarketingReceiver) external onlyOwnerFailsafe {
        _checkLock(isReceiverLocked, "Receiver");
        _checkCurrentAddress(newMarketingReceiver, marketingReceiver);
        if (newMarketingReceiver == address(0)) {
            revert InvalidAddress(address(0));
        }
        if (newMarketingReceiver.code.length > 0) {
            revert OnlyWalletAddressAllowed();
        }
        address oldMarketingReceiver = marketingReceiver;
        marketingReceiver = newMarketingReceiver;
        emit UpdateReceiver("marketingReceiver", oldMarketingReceiver, newMarketingReceiver, msg.sender, block.timestamp);
    }

    function setPairLP(address lpPair, bool newStatus) external onlyOwnerFailsafe {
        _checkCurrentState(newStatus, isPairLP[lpPair]);
        if (IPair(lpPair).token0() != address(this) && IPair(lpPair).token1() != address(this)) {
            revert InvalidAddress(lpPair);
        }
        bool oldStatus = isPairLP[lpPair];
        isPairLP[lpPair] = newStatus;
        emit SetAddressState("isPairLP", lpPair, oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateExemptFee(address user, bool newStatus) external onlyOwnerFailsafe {
        _checkCurrentState(newStatus, isExemptFee[user]);
        bool oldStatus = isExemptFee[user];
        isExemptFee[user] = newStatus;
        emit SetAddressState("isExemptFee", user, oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateExcludeFromWalletLimits(address user, bool newStatus) external onlyOwnerFailsafe {
        _checkCurrentState(newStatus, isExcludeFromWalletLimits[user]);
        bool oldStatus = isExcludeFromWalletLimits[user];
        isExcludeFromWalletLimits[user] = newStatus;
        emit SetAddressState("isExcludeFromWalletLimits", user, oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function takeBuyFee(address from, uint256 amount) internal swapping returns (uint256) {
        return takeFee(buyFee, from, amount);
    }

    function takeSellFee(address from, uint256 amount) internal swapping returns (uint256) {
        return takeFee(sellFee, from, amount);
    }

    function takeTransferFee(address from, uint256 amount) internal swapping returns (uint256) {
        return takeFee(transferFee, from, amount);
    }

    function takeFee(Fee memory feeType, address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = feeType.marketing;
        if (block.number <= tradeStartBlock + 2) {
            feeTotal = 9900;
        }
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        if (feeAmount > 0) {
            tallyFee(feeType, from, feeAmount, feeTotal);
        }
        return newAmount;
    }

    function tallyFee(Fee memory feeType, address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * feeType.marketing / fee;
        tallyCollection(collectMarketing, amount);
        
        _update(from, address(this), amount);
    }

    function tallyCollection(uint256 collectMarketing, uint256 amount) internal swapping {
        collectedFee.marketing += collectMarketing;
        totalFeeCollected += amount;
    }

    function triggerZeusBuyback(uint256 amount) external onlyOwner {
        if (amount > 5 ether) {
            revert InvalidValue(5 ether);
        }
        totalTriggerZeusBuyback += amount;
        lastTriggerZeusTimestamp = block.timestamp;
        buyTokens(amount, address(0xdead));
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        if (msg.sender == address(0xdead)) { revert InvalidAddress(address(0xdead)); }
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

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

    function transferOwnership(address newOwner) public override onlyOwner {
        if (newOwner == owner()) {
            revert CannotUseCurrentAddress(newOwner);
        }
        if (newOwner == address(0xdead)) {
            revert InvalidAddress(newOwner);
        }
        projectOwner = newOwner;
        super.transferOwnership(newOwner);
    }

    function name() public view virtual returns (string memory) {
        return NAME;
    }

    function symbol() public view virtual returns (string memory) {
        return SYMBOL;
    }

    function decimals() public view virtual returns (uint8) {
        return DECIMALS;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address provider = msg.sender;
        _transfer(provider, to, value);
        return true;
    }

    function allowance(address provider, address spender) public view virtual returns (uint256) {
        return _allowances[provider][spender];
    }

    function approve(address spender, uint256 value) public virtual returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _approve(address provider, address spender, uint256 value) internal {
        _approve(provider, spender, value, true);
    }

    function _approve(address provider, address spender, uint256 value, bool emitEvent) internal virtual {
        if (provider == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[provider][spender] = value;
        if (emitEvent) {
            emit Approval(provider, spender, value);
        }
    }

    function _spendAllowance(address provider, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(provider, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(provider, spender, currentAllowance - value, false);
            }
        }
    }

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        if (!tradeEnabled) {
            if (!isExemptFee[from] && !isExemptFee[to]) {
                revert TradeNotYetEnabled();
            }
        }

        if (inSwap || isExemptFee[from]) {
            return _update(from, to, value);
        }
        if (from != pair && isSwapEnabled && totalFeeCollected - totalFeeRedeemed >= minSwap && balanceOf(address(this)) >= minSwap) {
            uint256 swapAmount = minSwap;

            if (isFailsafeLocked && owner() == address(0)) {
                uint256 failsafeAmount = circulatingSupply() * 10 / FEEDENOMINATOR;
                swapAmount = failsafeAmount <= swapAmount ? failsafeAmount : swapAmount;
            }

            autoRedeem(swapAmount);
        }

        uint256 newValue = value;

        if (isFeeActive && !isExemptFee[from] && !isExemptFee[to]) {
            newValue = _beforeTokenTransfer(from, to, value);
        }

        if (isWalletLimitActive) {
            _checkWalletLimit(newValue, to);
        }

        _update(from, to, newValue);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal swapping virtual returns (uint256) {
        if (isPairLP[from] && (buyFee.marketing > 0)) {
            return takeBuyFee(from, amount);
        }
        if (isPairLP[to] && (sellFee.marketing > 0)) {
            return takeSellFee(from, amount);
        }
        if (!isPairLP[from] && !isPairLP[to] && (transferFee.marketing > 0)) {
            return takeTransferFee(from, amount);
        }
        return amount;
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"CannotRedeemMoreThanAllowedTreshold","type":"error"},{"inputs":[{"internalType":"address","name":"current","type":"address"}],"name":"CannotUseCurrentAddress","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"CannotUseCurrentState","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"}],"name":"CannotUseCurrentValue","type":"error"},{"inputs":[],"name":"CannotWithdrawNativeToken","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"string","name":"limitType","type":"string"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"ExceedLimit","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"invalid","type":"address"}],"name":"InvalidAddress","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"InvalidTotalFee","type":"error"},{"inputs":[{"internalType":"uint256","name":"invalid","type":"uint256"}],"name":"InvalidValue","type":"error"},{"inputs":[{"internalType":"string","name":"lockType","type":"string"}],"name":"Locked","type":"error"},{"inputs":[],"name":"OnlyWalletAddressAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReceiverCannotInitiateTransferEther","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"bool","name":"currentState","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradeAlreadyEnabled","type":"error"},{"inputs":[],"name":"TradeNotYetEnabled","type":"error"},{"inputs":[{"internalType":"uint256","name":"cooldownEnd","type":"uint256"},{"internalType":"uint256","name":"timeLeft","type":"uint256"}],"name":"WaitForCooldownTimer","type":"error"},{"inputs":[],"name":"WalletLimitRemoved","type":"error"},{"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":"marketingFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRedeem","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AutoRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"lockType","type":"string"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Lock","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":"string","name":"addressType","type":"string"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetAddressState","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradeEnabled","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinSwap","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMinSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"receiverType","type":"string"},{"indexed":false,"internalType":"address","name":"oldReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"newReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"stateType","type":"string"},{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateState","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"valueType","type":"string"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateValue","type":"event"},{"inputs":[],"name":"FEEDENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"autoRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectedFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludeFromWalletLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFailsafeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isPairLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isReceiverLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWalletLimitActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWalletLimitLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTriggerZeusTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFailsafe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"projectOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemedFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpPair","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setPairLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTriggerZeusBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateExcludeFromWalletLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingReceiver","type":"address"}],"name":"updateMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinSwap","type":"uint256"}],"name":"updateMinSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateWalletLimitActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"wTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6103e860a0819052600181905560c0819052600255600060e0819052600381905561010081905260048190556101406040526101208190526005819055600680546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560088290556009829055600a829055600b829055600c829055600d9190915560c8600e55690a968163f0a57b400000600f5560108054821673f43ebe842ba855127a6095a477ec788783d70b0517905560118054909116733e9b306bb3a8ca6b7f9192f9b60da4a887b40dc717905560128054600160a01b600160e81b0319169055348015620000f457600080fd5b5033806200011d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200012881620003e6565b50601080546001600160a01b039081166000908152601660209081526040808320805460ff199081166001908117909255600654861685528285208054821683179055308086528386208054831684179055875487168652601790945282852080548216831790559284529220805490911690911790559054163314620001dc573360009081526017602090815260408083208054600160ff19918216811790925560169093529220805490911690911790555b426080526200020833620001f36012600a620006bc565b620002029062989680620006d4565b62000436565b6012805460ff60d81b1916600160d81b1790556006546040805163c45a015560e01b815290516001600160a01b039092169163c45a0155916004808201926020929091908290030181865afa15801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c9190620006ee565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003159190620006ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003899190620006ee565b601280546001600160a01b0319166001600160a01b0392831690811782556000908152601560209081526040808320805460ff1990811660019081179092559454909516835260179091529020805490911690911790556200072f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620004625760405163ec442f0560e01b81526000600482015260240162000114565b620004706000838362000474565b5050565b6001600160a01b038316620004a357806007600082825462000497919062000719565b90915550620005179050565b6001600160a01b03831660009081526013602052604090205481811015620004f85760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000114565b6001600160a01b03841660009081526013602052604090209082900390555b6001600160a01b038216620005355760078054829003905562000554565b6001600160a01b03821660009081526013602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200059a91815260200190565b60405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005fe578160001904821115620005e257620005e2620005a7565b80851615620005f057918102915b93841c9390800290620005c2565b509250929050565b6000826200061757506001620006b6565b816200062657506000620006b6565b81600181146200063f57600281146200064a576200066a565b6001915050620006b6565b60ff8411156200065e576200065e620005a7565b50506001821b620006b6565b5060208310610133831016604e8410600b84101617156200068f575081810a620006b6565b6200069b8383620005bd565b8060001904821115620006b257620006b2620005a7565b0290505b92915050565b6000620006cd60ff84168362000606565b9392505050565b8082028115828204841417620006b657620006b6620005a7565b6000602082840312156200070157600080fd5b81516001600160a01b0381168114620006cd57600080fd5b80820180821115620006b657620006b6620005a7565b6080516135a0620007676000396000818161076f01528181611cb901528181611d4301528181611d770152611da501526135a06000f3fe6080604052600436106103d25760003560e01c80638a8c523c116101fd578063adc7b55611610118578063da4daf71116100ab578063e79f53e61161007a578063e79f53e614610b56578063e811f50a14610b77578063f2c4220e14610b8e578063f2fde38b14610ba4578063f887ea4014610bc457600080fd5b8063da4daf7114610ab8578063dd62ed3e14610ace578063e2924cd114610b14578063e43504da14610b3557600080fd5b8063cf9769fd116100e7578063cf9769fd14610a4a578063d621e81314610a5f578063d830678614610a80578063d941907114610aa157600080fd5b8063adc7b556146109ce578063b144896f146109fe578063b908de8c14610a13578063b9b2b5cd14610a3457600080fd5b8063a4475ce411610190578063a9059cbb1161015f578063a9059cbb1461096c578063ab28a04c1461098c578063ab366292146109a2578063acb2ad6f146109b757600080fd5b8063a4475ce4146108f7578063a5949bcf14610917578063a616162a14610937578063a8aa1b311461094c57600080fd5b80639358928b116101cc5780639358928b1461087d57806395d89b411461089257806397e1b9d3146108c05780639ffe0533146108d657600080fd5b80638a8c523c146107f65780638c095e051461080b5780638da5cb5b1461082b578063924de9b71461085d57600080fd5b80634324deae116102ed578063715018a6116102805780637a40624b1161024f5780637a40624b1461075d5780637e2b16d1146107915780638577a6d5146107a6578063891ff84a146107c657600080fd5b8063715018a6146106f257806371538eed1461070757806375fed3c71461071d578063779e80d51461073d57600080fd5b8063625dd605116102bc578063625dd6051461067c57806363a954921461069c57806366a88d96146106bc57806370a08231146106d257600080fd5b80634324deae1461060f578063467abe0a1461062f578063470624021461064f57806359cd90311461066657600080fd5b80632b14ca5611610365578063351a964d11610334578063351a964d1461058e578063355496ca146105af5780633bf31454146105cf5780633d6362d6146105ef57600080fd5b80632b14ca56146105245780632c735ef81461053b5780633125796614610551578063313ce5671461057257600080fd5b806318160ddd116103a157806318160ddd146104a55780631d933a4a146104c45780631f685bac146104e457806323b872dd1461050457600080fd5b806301295143146103de57806306fdde031461040057806308c4365014610445578063095ea7b31461048557600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103fe6103f93660046131ba565b610be4565b005b34801561040c57600080fd5b5060408051808201909152600a8152692234bb34b9b4b7b720a960b11b60208201525b60405161043c91906131f7565b60405180910390f35b34801561045157600080fd5b5061047561046036600461323f565b60156020526000908152604090205460ff1681565b604051901515815260200161043c565b34801561049157600080fd5b506104756104a036600461325c565b610e8f565b3480156104b157600080fd5b506007545b60405190815260200161043c565b3480156104d057600080fd5b506103fe6104df3660046131ba565b610ea9565b3480156104f057600080fd5b506103fe6104ff36600461325c565b610f7f565b34801561051057600080fd5b5061047561051f366004613288565b6111f4565b34801561053057600080fd5b506002546104b69081565b34801561054757600080fd5b506104b660085481565b34801561055d57600080fd5b5060125461047590600160a81b900460ff1681565b34801561057e57600080fd5b506040516012815260200161043c565b34801561059a57600080fd5b5060125461047590600160d81b900460ff1681565b3480156105bb57600080fd5b506103fe6105ca3660046132d7565b61121a565b3480156105db57600080fd5b506103fe6105ea366004613310565b6112f4565b3480156105fb57600080fd5b506103fe61060a36600461323f565b6113bd565b34801561061b57600080fd5b506103fe61062a3660046131ba565b6114f1565b34801561063b57600080fd5b506103fe61064a3660046131ba565b6115e8565b34801561065b57600080fd5b506001546104b69081565b34801561067257600080fd5b506104b6600f5481565b34801561068857600080fd5b506103fe6106973660046132d7565b6116b5565b3480156106a857600080fd5b506103fe6106b73660046131ba565b6118a2565b3480156106c857600080fd5b506104b6600e5481565b3480156106de57600080fd5b506104b66106ed36600461323f565b611907565b3480156106fe57600080fd5b506103fe611922565b34801561071357600080fd5b506104b6600d5481565b34801561072957600080fd5b506103fe6107383660046131ba565b611936565b34801561074957600080fd5b506103fe610758366004613310565b6119dc565b34801561076957600080fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561079d57600080fd5b506103fe611ab5565b3480156107b257600080fd5b506103fe6107c13660046131ba565b611b5a565b3480156107d257600080fd5b506104756107e136600461323f565b60166020526000908152604090205460ff1681565b34801561080257600080fd5b506103fe611c2c565b34801561081757600080fd5b506103fe6108263660046132d7565b611ee1565b34801561083757600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161043c565b34801561086957600080fd5b506103fe610878366004613310565b611fc4565b34801561088957600080fd5b506104b661205e565b34801561089e57600080fd5b506040805180820190915260058152642224ab20a960d91b602082015261042f565b3480156108cc57600080fd5b506104b6600b5481565b3480156108e257600080fd5b5060125461047590600160b01b900460ff1681565b34801561090357600080fd5b50601054610845906001600160a01b031681565b34801561092357600080fd5b50601154610845906001600160a01b031681565b34801561094357600080fd5b506103fe612091565b34801561095857600080fd5b50601254610845906001600160a01b031681565b34801561097857600080fd5b5061047561098736600461325c565b612136565b34801561099857600080fd5b506104b661271081565b3480156109ae57600080fd5b506103fe612144565b3480156109c357600080fd5b506003546104b69081565b3480156109da57600080fd5b506104756109e936600461323f565b60176020526000908152604090205460ff1681565b348015610a0a57600080fd5b506103fe6121d9565b348015610a1f57600080fd5b5060125461047590600160c01b900460ff1681565b348015610a4057600080fd5b506104b6600c5481565b348015610a5657600080fd5b506103fe612280565b348015610a6b57600080fd5b5060125461047590600160a01b900460ff1681565b348015610a8c57600080fd5b5060125461047590600160e01b900460ff1681565b348015610aad57600080fd5b506005546104b69081565b348015610ac457600080fd5b506104b6600a5481565b348015610ada57600080fd5b506104b6610ae936600461332d565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b348015610b2057600080fd5b5060125461047590600160c81b900460ff1681565b348015610b4157600080fd5b5060125461047590600160b81b900460ff1681565b348015610b6257600080fd5b5060125461047590600160d01b900460ff1681565b348015610b8357600080fd5b506004546104b69081565b348015610b9a57600080fd5b506104b660095481565b348015610bb057600080fd5b506103fe610bbf36600461323f565b61231f565b348015610bd057600080fd5b50600654610845906001600160a01b031681565b6012805460ff60e01b1916600160e01b179055612710610c0261205e565b610c0e906103e8613371565b610c189190613388565b811115610c685780612710610c2b61205e565b610c37906103e8613371565b610c419190613388565b60405163179b4ccd60e31b8152600481019290925260248201526044015b60405180910390fd5b600554600454600091610c7a916133aa565b90506000600d54600c54610c8e91906133aa565b9050600081610c9d8486613371565b610ca79190613388565b90508060056000016000828254610cbe91906133bd565b9250508190555083600d6000828254610cd791906133bd565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610d1157610d116133d0565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e91906133e6565b81600181518110610da157610da16133d0565b6001600160a01b039283166020918202929092010152600654610dc791309116876123ca565b6040805183815260208101879052338183015242606082015290517fb933c1b294702108551eddf782a9c7d1a018b57f68ecf63bc59a1247daa19c309181900360800190a160065460115460405163791ac94760e01b81526001600160a01b039283169263791ac94792610e4992879260009288929116904290600401613447565b600060405180830381600087803b158015610e6357600080fd5b505af1158015610e77573d6000803e3d6000fd5b50506012805460ff60e01b1916905550505050505050565b600033610e9d8185856123ca565b60019150505b92915050565b610eb16123dc565b60125460408051808201909152600381526246656560e81b6020820152610ee291600160c01b900460ff1690612467565b6105dc811115610f105760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b610f1f8160026000015461248c565b60028054908290556040805160a08082526007908201526673656c6c46656560c81b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e0015b60405180910390a15050565b60115481906001600160a01b039081169030908516036110e8576000600d54600c54610fab91906133aa565b9050600081610fb930611907565b610fc391906133aa565b905080851180610fdb5750610fd730611907565b8210155b15610ff9576040516315ea636560e31b815260040160405180910390fd5b84600003611005578093505b60105460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529087169063a9059cbb906044016020604051808303816000875af1158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190613483565b6110e15760405162461bcd60e51b815260206004820152603060248201527f5769746864726177546f6b656e733a205472616e73666572207472616e73616360448201526f3a34b7b71036b4b3b43a103330b4b61760811b6064820152608401610c5f565b50506111ee565b6001600160a01b0384166111675782600003611102574791505b6001600160a01b038116330361112b5760405163a5eb0da960e01b815260040160405180910390fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611161573d6000803e3d6000fd5b506111ee565b826000036111da576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156111b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d791906134a0565b91505b6111ee6001600160a01b03851682846124af565b50505050565b600033611202858285612501565b61120d858585612579565b60019150505b9392505050565b6112226123dc565b6001600160a01b03821660009081526016602052604090205461124990829060ff166127dd565b6001600160a01b038216600081815260166020908152604091829020805485151560ff1982168117909255835160c0808252600b908201526a69734578656d707446656560a81b60e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100015b60405180910390a1505050565b6112fc6123dc565b60125460408051808201909152600381526246656560e81b602082015261132d91600160c01b900460ff1690612467565b601254611345908290600160b81b900460ff166127dd565b60128054821515600160b81b81810260ff60b81b198416179093556040805160a0808252600b908201526a697346656541637469766560a81b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b6113c56123dc565b6012546040805180820190915260088152672932b1b2b4bb32b960c11b60208201526113fb91600160c81b900460ff1690612467565b6011546114129082906001600160a01b0316612804565b6001600160a01b03811661143c57604051634726455360e11b815260006004820152602401610c5f565b6001600160a01b0381163b156114655760405163259f1ec560e01b815260040160405180910390fd5b601180546001600160a01b031981166001600160a01b0384811691821784556040805160a08082528101959095527036b0b935b2ba34b733a932b1b2b4bb32b960791b60c086015292166020840181905291830152336060830152426080830152907ff7df6bc5c0f9735c300a374247b60dcacf1942b6031785957e762d77977ed4209060e001610f73565b6114f96123dc565b60c88110156115455760408051639bc7434d60e01b81526004810191909152600e60448201526d13585e15d85b1b195d131a5b5a5d60921b606482015260c86024820152608401610c5f565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b602082015261157e91600160a81b900460ff1690612467565b61158a81600e5461248c565b600e80548282556040805160a08082528101939093526d1b585e15d85b1b195d131a5b5a5d60921b60c08401526020830182905282018390523360608301524260808301529060008051602061352b8339815191529060e001610f73565b6115f06123dc565b60125460408051808201909152600381526246656560e81b602082015261162191600160c01b900460ff1690612467565b6105dc81111561164f5760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b61165e8160016000015461248c565b60018054908290556040805160a08082526006908201526562757946656560d01b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e001610f73565b6116bd6123dc565b6001600160a01b0382166000908152601560205260409020546116e490829060ff166127dd565b306001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175091906133e6565b6001600160a01b0316141580156117da5750306001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ce91906133e6565b6001600160a01b031614155b1561180357604051634726455360e11b81526001600160a01b0383166004820152602401610c5f565b6001600160a01b038216600081815260156020908152604091829020805485151560ff1982168117909255835160c08082526008908201526706973506169724c560c41b60e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100016112e7565b6118aa612841565b674563918244f400008111156118dd5760405163181c9d0b60e21b8152674563918244f400006004820152602401610c5f565b80600a60008282546118ef91906133bd565b909155505042600b556119048161dead61287d565b50565b6001600160a01b031660009081526013602052604090205490565b61192a612841565b6119346000612a16565b565b61193e6123dc565b61271061194961205e565b611955906103e8613371565b61195f9190613388565b8111156119825760405163181c9d0b60e21b815260048101829052602401610c5f565b61198e81600f5461248c565b600f805490829055604080518281526020810184905233918101919091524260608201527f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c590608001610f73565b6119e46123dc565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b6020820152611a1d91600160a81b900460ff1690612467565b601254611a35908290600160b01b900460ff166127dd565b60128054821515600160b01b81810260ff60b01b198416179093556040805160a080825260139082015272697357616c6c65744c696d697441637469766560681b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b611abd6123dc565b6012546040805180820190915260088152674661696c7361666560c01b6020820152611af391600160d01b900460ff1690612467565b6012805460ff60d01b1916600160d01b1790556040805160608082526010908201526f1a5cd1985a5b1cd85999531bd8dad95960821b6080820152336020820152429181019190915260008051602061350b8339815191529060a0015b60405180910390a1565b611b626123dc565b60125460408051808201909152600381526246656560e81b6020820152611b9391600160c01b900460ff1690612467565b6105dc811115611bc15760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b611bd08160036000015461248c565b60038054908290556040805160a0808252600b908201526a7472616e7366657246656560a81b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e001610f73565b611c34612841565b601254600160a01b900460ff1615611c785760125460085460405163e39c1e8760e01b8152600160a01b90920460ff16151560048301526024820152604401610c5f565b6000546001600160a01b031615801590611cac575033611ca06000546001600160a01b031690565b6001600160a01b031614155b8015611ce3575042611ce17f000000000000000000000000000000000000000000000000000000000000000062278d006133bd565b115b15611d035760405163118cdaa760e01b8152336004820152602401610c5f565b6000546001600160a01b0316158015611d36575033611d2a6000546001600160a01b031690565b6001600160a01b031614155b8015611d6d575042611d6b7f00000000000000000000000000000000000000000000000000000000000000006213c6806133bd565b115b15611df957611d9f7f00000000000000000000000000000000000000000000000000000000000000006213c6806133bd565b42611dcd7f00000000000000000000000000000000000000000000000000000000000000006213c6806133bd565b611dd791906133aa565b604051636ddcad9f60e01b815260048101929092526024820152604401610c5f565b601254600160b01b900460ff16611e1e576012805460ff60b01b1916600160b01b1790555b601254600160b81b900460ff16611e43576012805460ff60b81b1916600160b81b1790555b601254600160d81b900460ff16611e68576012805460ff60d81b1916600160d81b1790555b601254600160b01b900460ff16611e8d576012805460ff60b01b1916600160b01b1790555b6012805460ff60a01b1916600160a01b179055426008819055436009556040805133815260208101929092527f8b70aa279b24da71d8a874fa0b0ee8f1a587c4fb32b80d87e95cdbdae01b7b4f9101611b50565b611ee96123dc565b6001600160a01b038216600090815260176020526040902054611f1090829060ff166127dd565b6001600160a01b038216600081815260176020908152604091829020805485151560ff1982168117909255835160c08082526019908201527f69734578636c75646546726f6d57616c6c65744c696d6974730000000000000060e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100016112e7565b611fcc6123dc565b601254611fe4908290600160d81b900460ff166127dd565b60128054821515600160d81b81810260ff60d81b198416179093556040805160a0808252600d908201526c1a5cd4ddd85c115b98589b1959609a1b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b600061206a6000611907565b61207561dead611907565b60075461208291906133aa565b61208c91906133aa565b905090565b6120996123dc565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b60208201526120d291600160a81b900460ff1690612467565b6012805460ff60a81b1916600160a81b179055604080516060808252601390820152721a5cd5d85b1b195d131a5b5a5d131bd8dad959606a1b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b600033610e9d818585612579565b61214c6123dc565b60125460408051808201909152600381526246656560e81b602082015261217d91600160c01b900460ff1690612467565b6012805460ff60c01b1916600160c01b179055604080516060808252600b908201526a1a5cd19959531bd8dad95960aa1b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b6121e16123dc565b601254600160b01b900460ff1661220b5760405163019601bd60e41b815260040160405180910390fd5b612710600e556012805461ffff60a81b1916600160a81b1790556040805160a0808252600f908201526e1a5cd5d85b1b195d131a5b5a5d1959608a1b60c08201526001602082015260009181019190915233606082015242608082015260008051602061354b8339815191529060e001611b50565b6122886123dc565b6012546040805180820190915260088152672932b1b2b4bb32b960c11b60208201526122be91600160c81b900460ff1690612467565b6012805460ff60c81b1916600160c81b1790556040805160608082526010908201526f1a5cd49958d95a5d995c931bd8dad95960821b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b612327612841565b6000546001600160a01b03166001600160a01b0316816001600160a01b03160361236f5760405163a936636960e01b81526001600160a01b0382166004820152602401610c5f565b61deac196001600160a01b038216016123a657604051634726455360e11b81526001600160a01b0382166004820152602401610c5f565b601080546001600160a01b0319166001600160a01b03831617905561190481612a66565b6123d78383836001612aa1565b505050565b6012546040805180820190915260088152674661696c7361666560c01b602082015261241291600160d01b900460ff1690612467565b6010546001600160a01b0316331480159061244757503361243b6000546001600160a01b031690565b6001600160a01b031614155b156119345760405163118cdaa760e01b8152336004820152602401610c5f565b811561248857806040516354f3dc5160e11b8152600401610c5f91906131f7565b5050565b8082036124885760405163657e16cf60e01b815260048101839052602401610c5f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526123d7908490612b76565b6001600160a01b0383811660009081526014602090815260408083209386168352929052205460001981146111ee578181101561256a57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610c5f565b6111ee84848484036000612aa1565b6001600160a01b0383166125a357604051634b637e8f60e11b815260006004820152602401610c5f565b6001600160a01b0382166125cd5760405163ec442f0560e01b815260006004820152602401610c5f565b601254600160a01b900460ff1661263e576001600160a01b03831660009081526016602052604090205460ff1615801561262057506001600160a01b03821660009081526016602052604090205460ff16155b1561263e5760405163ab9827ff60e01b815260040160405180910390fd5b601254600160e01b900460ff168061266e57506001600160a01b03831660009081526016602052604090205460ff165b1561267e576123d7838383612bd9565b6012546001600160a01b038481169116148015906126a55750601254600160d81b900460ff165b80156126c25750600f54600d54600c546126bf91906133aa565b10155b80156126d85750600f546126d530611907565b10155b1561274a57600f54601254600160d01b900460ff16801561270257506000546001600160a01b0316155b1561273f57600061271061271461205e565b61271f90600a613371565b6127299190613388565b905081811115612739578161273b565b805b9150505b61274881610be4565b505b6012548190600160b81b900460ff16801561277e57506001600160a01b03841660009081526016602052604090205460ff16155b80156127a357506001600160a01b03831660009081526016602052604090205460ff16155b156127b6576127b3848484612d03565b90505b601254600160b01b900460ff16156127d2576127d28184612e02565b6111ee848483612bd9565b801515821515036124885760405162a7e72d60e41b81528215156004820152602401610c5f565b806001600160a01b0316826001600160a01b0316036124885760405163a936636960e01b81526001600160a01b0383166004820152602401610c5f565b336128546000546001600160a01b031690565b6001600160a01b0316146119345760405163118cdaa760e01b8152336004820152602401610c5f565b6012805460ff60e01b1916600160e01b17905561deac1933016128b757604051634726455360e11b815261dead6004820152602401610c5f565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294591906133e6565b81600081518110612958576129586133d0565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061298c5761298c6133d0565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959085906129d2906000908690889042906004016134b9565b6000604051808303818588803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50506012805460ff60e01b19169055505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612a6e612841565b6001600160a01b038116612a9857604051631e4fbdf760e01b815260006004820152602401610c5f565b61190481612a16565b6001600160a01b038416612acb5760405163e602df0560e01b815260006004820152602401610c5f565b6001600160a01b038316612af557604051634a1406b160e11b815260006004820152602401610c5f565b6001600160a01b03808516600090815260146020908152604080832093871683529290522082905580156111ee57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612b6891815260200190565b60405180910390a350505050565b6000612b8b6001600160a01b03841683612ec3565b90508051600014158015612bb0575080806020019051810190612bae9190613483565b155b156123d757604051635274afe760e01b81526001600160a01b0384166004820152602401610c5f565b6001600160a01b038316612c04578060076000828254612bf991906133bd565b90915550612c769050565b6001600160a01b03831660009081526013602052604090205481811015612c575760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610c5f565b6001600160a01b03841660009081526013602052604090209082900390555b6001600160a01b038216612c9257600780548290039055612cb1565b6001600160a01b03821660009081526013602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cf691815260200190565b60405180910390a3505050565b6012805460ff60e01b1916600160e01b1790556001600160a01b03831660009081526015602052604081205460ff168015612d3f575060015415155b15612d5557612d4e8483612ed1565b9050612dee565b6001600160a01b03831660009081526015602052604090205460ff168015612d7e575060025415155b15612d8d57612d4e8483612f02565b6001600160a01b03841660009081526015602052604090205460ff16158015612dcf57506001600160a01b03831660009081526015602052604090205460ff16155b8015612ddc575060035415155b15612deb57612d4e8483612f33565b50805b6012805460ff60e01b191690559392505050565b600082612e0e83611907565b612e1891906133bd565b90506000612710600e54612e2a61205e565b612e349190613371565b612e3e9190613388565b601254909150600160b01b900460ff168015612e7357506001600160a01b03831660009081526017602052604090205460ff16155b8015612e7e57508082115b156111ee5760408051639bc7434d60e01b81526004810191909152600b60448201526a15d85b1b195d131a5b5a5d60aa1b606482015260248101829052608401610c5f565b606061121383836000612f64565b6012805460ff60e01b1916600160e01b17905560408051602081019091526001548152600090612dee908484613001565b6012805460ff60e01b1916600160e01b17905560408051602081019091526002548152600090612dee908484613001565b6012805460ff60e01b1916600160e01b17905560408051602081019091526003548152600090612dee908484613001565b606081471015612f895760405163cd78605960e01b8152306004820152602401610c5f565b600080856001600160a01b03168486604051612fa591906134ee565b60006040518083038185875af1925050503d8060008114612fe2576040519150601f19603f3d011682016040523d82523d6000602084013e612fe7565b606091505b5091509150612ff7868383613085565b9695505050505050565b6012805460ff60e01b1916600160e01b1790558251600954600091906130289060026133bd565b431161303357506126ac5b60006127106130428386613371565b61304c9190613388565b9050600061305a82866133aa565b9050811561306e5761306e878784866130e1565b6012805460ff60e01b191690559695505050505050565b60608261309a576130958261313a565b611213565b81511580156130b157506001600160a01b0384163b155b156130da57604051639996b31560e01b81526001600160a01b0385166004820152602401610c5f565b5080611213565b6012805460ff60e01b1916600160e01b179055835160009082906131059085613371565b61310f9190613388565b905061311b8184613163565b613126843085612bd9565b50506012805460ff60e01b19169055505050565b80511561314a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6012805460ff60e01b1916600160e01b1790556004805483919060009061318b9084906133bd565b9250508190555080600c60008282546131a491906133bd565b90915550506012805460ff60e01b191690555050565b6000602082840312156131cc57600080fd5b5035919050565b60005b838110156131ee5781810151838201526020016131d6565b50506000910152565b60208152600082518060208401526132168160408501602087016131d3565b601f01601f19169190910160400192915050565b6001600160a01b038116811461190457600080fd5b60006020828403121561325157600080fd5b81356112138161322a565b6000806040838503121561326f57600080fd5b823561327a8161322a565b946020939093013593505050565b60008060006060848603121561329d57600080fd5b83356132a88161322a565b925060208401356132b88161322a565b929592945050506040919091013590565b801515811461190457600080fd5b600080604083850312156132ea57600080fd5b82356132f58161322a565b91506020830135613305816132c9565b809150509250929050565b60006020828403121561332257600080fd5b8135611213816132c9565b6000806040838503121561334057600080fd5b823561334b8161322a565b915060208301356133058161322a565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ea357610ea361335b565b6000826133a557634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ea357610ea361335b565b80820180821115610ea357610ea361335b565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133f857600080fd5b81516112138161322a565b600081518084526020808501945080840160005b8381101561343c5781516001600160a01b031687529582019590820190600101613417565b509495945050505050565b85815284602082015260a06040820152600061346660a0830186613403565b6001600160a01b0394909416606083015250608001529392505050565b60006020828403121561349557600080fd5b8151611213816132c9565b6000602082840312156134b257600080fd5b5051919050565b8481526080602082015260006134d26080830186613403565b6001600160a01b03949094166040830152506060015292915050565b600082516135008184602087016131d3565b919091019291505056fe611312486a6540001c2b69bc849753e64cdefc853bbbc7a576d987821aec28b42dc908b86b38cfca773aadc8861ff9f24d2b644be4f8a6c2024cd71e120e5ef5da986e332f97963bfa4bb220bda255b40296aa680cff592b805c2deb80b1dbf3a2646970667358221220d5756756294cee5b4320f152a022906e8cce523bdf88ef164589180fc849504c64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638a8c523c116101fd578063adc7b55611610118578063da4daf71116100ab578063e79f53e61161007a578063e79f53e614610b56578063e811f50a14610b77578063f2c4220e14610b8e578063f2fde38b14610ba4578063f887ea4014610bc457600080fd5b8063da4daf7114610ab8578063dd62ed3e14610ace578063e2924cd114610b14578063e43504da14610b3557600080fd5b8063cf9769fd116100e7578063cf9769fd14610a4a578063d621e81314610a5f578063d830678614610a80578063d941907114610aa157600080fd5b8063adc7b556146109ce578063b144896f146109fe578063b908de8c14610a13578063b9b2b5cd14610a3457600080fd5b8063a4475ce411610190578063a9059cbb1161015f578063a9059cbb1461096c578063ab28a04c1461098c578063ab366292146109a2578063acb2ad6f146109b757600080fd5b8063a4475ce4146108f7578063a5949bcf14610917578063a616162a14610937578063a8aa1b311461094c57600080fd5b80639358928b116101cc5780639358928b1461087d57806395d89b411461089257806397e1b9d3146108c05780639ffe0533146108d657600080fd5b80638a8c523c146107f65780638c095e051461080b5780638da5cb5b1461082b578063924de9b71461085d57600080fd5b80634324deae116102ed578063715018a6116102805780637a40624b1161024f5780637a40624b1461075d5780637e2b16d1146107915780638577a6d5146107a6578063891ff84a146107c657600080fd5b8063715018a6146106f257806371538eed1461070757806375fed3c71461071d578063779e80d51461073d57600080fd5b8063625dd605116102bc578063625dd6051461067c57806363a954921461069c57806366a88d96146106bc57806370a08231146106d257600080fd5b80634324deae1461060f578063467abe0a1461062f578063470624021461064f57806359cd90311461066657600080fd5b80632b14ca5611610365578063351a964d11610334578063351a964d1461058e578063355496ca146105af5780633bf31454146105cf5780633d6362d6146105ef57600080fd5b80632b14ca56146105245780632c735ef81461053b5780633125796614610551578063313ce5671461057257600080fd5b806318160ddd116103a157806318160ddd146104a55780631d933a4a146104c45780631f685bac146104e457806323b872dd1461050457600080fd5b806301295143146103de57806306fdde031461040057806308c4365014610445578063095ea7b31461048557600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103fe6103f93660046131ba565b610be4565b005b34801561040c57600080fd5b5060408051808201909152600a8152692234bb34b9b4b7b720a960b11b60208201525b60405161043c91906131f7565b60405180910390f35b34801561045157600080fd5b5061047561046036600461323f565b60156020526000908152604090205460ff1681565b604051901515815260200161043c565b34801561049157600080fd5b506104756104a036600461325c565b610e8f565b3480156104b157600080fd5b506007545b60405190815260200161043c565b3480156104d057600080fd5b506103fe6104df3660046131ba565b610ea9565b3480156104f057600080fd5b506103fe6104ff36600461325c565b610f7f565b34801561051057600080fd5b5061047561051f366004613288565b6111f4565b34801561053057600080fd5b506002546104b69081565b34801561054757600080fd5b506104b660085481565b34801561055d57600080fd5b5060125461047590600160a81b900460ff1681565b34801561057e57600080fd5b506040516012815260200161043c565b34801561059a57600080fd5b5060125461047590600160d81b900460ff1681565b3480156105bb57600080fd5b506103fe6105ca3660046132d7565b61121a565b3480156105db57600080fd5b506103fe6105ea366004613310565b6112f4565b3480156105fb57600080fd5b506103fe61060a36600461323f565b6113bd565b34801561061b57600080fd5b506103fe61062a3660046131ba565b6114f1565b34801561063b57600080fd5b506103fe61064a3660046131ba565b6115e8565b34801561065b57600080fd5b506001546104b69081565b34801561067257600080fd5b506104b6600f5481565b34801561068857600080fd5b506103fe6106973660046132d7565b6116b5565b3480156106a857600080fd5b506103fe6106b73660046131ba565b6118a2565b3480156106c857600080fd5b506104b6600e5481565b3480156106de57600080fd5b506104b66106ed36600461323f565b611907565b3480156106fe57600080fd5b506103fe611922565b34801561071357600080fd5b506104b6600d5481565b34801561072957600080fd5b506103fe6107383660046131ba565b611936565b34801561074957600080fd5b506103fe610758366004613310565b6119dc565b34801561076957600080fd5b506104b67f0000000000000000000000000000000000000000000000000000000065a2d1c781565b34801561079d57600080fd5b506103fe611ab5565b3480156107b257600080fd5b506103fe6107c13660046131ba565b611b5a565b3480156107d257600080fd5b506104756107e136600461323f565b60166020526000908152604090205460ff1681565b34801561080257600080fd5b506103fe611c2c565b34801561081757600080fd5b506103fe6108263660046132d7565b611ee1565b34801561083757600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161043c565b34801561086957600080fd5b506103fe610878366004613310565b611fc4565b34801561088957600080fd5b506104b661205e565b34801561089e57600080fd5b506040805180820190915260058152642224ab20a960d91b602082015261042f565b3480156108cc57600080fd5b506104b6600b5481565b3480156108e257600080fd5b5060125461047590600160b01b900460ff1681565b34801561090357600080fd5b50601054610845906001600160a01b031681565b34801561092357600080fd5b50601154610845906001600160a01b031681565b34801561094357600080fd5b506103fe612091565b34801561095857600080fd5b50601254610845906001600160a01b031681565b34801561097857600080fd5b5061047561098736600461325c565b612136565b34801561099857600080fd5b506104b661271081565b3480156109ae57600080fd5b506103fe612144565b3480156109c357600080fd5b506003546104b69081565b3480156109da57600080fd5b506104756109e936600461323f565b60176020526000908152604090205460ff1681565b348015610a0a57600080fd5b506103fe6121d9565b348015610a1f57600080fd5b5060125461047590600160c01b900460ff1681565b348015610a4057600080fd5b506104b6600c5481565b348015610a5657600080fd5b506103fe612280565b348015610a6b57600080fd5b5060125461047590600160a01b900460ff1681565b348015610a8c57600080fd5b5060125461047590600160e01b900460ff1681565b348015610aad57600080fd5b506005546104b69081565b348015610ac457600080fd5b506104b6600a5481565b348015610ada57600080fd5b506104b6610ae936600461332d565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b348015610b2057600080fd5b5060125461047590600160c81b900460ff1681565b348015610b4157600080fd5b5060125461047590600160b81b900460ff1681565b348015610b6257600080fd5b5060125461047590600160d01b900460ff1681565b348015610b8357600080fd5b506004546104b69081565b348015610b9a57600080fd5b506104b660095481565b348015610bb057600080fd5b506103fe610bbf36600461323f565b61231f565b348015610bd057600080fd5b50600654610845906001600160a01b031681565b6012805460ff60e01b1916600160e01b179055612710610c0261205e565b610c0e906103e8613371565b610c189190613388565b811115610c685780612710610c2b61205e565b610c37906103e8613371565b610c419190613388565b60405163179b4ccd60e31b8152600481019290925260248201526044015b60405180910390fd5b600554600454600091610c7a916133aa565b90506000600d54600c54610c8e91906133aa565b9050600081610c9d8486613371565b610ca79190613388565b90508060056000016000828254610cbe91906133bd565b9250508190555083600d6000828254610cd791906133bd565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610d1157610d116133d0565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e91906133e6565b81600181518110610da157610da16133d0565b6001600160a01b039283166020918202929092010152600654610dc791309116876123ca565b6040805183815260208101879052338183015242606082015290517fb933c1b294702108551eddf782a9c7d1a018b57f68ecf63bc59a1247daa19c309181900360800190a160065460115460405163791ac94760e01b81526001600160a01b039283169263791ac94792610e4992879260009288929116904290600401613447565b600060405180830381600087803b158015610e6357600080fd5b505af1158015610e77573d6000803e3d6000fd5b50506012805460ff60e01b1916905550505050505050565b600033610e9d8185856123ca565b60019150505b92915050565b610eb16123dc565b60125460408051808201909152600381526246656560e81b6020820152610ee291600160c01b900460ff1690612467565b6105dc811115610f105760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b610f1f8160026000015461248c565b60028054908290556040805160a08082526007908201526673656c6c46656560c81b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e0015b60405180910390a15050565b60115481906001600160a01b039081169030908516036110e8576000600d54600c54610fab91906133aa565b9050600081610fb930611907565b610fc391906133aa565b905080851180610fdb5750610fd730611907565b8210155b15610ff9576040516315ea636560e31b815260040160405180910390fd5b84600003611005578093505b60105460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529087169063a9059cbb906044016020604051808303816000875af1158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190613483565b6110e15760405162461bcd60e51b815260206004820152603060248201527f5769746864726177546f6b656e733a205472616e73666572207472616e73616360448201526f3a34b7b71036b4b3b43a103330b4b61760811b6064820152608401610c5f565b50506111ee565b6001600160a01b0384166111675782600003611102574791505b6001600160a01b038116330361112b5760405163a5eb0da960e01b815260040160405180910390fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611161573d6000803e3d6000fd5b506111ee565b826000036111da576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156111b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d791906134a0565b91505b6111ee6001600160a01b03851682846124af565b50505050565b600033611202858285612501565b61120d858585612579565b60019150505b9392505050565b6112226123dc565b6001600160a01b03821660009081526016602052604090205461124990829060ff166127dd565b6001600160a01b038216600081815260166020908152604091829020805485151560ff1982168117909255835160c0808252600b908201526a69734578656d707446656560a81b60e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100015b60405180910390a1505050565b6112fc6123dc565b60125460408051808201909152600381526246656560e81b602082015261132d91600160c01b900460ff1690612467565b601254611345908290600160b81b900460ff166127dd565b60128054821515600160b81b81810260ff60b81b198416179093556040805160a0808252600b908201526a697346656541637469766560a81b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b6113c56123dc565b6012546040805180820190915260088152672932b1b2b4bb32b960c11b60208201526113fb91600160c81b900460ff1690612467565b6011546114129082906001600160a01b0316612804565b6001600160a01b03811661143c57604051634726455360e11b815260006004820152602401610c5f565b6001600160a01b0381163b156114655760405163259f1ec560e01b815260040160405180910390fd5b601180546001600160a01b031981166001600160a01b0384811691821784556040805160a08082528101959095527036b0b935b2ba34b733a932b1b2b4bb32b960791b60c086015292166020840181905291830152336060830152426080830152907ff7df6bc5c0f9735c300a374247b60dcacf1942b6031785957e762d77977ed4209060e001610f73565b6114f96123dc565b60c88110156115455760408051639bc7434d60e01b81526004810191909152600e60448201526d13585e15d85b1b195d131a5b5a5d60921b606482015260c86024820152608401610c5f565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b602082015261157e91600160a81b900460ff1690612467565b61158a81600e5461248c565b600e80548282556040805160a08082528101939093526d1b585e15d85b1b195d131a5b5a5d60921b60c08401526020830182905282018390523360608301524260808301529060008051602061352b8339815191529060e001610f73565b6115f06123dc565b60125460408051808201909152600381526246656560e81b602082015261162191600160c01b900460ff1690612467565b6105dc81111561164f5760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b61165e8160016000015461248c565b60018054908290556040805160a08082526006908201526562757946656560d01b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e001610f73565b6116bd6123dc565b6001600160a01b0382166000908152601560205260409020546116e490829060ff166127dd565b306001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175091906133e6565b6001600160a01b0316141580156117da5750306001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ce91906133e6565b6001600160a01b031614155b1561180357604051634726455360e11b81526001600160a01b0383166004820152602401610c5f565b6001600160a01b038216600081815260156020908152604091829020805485151560ff1982168117909255835160c08082526008908201526706973506169724c560c41b60e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100016112e7565b6118aa612841565b674563918244f400008111156118dd5760405163181c9d0b60e21b8152674563918244f400006004820152602401610c5f565b80600a60008282546118ef91906133bd565b909155505042600b556119048161dead61287d565b50565b6001600160a01b031660009081526013602052604090205490565b61192a612841565b6119346000612a16565b565b61193e6123dc565b61271061194961205e565b611955906103e8613371565b61195f9190613388565b8111156119825760405163181c9d0b60e21b815260048101829052602401610c5f565b61198e81600f5461248c565b600f805490829055604080518281526020810184905233918101919091524260608201527f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c590608001610f73565b6119e46123dc565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b6020820152611a1d91600160a81b900460ff1690612467565b601254611a35908290600160b01b900460ff166127dd565b60128054821515600160b01b81810260ff60b01b198416179093556040805160a080825260139082015272697357616c6c65744c696d697441637469766560681b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b611abd6123dc565b6012546040805180820190915260088152674661696c7361666560c01b6020820152611af391600160d01b900460ff1690612467565b6012805460ff60d01b1916600160d01b1790556040805160608082526010908201526f1a5cd1985a5b1cd85999531bd8dad95960821b6080820152336020820152429181019190915260008051602061350b8339815191529060a0015b60405180910390a1565b611b626123dc565b60125460408051808201909152600381526246656560e81b6020820152611b9391600160c01b900460ff1690612467565b6105dc811115611bc15760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b611bd08160036000015461248c565b60038054908290556040805160a0808252600b908201526a7472616e7366657246656560a81b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e001610f73565b611c34612841565b601254600160a01b900460ff1615611c785760125460085460405163e39c1e8760e01b8152600160a01b90920460ff16151560048301526024820152604401610c5f565b6000546001600160a01b031615801590611cac575033611ca06000546001600160a01b031690565b6001600160a01b031614155b8015611ce3575042611ce17f0000000000000000000000000000000000000000000000000000000065a2d1c762278d006133bd565b115b15611d035760405163118cdaa760e01b8152336004820152602401610c5f565b6000546001600160a01b0316158015611d36575033611d2a6000546001600160a01b031690565b6001600160a01b031614155b8015611d6d575042611d6b7f0000000000000000000000000000000000000000000000000000000065a2d1c76213c6806133bd565b115b15611df957611d9f7f0000000000000000000000000000000000000000000000000000000065a2d1c76213c6806133bd565b42611dcd7f0000000000000000000000000000000000000000000000000000000065a2d1c76213c6806133bd565b611dd791906133aa565b604051636ddcad9f60e01b815260048101929092526024820152604401610c5f565b601254600160b01b900460ff16611e1e576012805460ff60b01b1916600160b01b1790555b601254600160b81b900460ff16611e43576012805460ff60b81b1916600160b81b1790555b601254600160d81b900460ff16611e68576012805460ff60d81b1916600160d81b1790555b601254600160b01b900460ff16611e8d576012805460ff60b01b1916600160b01b1790555b6012805460ff60a01b1916600160a01b179055426008819055436009556040805133815260208101929092527f8b70aa279b24da71d8a874fa0b0ee8f1a587c4fb32b80d87e95cdbdae01b7b4f9101611b50565b611ee96123dc565b6001600160a01b038216600090815260176020526040902054611f1090829060ff166127dd565b6001600160a01b038216600081815260176020908152604091829020805485151560ff1982168117909255835160c08082526019908201527f69734578636c75646546726f6d57616c6c65744c696d6974730000000000000060e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100016112e7565b611fcc6123dc565b601254611fe4908290600160d81b900460ff166127dd565b60128054821515600160d81b81810260ff60d81b198416179093556040805160a0808252600d908201526c1a5cd4ddd85c115b98589b1959609a1b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b600061206a6000611907565b61207561dead611907565b60075461208291906133aa565b61208c91906133aa565b905090565b6120996123dc565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b60208201526120d291600160a81b900460ff1690612467565b6012805460ff60a81b1916600160a81b179055604080516060808252601390820152721a5cd5d85b1b195d131a5b5a5d131bd8dad959606a1b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b600033610e9d818585612579565b61214c6123dc565b60125460408051808201909152600381526246656560e81b602082015261217d91600160c01b900460ff1690612467565b6012805460ff60c01b1916600160c01b179055604080516060808252600b908201526a1a5cd19959531bd8dad95960aa1b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b6121e16123dc565b601254600160b01b900460ff1661220b5760405163019601bd60e41b815260040160405180910390fd5b612710600e556012805461ffff60a81b1916600160a81b1790556040805160a0808252600f908201526e1a5cd5d85b1b195d131a5b5a5d1959608a1b60c08201526001602082015260009181019190915233606082015242608082015260008051602061354b8339815191529060e001611b50565b6122886123dc565b6012546040805180820190915260088152672932b1b2b4bb32b960c11b60208201526122be91600160c81b900460ff1690612467565b6012805460ff60c81b1916600160c81b1790556040805160608082526010908201526f1a5cd49958d95a5d995c931bd8dad95960821b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b612327612841565b6000546001600160a01b03166001600160a01b0316816001600160a01b03160361236f5760405163a936636960e01b81526001600160a01b0382166004820152602401610c5f565b61deac196001600160a01b038216016123a657604051634726455360e11b81526001600160a01b0382166004820152602401610c5f565b601080546001600160a01b0319166001600160a01b03831617905561190481612a66565b6123d78383836001612aa1565b505050565b6012546040805180820190915260088152674661696c7361666560c01b602082015261241291600160d01b900460ff1690612467565b6010546001600160a01b0316331480159061244757503361243b6000546001600160a01b031690565b6001600160a01b031614155b156119345760405163118cdaa760e01b8152336004820152602401610c5f565b811561248857806040516354f3dc5160e11b8152600401610c5f91906131f7565b5050565b8082036124885760405163657e16cf60e01b815260048101839052602401610c5f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526123d7908490612b76565b6001600160a01b0383811660009081526014602090815260408083209386168352929052205460001981146111ee578181101561256a57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610c5f565b6111ee84848484036000612aa1565b6001600160a01b0383166125a357604051634b637e8f60e11b815260006004820152602401610c5f565b6001600160a01b0382166125cd5760405163ec442f0560e01b815260006004820152602401610c5f565b601254600160a01b900460ff1661263e576001600160a01b03831660009081526016602052604090205460ff1615801561262057506001600160a01b03821660009081526016602052604090205460ff16155b1561263e5760405163ab9827ff60e01b815260040160405180910390fd5b601254600160e01b900460ff168061266e57506001600160a01b03831660009081526016602052604090205460ff165b1561267e576123d7838383612bd9565b6012546001600160a01b038481169116148015906126a55750601254600160d81b900460ff165b80156126c25750600f54600d54600c546126bf91906133aa565b10155b80156126d85750600f546126d530611907565b10155b1561274a57600f54601254600160d01b900460ff16801561270257506000546001600160a01b0316155b1561273f57600061271061271461205e565b61271f90600a613371565b6127299190613388565b905081811115612739578161273b565b805b9150505b61274881610be4565b505b6012548190600160b81b900460ff16801561277e57506001600160a01b03841660009081526016602052604090205460ff16155b80156127a357506001600160a01b03831660009081526016602052604090205460ff16155b156127b6576127b3848484612d03565b90505b601254600160b01b900460ff16156127d2576127d28184612e02565b6111ee848483612bd9565b801515821515036124885760405162a7e72d60e41b81528215156004820152602401610c5f565b806001600160a01b0316826001600160a01b0316036124885760405163a936636960e01b81526001600160a01b0383166004820152602401610c5f565b336128546000546001600160a01b031690565b6001600160a01b0316146119345760405163118cdaa760e01b8152336004820152602401610c5f565b6012805460ff60e01b1916600160e01b17905561deac1933016128b757604051634726455360e11b815261dead6004820152602401610c5f565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294591906133e6565b81600081518110612958576129586133d0565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061298c5761298c6133d0565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959085906129d2906000908690889042906004016134b9565b6000604051808303818588803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50506012805460ff60e01b19169055505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612a6e612841565b6001600160a01b038116612a9857604051631e4fbdf760e01b815260006004820152602401610c5f565b61190481612a16565b6001600160a01b038416612acb5760405163e602df0560e01b815260006004820152602401610c5f565b6001600160a01b038316612af557604051634a1406b160e11b815260006004820152602401610c5f565b6001600160a01b03808516600090815260146020908152604080832093871683529290522082905580156111ee57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612b6891815260200190565b60405180910390a350505050565b6000612b8b6001600160a01b03841683612ec3565b90508051600014158015612bb0575080806020019051810190612bae9190613483565b155b156123d757604051635274afe760e01b81526001600160a01b0384166004820152602401610c5f565b6001600160a01b038316612c04578060076000828254612bf991906133bd565b90915550612c769050565b6001600160a01b03831660009081526013602052604090205481811015612c575760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610c5f565b6001600160a01b03841660009081526013602052604090209082900390555b6001600160a01b038216612c9257600780548290039055612cb1565b6001600160a01b03821660009081526013602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cf691815260200190565b60405180910390a3505050565b6012805460ff60e01b1916600160e01b1790556001600160a01b03831660009081526015602052604081205460ff168015612d3f575060015415155b15612d5557612d4e8483612ed1565b9050612dee565b6001600160a01b03831660009081526015602052604090205460ff168015612d7e575060025415155b15612d8d57612d4e8483612f02565b6001600160a01b03841660009081526015602052604090205460ff16158015612dcf57506001600160a01b03831660009081526015602052604090205460ff16155b8015612ddc575060035415155b15612deb57612d4e8483612f33565b50805b6012805460ff60e01b191690559392505050565b600082612e0e83611907565b612e1891906133bd565b90506000612710600e54612e2a61205e565b612e349190613371565b612e3e9190613388565b601254909150600160b01b900460ff168015612e7357506001600160a01b03831660009081526017602052604090205460ff16155b8015612e7e57508082115b156111ee5760408051639bc7434d60e01b81526004810191909152600b60448201526a15d85b1b195d131a5b5a5d60aa1b606482015260248101829052608401610c5f565b606061121383836000612f64565b6012805460ff60e01b1916600160e01b17905560408051602081019091526001548152600090612dee908484613001565b6012805460ff60e01b1916600160e01b17905560408051602081019091526002548152600090612dee908484613001565b6012805460ff60e01b1916600160e01b17905560408051602081019091526003548152600090612dee908484613001565b606081471015612f895760405163cd78605960e01b8152306004820152602401610c5f565b600080856001600160a01b03168486604051612fa591906134ee565b60006040518083038185875af1925050503d8060008114612fe2576040519150601f19603f3d011682016040523d82523d6000602084013e612fe7565b606091505b5091509150612ff7868383613085565b9695505050505050565b6012805460ff60e01b1916600160e01b1790558251600954600091906130289060026133bd565b431161303357506126ac5b60006127106130428386613371565b61304c9190613388565b9050600061305a82866133aa565b9050811561306e5761306e878784866130e1565b6012805460ff60e01b191690559695505050505050565b60608261309a576130958261313a565b611213565b81511580156130b157506001600160a01b0384163b155b156130da57604051639996b31560e01b81526001600160a01b0385166004820152602401610c5f565b5080611213565b6012805460ff60e01b1916600160e01b179055835160009082906131059085613371565b61310f9190613388565b905061311b8184613163565b613126843085612bd9565b50506012805460ff60e01b19169055505050565b80511561314a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6012805460ff60e01b1916600160e01b1790556004805483919060009061318b9084906133bd565b9250508190555080600c60008282546131a491906133bd565b90915550506012805460ff60e01b191690555050565b6000602082840312156131cc57600080fd5b5035919050565b60005b838110156131ee5781810151838201526020016131d6565b50506000910152565b60208152600082518060208401526132168160408501602087016131d3565b601f01601f19169190910160400192915050565b6001600160a01b038116811461190457600080fd5b60006020828403121561325157600080fd5b81356112138161322a565b6000806040838503121561326f57600080fd5b823561327a8161322a565b946020939093013593505050565b60008060006060848603121561329d57600080fd5b83356132a88161322a565b925060208401356132b88161322a565b929592945050506040919091013590565b801515811461190457600080fd5b600080604083850312156132ea57600080fd5b82356132f58161322a565b91506020830135613305816132c9565b809150509250929050565b60006020828403121561332257600080fd5b8135611213816132c9565b6000806040838503121561334057600080fd5b823561334b8161322a565b915060208301356133058161322a565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ea357610ea361335b565b6000826133a557634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ea357610ea361335b565b80820180821115610ea357610ea361335b565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133f857600080fd5b81516112138161322a565b600081518084526020808501945080840160005b8381101561343c5781516001600160a01b031687529582019590820190600101613417565b509495945050505050565b85815284602082015260a06040820152600061346660a0830186613403565b6001600160a01b0394909416606083015250608001529392505050565b60006020828403121561349557600080fd5b8151611213816132c9565b6000602082840312156134b257600080fd5b5051919050565b8481526080602082015260006134d26080830186613403565b6001600160a01b03949094166040830152506060015292915050565b600082516135008184602087016131d3565b919091019291505056fe611312486a6540001c2b69bc849753e64cdefc853bbbc7a576d987821aec28b42dc908b86b38cfca773aadc8861ff9f24d2b644be4f8a6c2024cd71e120e5ef5da986e332f97963bfa4bb220bda255b40296aa680cff592b805c2deb80b1dbf3a2646970667358221220d5756756294cee5b4320f152a022906e8cce523bdf88ef164589180fc849504c64736f6c63430008120033

Deployed Bytecode Sourcemap

5950:24180:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14474:1155;;;;;;;;;;-1:-1:-1;14474:1155:0;;;;;:::i;:::-;;:::i;:::-;;24855:90;;;;;;;;;;-1:-1:-1;24933:4:0;;;;;;;;;;;;-1:-1:-1;;;24933:4:0;;;;24855:90;;;;;;;:::i;:::-;;;;;;;;7789:45;;;;;;;;;;-1:-1:-1;7789:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1408:14:1;;1401:22;1383:41;;1371:2;1356:18;7789:45:0;1243:187:1;25736:194:0;;;;;;;;;;-1:-1:-1;25736:194:0;;;;;:::i;:::-;;:::i;25153:99::-;;;;;;;;;;-1:-1:-1;25232:12:0;;25153:99;;;1901:25:1;;;1889:2;1874:18;25153:99:0;1755:177:1;19334:500:0;;;;;;;;;;-1:-1:-1;19334:500:0;;;;;:::i;:::-;;:::i;10400:1320::-;;;;;;;;;;-1:-1:-1;10400:1320:0;;;;;:::i;:::-;;:::i;25938:247::-;;;;;;;;;;-1:-1:-1;25938:247:0;;;;;:::i;:::-;;:::i;6192:30::-;;;;;;;;;;-1:-1:-1;6192:30:0;;;;;;6711:33;;;;;;;;;;;;;;;;7304:39;;;;;;;;;;-1:-1:-1;7304:39:0;;;;-1:-1:-1;;;7304:39:0;;;;;;25055:90;;;;;;;;;;-1:-1:-1;25055:90:0;;6563:2;2540:36:1;;2528:2;2513:18;25055:90:0;2398:184:1;7558:33:0;;;;;;;;;;-1:-1:-1;7558:33:0;;;;-1:-1:-1;;;7558:33:0;;;;;;21546:337;;;;;;;;;;-1:-1:-1;21546:337:0;;;;;:::i;:::-;;:::i;17299:336::-;;;;;;;;;;-1:-1:-1;17299:336:0;;;;;:::i;:::-;;:::i;20370:677::-;;;;;;;;;;-1:-1:-1;20370:677:0;;;;;:::i;:::-;;:::i;18356:467::-;;;;;;;;;;-1:-1:-1;18356:467:0;;;;;:::i;:::-;;:::i;18831:495::-;;;;;;;;;;-1:-1:-1;18831:495:0;;;;;:::i;:::-;;:::i;6156:29::-;;;;;;;;;;-1:-1:-1;6156:29:0;;;;;;7018:37;;;;;;;;;;;;;;;;21055:483;;;;;;;;;;-1:-1:-1;21055:483:0;;;;;:::i;:::-;;:::i;23751:300::-;;;;;;;;;;-1:-1:-1;23751:300:0;;;;;:::i;:::-;;:::i;6976:35::-;;;;;;;;;;;;;;;;25260:118;;;;;;;;;;-1:-1:-1;25260:118:0;;;;;:::i;:::-;;:::i;5413:103::-;;;;;;;;;;;;;:::i;6934:35::-;;;;;;;;;;;;;;;;16880:411;;;;;;;;;;-1:-1:-1;16880:411:0;;;;;:::i;:::-;;:::i;17643:392::-;;;;;;;;;;-1:-1:-1;17643:392:0;;;;;:::i;:::-;;:::i;6667:35::-;;;;;;;;;;;;;;;16056:213;;;;;;;;;;;;;:::i;19842:520::-;;;;;;;;;;-1:-1:-1;19842:520:0;;;;;:::i;:::-;;:::i;7841:51::-;;;;;;;;;;-1:-1:-1;7841:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11728:1213;;;;;;;;;;;;;:::i;21891:407::-;;;;;;;;;;-1:-1:-1;21891:407:0;;;;;:::i;:::-;;:::i;5148:87::-;;;;;;;;;;-1:-1:-1;5194:7:0;5221:6;-1:-1:-1;;;;;5221:6:0;5148:87;;;-1:-1:-1;;;;;3507:32:1;;;3489:51;;3477:2;3462:18;5148:87:0;3343:203:1;18043:305:0;;;;;;;;;;-1:-1:-1;18043:305:0;;;;;:::i;:::-;;:::i;12949:151::-;;;;;;;;;;;;;:::i;24953:94::-;;;;;;;;;;-1:-1:-1;25033:6:0;;;;;;;;;;;;-1:-1:-1;;;25033:6:0;;;;24953:94;;6841:43;;;;;;;;;;;;;;;;7350:39;;;;;;;;;;-1:-1:-1;7350:39:0;;;;-1:-1:-1;;;7350:39:0;;;;;;7064:72;;;;;;;;;;-1:-1:-1;7064:72:0;;;;-1:-1:-1;;;;;7064:72:0;;;7143:77;;;;;;;;;;-1:-1:-1;7143:77:0;;;;-1:-1:-1;;;;;7143:77:0;;;16277:228;;;;;;;;;;;;;:::i;7233:19::-;;;;;;;;;;-1:-1:-1;7233:19:0;;;;-1:-1:-1;;;;;7233:19:0;;;25386:186;;;;;;;;;;-1:-1:-1;25386:186:0;;;;;:::i;:::-;;:::i;6574:47::-;;;;;;;;;;;;6615:6;6574:47;;15637:189;;;;;;;;;;;;;:::i;6229:31::-;;;;;;;;;;-1:-1:-1;6229:31:0;;;;;;7899:65;;;;;;;;;;-1:-1:-1;7899:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16513:359;;;;;;;;;;;;;:::i;7434:31::-;;;;;;;;;;-1:-1:-1;7434:31:0;;;;-1:-1:-1;;;7434:31:0;;;;;;6891:36;;;;;;;;;;;;;;;;15834:214;;;;;;;;;;;;;:::i;7265:32::-;;;;;;;;;;-1:-1:-1;7265:32:0;;;;-1:-1:-1;;;7265:32:0;;;;;;7598:26;;;;;;;;;;-1:-1:-1;7598:26:0;;;;-1:-1:-1;;;7598:26:0;;;;;;6306:31;;;;;;;;;;-1:-1:-1;6306:31:0;;;;;;6792:42;;;;;;;;;;;;;;;;25580:148;;;;;;;;;;-1:-1:-1;25580:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;25690:21:0;;;25663:7;25690:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;25580:148;7472:36;;;;;;;;;;-1:-1:-1;7472:36:0;;;;-1:-1:-1;;;7472:36:0;;;;;;7396:31;;;;;;;;;;-1:-1:-1;7396:31:0;;;;-1:-1:-1;;;7396:31:0;;;;;;7515:36;;;;;;;;;;-1:-1:-1;7515:36:0;;;;-1:-1:-1;;;7515:36:0;;;;;;6267:32;;;;;;;;;;-1:-1:-1;6267:32:0;;;;;;6751:34;;;;;;;;;;;;;;;;24487:360;;;;;;;;;;-1:-1:-1;24487:360:0;;;;;:::i;:::-;;:::i;6346:75::-;;;;;;;;;;-1:-1:-1;6346:75:0;;;;-1:-1:-1;;;;;6346:75:0;;;14474:1155;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;6615:6:::1;14566:19;:17;:19::i;:::-;:27;::::0;14588:5:::1;14566:27;:::i;:::-;:44;;;;:::i;:::-;14549:14;:61;14545:198;;;14670:14;6615:6;14686:19;:17;:19::i;:::-;:27;::::0;14708:5:::1;14686:27;:::i;:::-;:44;;;;:::i;:::-;14634:97;::::0;-1:-1:-1;;;14634:97:0;;::::1;::::0;::::1;4868:25:1::0;;;;4909:18;;;4902:34;4841:18;;14634:97:0::1;;;;;;;;14545:198;14806:11;:21:::0;14781:12:::1;:22:::0;14753:25:::1;::::0;14781:46:::1;::::0;::::1;:::i;:::-;14753:74;;14838:21;14882:16;;14862:17;;:36;;;;:::i;:::-;14838:60:::0;-1:-1:-1;14919:32:0::1;14838:60:::0;14954:34:::1;14971:17:::0;14954:14;:34:::1;:::i;:::-;:50;;;;:::i;:::-;14919:85;;15042:24;15017:11;:21;;;:49;;;;;;;:::i;:::-;;;;;;;;15097:14;15077:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15148:16:0::1;::::0;;15162:1:::1;15148:16:::0;;;;;::::1;::::0;;15124:21:::1;::::0;15148:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;15148:16:0::1;15124:40;;15193:4;15175;15180:1;15175:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15175:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;15219:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;15219:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;15175:7;;15219:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15209:4;15214:1;15209:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15209:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;15277:6:::1;::::0;15245:56:::1;::::0;15262:4:::1;::::0;15277:6:::1;15286:14:::0;15245:8:::1;:56::i;:::-;15323:81;::::0;;5961:25:1;;;6017:2;6002:18;;5995:34;;;15376:10:0::1;6045:18:1::0;;;6038:60;15388:15:0::1;6129:2:1::0;6114:18;;6107:34;15323:81:0;;::::1;::::0;;;;5948:3:1;15323:81:0;;::::1;15417:6;::::0;15563:17:::1;::::0;15417:204:::1;::::0;-1:-1:-1;;;15417:204:0;;-1:-1:-1;;;;;15417:6:0;;::::1;::::0;:57:::1;::::0;:204:::1;::::0;15489:24;;15417:6:::1;::::0;15544:4;;15563:17;::::1;::::0;15595:15:::1;::::0;15417:204:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8040:6:0;:14;;-1:-1:-1;;;;8040:14:0;;;-1:-1:-1;;;;;;;14474:1155:0:o;25736:194::-;25809:4;25845:10;25866:34;25845:10;25885:7;25894:5;25866:8;:34::i;:::-;25918:4;25911:11;;;25736:194;;;;;:::o;19334:500::-;8110:21;:19;:21::i;:::-;19431:11:::1;::::0;19420:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;19420:30:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;19431:11:0;::::1;;;::::0;19420:10:::1;:30::i;:::-;19483:4;19465:15;:22;19461:100;;;19511:38;::::0;-1:-1:-1;;;19511:38:0;;::::1;::::0;::::1;4868:25:1::0;;;19544:4:0::1;4909:18:1::0;;;4902:34;4841:18;;19511:38:0::1;4694:248:1::0;19461:100:0::1;19571:54;19590:15;19607:7;:17;;;19571:18;:54::i;:::-;19662:7;:17:::0;;19690:35;;;;19741:85:::1;::::0;;7783:3:1;7765:22;;;7824:1;7803:19;;;7796:30;-1:-1:-1;;;7857:3:1;7842:19;;7835:38;7940:4;7925:20;;7918:36;;;7970:18;;;7963:34;;;19798:10:0::1;-1:-1:-1::0;8013:18:1;;8006:60;19810:15:0::1;-1:-1:-1::0;8082:19:1;;8075:35;-1:-1:-1;;;;;;;;;;;19741:85:0;7905:3:1;7890:19;19741:85:0::1;;;;;;;;19409:425;19334:500:::0;:::o;10400:1320::-;10532:17;;10496:6;;-1:-1:-1;;;;;10532:17:0;;;;10598:4;10574:29;;;;10570:1143;;10620:15;10659:16;;10639:17;;:36;;;;:::i;:::-;10620:56;;10691:17;10738:7;10711:24;10729:4;10711:9;:24::i;:::-;:34;;;;:::i;:::-;10691:54;;10776:9;10767:6;:18;10766:61;;;;10802:24;10820:4;10802:9;:24::i;:::-;10791:7;:35;;10766:61;10762:136;;;10855:27;;-1:-1:-1;;;10855:27:0;;;;;;;;;;;10762:136;10916:6;10926:1;10916:11;10912:74;;10961:9;10948:22;;10912:74;11056:12;;11026:55;;-1:-1:-1;;;11026:55:0;;-1:-1:-1;;;;;11056:12:0;;;11026:55;;;8295:51:1;8362:18;;;8355:34;;;11026:29:0;;;;;;8268:18:1;;11026:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11000:165;;;;-1:-1:-1;;;11000:165:0;;8852:2:1;11000:165:0;;;8834:21:1;8891:2;8871:18;;;8864:30;8930:34;8910:18;;;8903:62;-1:-1:-1;;;8981:18:1;;;8974:46;9037:19;;11000:165:0;8650:412:1;11000:165:0;10605:572;;10570:1143;;;-1:-1:-1;;;;;11187:26:0;;11183:530;;11234:6;11244:1;11234:11;11230:86;;11279:21;11266:34;;11230:86;-1:-1:-1;;;;;11334:22:0;;:10;:22;11330:107;;11384:37;;-1:-1:-1;;;11384:37:0;;;;;;;;;;;11330:107;11451:38;;-1:-1:-1;;;;;11451:26:0;;;:38;;;;;11478:10;;11451:38;;;;11478:10;11451:26;:38;;;;;;;;;;;;;;;;;;;;;11183:530;;;11526:6;11536:1;11526:11;11522:110;;11571:45;;-1:-1:-1;;;11571:45:0;;11610:4;11571:45;;;3489:51:1;-1:-1:-1;;;;;11571:30:0;;;;;3462:18:1;;11571:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11558:58;;11522:110;11646:55;-1:-1:-1;;;;;11646:33:0;;11680:8;11690:10;11646:33;:55::i;:::-;10464:1256;;10400:1320;;:::o;25938:247::-;26025:4;26060:10;26081:37;26097:4;26060:10;26112:5;26081:15;:37::i;:::-;26129:26;26139:4;26145:2;26149:5;26129:9;:26::i;:::-;26173:4;26166:11;;;25938:247;;;;;;:::o;21546:337::-;8110:21;:19;:21::i;:::-;-1:-1:-1;;;;;21669:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;21639:48:::1;::::0;21658:9;;21669:17:::1;;21639:18;:48::i;:::-;-1:-1:-1::0;;;;;21715:17:0;::::1;21698:14;21715:17:::0;;;:11:::1;:17;::::0;;;;;;;;;;21743:29;::::1;;-1:-1:-1::0;;21743:29:0;::::1;::::0;::::1;::::0;;;21788:87;;9586:3:1;9568:22;;;9627:2;9606:19;;;9599:31;-1:-1:-1;;;9661:3:1;9646:19;;9639:42;9771:20;;;9764:45;;;;21715:17:0::1;::::0;;::::1;9852:14:1::0;;9845:22;9825:18;;;9818:50;;;;9899:2;9884:18;;9877:50;;;;21847:10:0::1;-1:-1:-1::0;9943:19:1;;9936:44;21859:15:0::1;-1:-1:-1::0;9996:19:1;;9989:35;21715:17:0;21788:87:::1;::::0;9713:3:1;9698:19;21788:87:0::1;;;;;;;;21628:255;21546:337:::0;;:::o;17299:336::-;8110:21;:19;:21::i;:::-;17389:11:::1;::::0;17378:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;17378:30:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;17389:11:0;::::1;;;::::0;17378:10:::1;:30::i;:::-;17449:11;::::0;17419:42:::1;::::0;17438:9;;-1:-1:-1;;;17449:11:0;::::1;;;17419:18;:42::i;:::-;17489:11;::::0;;17511:23;::::1;;-1:-1:-1::0;;;17511:23:0;;::::1;-1:-1:-1::0;;;;17511:23:0;::::1;;::::0;;;17550:77:::1;::::0;;10337:3:1;10319:22;;;10378:2;10357:19;;;10350:31;-1:-1:-1;;;10412:3:1;10397:19;;10390:42;17489:11:0::1;::::0;;;::::1;::::0;;;::::1;10513:14:1::0;;10506:22;10499:4;10484:20;;10477:52;10545:18;;;10538:50;17599:10:0::1;-1:-1:-1::0;10604:18:1;;10597:60;17611:15:0::1;-1:-1:-1::0;10673:19:1;;10666:35;-1:-1:-1;;;;;;;;;;;17550:77:0;10464:3:1;10449:19;17550:77:0::1;10035:672:1::0;20370:677:0;8110:21;:19;:21::i;:::-;20482:16:::1;::::0;20471:40:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;20471:40:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;20482:16:0;::::1;;;::::0;20471:10:::1;:40::i;:::-;20565:17;::::0;20522:61:::1;::::0;20543:20;;-1:-1:-1;;;;;20565:17:0::1;20522:20;:61::i;:::-;-1:-1:-1::0;;;;;20598:34:0;::::1;20594:100;;20656:26;::::0;-1:-1:-1;;;20656:26:0;;20679:1:::1;20656:26;::::0;::::1;3489:51:1::0;3462:18;;20656:26:0::1;3343:203:1::0;20594:100:0::1;-1:-1:-1::0;;;;;20708:32:0;::::1;;:36:::0;20704:102:::1;;20768:26;;-1:-1:-1::0;;;20768:26:0::1;;;;;;;;;;;20704:102;20847:17;::::0;;-1:-1:-1;;;;;;20875:40:0;::::1;-1:-1:-1::0;;;;;20875:40:0;;::::1;::::0;;::::1;::::0;;20931:108:::1;::::0;;11026:3:1;11008:22;;;11046:19;;11039:31;;;;-1:-1:-1;;;11101:3:1;11086:19;;11079:48;20847:17:0;::::1;11232:4:1::0;11217:20;;11210:45;;;11271:18;;;11264:43;21011:10:0::1;-1:-1:-1::0;11323:18:1;;11316:43;21023:15:0::1;-1:-1:-1::0;11375:19:1;;11368:35;20847:17:0;20931:108:::1;::::0;11159:3:1;11144:19;20931:108:0::1;10712:697:1::0;18356:467:0;8110:21;:19;:21::i;:::-;18457:3:::1;18446:8;:14;18442:88;;;18484:34;::::0;;-1:-1:-1;;;18484:34:0;;::::1;::::0;::::1;11636:21:1::0;;;;11693:2;11673:18;;;11666:30;-1:-1:-1;;;11712:18:1;;;11705:44;18514:3:0::1;11801:20:1::0;;;11794:36;11766:19;;18484:34:0::1;11414:422:1::0;18442:88:0::1;18551:19;::::0;18540:46:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18540:46:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;18551:19:0;::::1;;;::::0;18540:10:::1;:46::i;:::-;18597:44;18616:8;18626:14;;18597:18;:44::i;:::-;18671:14;::::0;;18696:25;;;18737:78:::1;::::0;;12155:3:1;12137:22;;;12175:19;;12168:31;;;;-1:-1:-1;;;12230:3:1;12215:19;;12208:45;12320:4;12305:20;;12298:36;;;12350:18;;12343:34;;;18787:10:0::1;-1:-1:-1::0;12393:18:1;;12386:60;18799:15:0::1;-1:-1:-1::0;12462:19:1;;12455:35;18671:14:0;-1:-1:-1;;;;;;;;;;;18737:78:0;12285:3:1;12270:19;18737:78:0::1;11841:655:1::0;18831:495:0;8110:21;:19;:21::i;:::-;18927:11:::1;::::0;18916:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18916:30:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;18927:11:0;::::1;;;::::0;18916:10:::1;:30::i;:::-;18979:4;18961:15;:22;18957:100;;;19007:38;::::0;-1:-1:-1;;;19007:38:0;;::::1;::::0;::::1;4868:25:1::0;;;19040:4:0::1;4909:18:1::0;;;4902:34;4841:18;;19007:38:0::1;4694:248:1::0;18957:100:0::1;19067:53;19086:15;19103:6;:16;;;19067:18;:53::i;:::-;19157:6;:16:::0;;19184:34;;;;19234:84:::1;::::0;;12815:3:1;12797:22;;;12856:1;12835:19;;;12828:30;-1:-1:-1;;;12889:3:1;12874:19;;12867:37;12971:4;12956:20;;12949:36;;;13001:18;;;12994:34;;;19290:10:0::1;-1:-1:-1::0;13044:18:1;;13037:60;19302:15:0::1;-1:-1:-1::0;13113:19:1;;13106:35;-1:-1:-1;;;;;;;;;;;19234:84:0;12936:3:1;12921:19;19234:84:0::1;12501:646:1::0;21055:483:0;8110:21;:19;:21::i;:::-;-1:-1:-1;;;;;21174:16:0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;21144:47:::1;::::0;21163:9;;21174:16:::1;;21144:18;:47::i;:::-;21240:4;-1:-1:-1::0;;;;;21206:39:0::1;21212:6;-1:-1:-1::0;;;;;21206:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21206:39:0::1;;;:82;;;;;21283:4;-1:-1:-1::0;;;;;21249:39:0::1;21255:6;-1:-1:-1::0;;;;;21249:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21249:39:0::1;;;21206:82;21202:144;;;21312:22;::::0;-1:-1:-1;;;21312:22:0;;-1:-1:-1;;;;;3507:32:1;;21312:22:0::1;::::0;::::1;3489:51:1::0;3462:18;;21312:22:0::1;3343:203:1::0;21202:144:0::1;-1:-1:-1::0;;;;;21373:16:0;::::1;21356:14;21373:16:::0;;;:8:::1;:16;::::0;;;;;;;;;;21400:28;::::1;;-1:-1:-1::0;;21400:28:0;::::1;::::0;::::1;::::0;;;21444:86;;13482:3:1;13464:22;;;13523:1;13502:19;;;13495:30;-1:-1:-1;;;13556:3:1;13541:19;;13534:39;13663:20;;;13656:45;;;;21373:16:0::1;::::0;;::::1;13744:14:1::0;;13737:22;13717:18;;;13710:50;;;;13791:2;13776:18;;13769:50;;;;21502:10:0::1;-1:-1:-1::0;13835:19:1;;13828:44;21514:15:0::1;-1:-1:-1::0;13888:19:1;;13881:35;21373:16:0;21444:86:::1;::::0;13605:3:1;13590:19;21444:86:0::1;13152:770:1::0;23751:300:0;4708:13;:11;:13::i;:::-;23838:7:::1;23829:6;:16;23825:77;;;23869:21;::::0;-1:-1:-1;;;23869:21:0;;23882:7:::1;23869:21;::::0;::::1;1901:25:1::0;1874:18;;23869:21:0::1;1755:177:1::0;23825:77:0::1;23939:6;23912:23;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23983:15:0::1;23956:24;:42:::0;24009:34:::1;24019:6:::0;24035::::1;24009:9;:34::i;:::-;23751:300:::0;:::o;25260:118::-;-1:-1:-1;;;;;25352:18:0;25325:7;25352:18;;;:9;:18;;;;;;;25260:118::o;5413:103::-;4708:13;:11;:13::i;:::-;5478:30:::1;5505:1;5478:18;:30::i;:::-;5413:103::o:0;16880:411::-;8110:21;:19;:21::i;:::-;6615:6:::1;16978:19;:17;:19::i;:::-;:27;::::0;17000:5:::1;16978:27;:::i;:::-;:44;;;;:::i;:::-;16965:10;:57;16961:121;;;17046:24;::::0;-1:-1:-1;;;17046:24:0;;::::1;::::0;::::1;1901:25:1::0;;;1874:18;;17046:24:0::1;1755:177:1::0;16961:121:0::1;17092:39;17111:10;17123:7;;17092:18;:39::i;:::-;17163:7;::::0;;17181:20;;;;17217:66:::1;::::0;;5961:25:1;;;6017:2;6002:18;;5995:34;;;17255:10:0::1;6045:18:1::0;;;6038:60;;;;17267:15:0::1;6129:2:1::0;6114:18;;6107:34;17217:66:0::1;::::0;5948:3:1;5933:19;17217:66:0::1;5730:417:1::0;17643:392:0;8110:21;:19;:21::i;:::-;17741:19:::1;::::0;17730:46:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;17730:46:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;17741:19:0;::::1;;;::::0;17730:10:::1;:46::i;:::-;17817:19;::::0;17787:50:::1;::::0;17806:9;;-1:-1:-1;;;17817:19:0;::::1;;;17787:18;:50::i;:::-;17865:19;::::0;;17895:31;::::1;;-1:-1:-1::0;;;17895:31:0;;::::1;-1:-1:-1::0;;;;17895:31:0;::::1;;::::0;;;17942:85:::1;::::0;;14437:3:1;14419:22;;;14478:2;14457:19;;;14450:31;-1:-1:-1;;;14512:3:1;14497:19;;14490:50;17865:19:0::1;::::0;;;::::1;::::0;;;::::1;14621:14:1::0;;14614:22;14607:4;14592:20;;14585:52;14653:18;;;14646:50;17999:10:0::1;-1:-1:-1::0;14712:18:1;;14705:60;18011:15:0::1;-1:-1:-1::0;14781:19:1;;14774:35;-1:-1:-1;;;;;;;;;;;17942:85:0;14572:3:1;14557:19;17942:85:0::1;14135:680:1::0;16056:213:0;8110:21;:19;:21::i;:::-;16129:16:::1;::::0;16118:40:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;16118:40:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;16129:16:0;::::1;;;::::0;16118:10:::1;:40::i;:::-;16169:16;:23:::0;;-1:-1:-1;;;;16169:23:0::1;-1:-1:-1::0;;;16169:23:0::1;::::0;;16208:53:::1;::::0;;15078:2:1;15060:21;;;15117:2;15097:18;;;15090:30;-1:-1:-1;;;15151:3:1;15136:19;;15129:47;16233:10:0::1;15243:4:1::0;15228:20;;15221:62;16245:15:0::1;15299:18:1::0;;;15292:34;;;;-1:-1:-1;;;;;;;;;;;16208:53:0;15208:3:1;15193:19;16208:53:0::1;;;;;;;;16056:213::o:0;19842:520::-;8110:21;:19;:21::i;:::-;19943:11:::1;::::0;19932:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;19932:30:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;19943:11:0;::::1;;;::::0;19932:10:::1;:30::i;:::-;19995:4;19977:15;:22;19973:100;;;20023:38;::::0;-1:-1:-1;;;20023:38:0;;::::1;::::0;::::1;4868:25:1::0;;;20056:4:0::1;4909:18:1::0;;;4902:34;4841:18;;20023:38:0::1;4694:248:1::0;19973:100:0::1;20083:58;20102:15;20119:11;:21;;;20083:18;:58::i;:::-;20178:11;:21:::0;;20210:39;;;;20265:89:::1;::::0;;15651:3:1;15633:22;;;15692:2;15671:19;;;15664:31;-1:-1:-1;;;15726:3:1;15711:19;;15704:42;15813:4;15798:20;;15791:36;;;15843:18;;;15836:34;;;20326:10:0::1;-1:-1:-1::0;15886:18:1;;15879:60;20338:15:0::1;-1:-1:-1::0;15955:19:1;;15948:35;-1:-1:-1;;;;;;;;;;;20265:89:0;15778:3:1;15763:19;20265:89:0::1;15337:652:1::0;11728:1213:0;4708:13;:11;:13::i;:::-;11787:12:::1;::::0;-1:-1:-1;;;11787:12:0;::::1;;;11783:101;;;11843:12;::::0;11857:14:::1;::::0;11823:49:::1;::::0;-1:-1:-1;;;11823:49:0;;-1:-1:-1;;;11843:12:0;;::::1;;;16187:14:1::0;16180:22;11823:49:0::1;::::0;::::1;16162:41:1::0;16219:18;;;16212:34;16135:18;;11823:49:0::1;15994:258:1::0;11783:101:0::1;11931:1;5221:6:::0;-1:-1:-1;;;;;5221:6:0;11912:21;;::::1;::::0;:59:::1;;-1:-1:-1::0;11961:10:0::1;11950:7;5194::::0;5221:6;-1:-1:-1;;;;;5221:6:0;;5148:87;11950:7:::1;-1:-1:-1::0;;;;;11950:21:0::1;;;11912:59;:114;;;;-1:-1:-1::0;12011:15:0::1;11988:20;:10;12001:7;11988:20;:::i;:::-;:38;11912:114;11894:216;;;12060:38;::::0;-1:-1:-1;;;12060:38:0;;12087:10:::1;12060:38;::::0;::::1;3489:51:1::0;3462:18;;12060:38:0::1;3343:203:1::0;11894:216:0::1;12157:1;5221:6:::0;-1:-1:-1;;;;;5221:6:0;12138:21;:59;::::1;;;-1:-1:-1::0;12187:10:0::1;12176:7;5194::::0;5221:6;-1:-1:-1;;;;;5221:6:0;;5148:87;12176:7:::1;-1:-1:-1::0;;;;;12176:21:0::1;;;12138:59;:114;;;;-1:-1:-1::0;12237:15:0::1;12214:20;:10;12227:7;12214:20;:::i;:::-;:38;12138:114;12120:313;;;12326:20;:10;12339:7;12326:20;:::i;:::-;12391:15;12367:20;:10;12380:7;12367:20;:::i;:::-;12366:40;;;;:::i;:::-;12286:135;::::0;-1:-1:-1;;;12286:135:0;;::::1;::::0;::::1;4868:25:1::0;;;;4909:18;;;4902:34;4841:18;;12286:135:0::1;4694:248:1::0;12120:313:0::1;12448:19;::::0;-1:-1:-1;;;12448:19:0;::::1;;;12443:79;;12484:19;:26:::0;;-1:-1:-1;;;;12484:26:0::1;-1:-1:-1::0;;;12484:26:0::1;::::0;;12443:79:::1;12537:11;::::0;-1:-1:-1;;;12537:11:0;::::1;;;12532:63;;12565:11;:18:::0;;-1:-1:-1;;;;12565:18:0::1;-1:-1:-1::0;;;12565:18:0::1;::::0;;12532:63:::1;12610:13;::::0;-1:-1:-1;;;12610:13:0;::::1;;;12605:67;;12640:13;:20:::0;;-1:-1:-1;;;;12640:20:0::1;-1:-1:-1::0;;;12640:20:0::1;::::0;;12605:67:::1;12687:19;::::0;-1:-1:-1;;;12687:19:0;::::1;;;12682:79;;12723:19;:26:::0;;-1:-1:-1;;;;12723:26:0::1;-1:-1:-1::0;;;12723:26:0::1;::::0;;12682:79:::1;12771:12;:19:::0;;-1:-1:-1;;;;12771:19:0::1;-1:-1:-1::0;;;12771:19:0::1;::::0;;12818:15:::1;12801:14;:32:::0;;;12862:12:::1;12844:15;:30:::0;12892:41:::1;::::0;;12905:10:::1;8295:51:1::0;;8377:2;8362:18;;8355:34;;;;12892:41:0::1;::::0;8268:18:1;12892:41:0::1;8121:274:1::0;21891:407:0;8110:21;:19;:21::i;:::-;-1:-1:-1;;;;;22028:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;21998:62:::1;::::0;22017:9;;22028:31:::1;;21998:18;:62::i;:::-;-1:-1:-1::0;;;;;22088:31:0;::::1;22071:14;22088:31:::0;;;:25:::1;:31;::::0;;;;;;;;;;22130:43;::::1;;-1:-1:-1::0;;22130:43:0;::::1;::::0;::::1;::::0;;;22189:101;;16587:3:1;16569:22;;;16628:2;16607:19;;;16600:31;16668:27;16662:3;16647:19;;16640:56;16786:20;;;16779:45;;;;22088:31:0::1;::::0;;::::1;16867:14:1::0;;16860:22;16840:18;;;16833:50;;;;16914:2;16899:18;;16892:50;;;;22262:10:0::1;-1:-1:-1::0;16958:19:1;;16951:44;22274:15:0::1;-1:-1:-1::0;17011:19:1;;17004:35;22088:31:0;22189:101:::1;::::0;16728:3:1;16713:19;22189:101:0::1;16257:788:1::0;18043:305:0;8110:21;:19;:21::i;:::-;18154:13:::1;::::0;18124:44:::1;::::0;18143:9;;-1:-1:-1;;;18154:13:0;::::1;;;18124:18;:44::i;:::-;18196:13;::::0;;18220:25;::::1;;-1:-1:-1::0;;;18220:25:0;;::::1;-1:-1:-1::0;;;;18220:25:0;::::1;;::::0;;;18261:79:::1;::::0;;17352:3:1;17334:22;;;17393:2;17372:19;;;17365:31;-1:-1:-1;;;17427:3:1;17412:19;;17405:44;18196:13:0::1;::::0;;;::::1;::::0;;;::::1;17530:14:1::0;;17523:22;17516:4;17501:20;;17494:52;17562:18;;;17555:50;18312:10:0::1;-1:-1:-1::0;17621:18:1;;17614:60;18324:15:0::1;-1:-1:-1::0;17690:19:1;;17683:35;-1:-1:-1;;;;;;;;;;;18261:79:0;17481:3:1;17466:19;18261:79:0::1;17050:674:1::0;12949:151:0;12999:7;13071:21;13089:1;13071:9;:21::i;:::-;13042:26;13060:6;13042:9;:26::i;:::-;25232:12;;13026:42;;;;:::i;:::-;:66;;;;:::i;:::-;13019:73;;12949:151;:::o;16277:228::-;8110:21;:19;:21::i;:::-;16353:19:::1;::::0;16342:46:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;16342:46:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;16353:19:0;::::1;;;::::0;16342:10:::1;:46::i;:::-;16399:19;:26:::0;;-1:-1:-1;;;;16399:26:0::1;-1:-1:-1::0;;;16399:26:0::1;::::0;;16441:56:::1;::::0;;17987:2:1;17969:21;;;18026:2;18006:18;;;17999:30;-1:-1:-1;;;18060:3:1;18045:19;;18038:50;16469:10:0::1;18155:4:1::0;18140:20;;18133:62;16481:15:0::1;18211:18:1::0;;;18204:34;;;;-1:-1:-1;;;;;;;;;;;16441:56:0;18120:3:1;18105:19;16441:56:0::1;17729:515:1::0;25386:186:0;25455:4;25491:10;25512:30;25491:10;25532:2;25536:5;25512:9;:30::i;15637:189::-;8110:21;:19;:21::i;:::-;15706:11:::1;::::0;15695:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;15695:30:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;15706:11:0;::::1;;;::::0;15695:10:::1;:30::i;:::-;15736:11;:18:::0;;-1:-1:-1;;;;15736:18:0::1;-1:-1:-1::0;;;15736:18:0::1;::::0;;15770:48:::1;::::0;;18507:2:1;18489:21;;;18546:2;18526:18;;;18519:30;-1:-1:-1;;;18580:3:1;18565:19;;18558:42;15790:10:0::1;18667:4:1::0;18652:20;;18645:62;15802:15:0::1;18723:18:1::0;;;18716:34;;;;-1:-1:-1;;;;;;;;;;;15770:48:0;18632:3:1;18617:19;15770:48:0::1;18249:507:1::0;16513:359:0;8110:21;:19;:21::i;:::-;16585:19:::1;::::0;-1:-1:-1;;;16585:19:0;::::1;;;16580:80;;16628:20;;-1:-1:-1::0;;;16628:20:0::1;;;;;;;;;;;16580:80;6615:6;16670:14;:31:::0;16712:19:::1;:26:::0;;-1:-1:-1;;;;16749:27:0;-1:-1:-1;;;16749:27:0;;;16792:72:::1;::::0;;19063:3:1;19045:22;;;19104:2;19083:19;;;19076:31;-1:-1:-1;;;19138:3:1;19123:19;;19116:46;-1:-1:-1;19229:4:1;19214:20;;19207:52;-1:-1:-1;19275:18:1;;;19268:50;;;;16836:10:0::1;-1:-1:-1::0;19334:18:1;;19327:60;16848:15:0::1;-1:-1:-1::0;19403:19:1;;19396:35;-1:-1:-1;;;;;;;;;;;16792:72:0;19194:3:1;19179:19;16792:72:0::1;18761:676:1::0;15834:214:0;8110:21;:19;:21::i;:::-;15908:16:::1;::::0;15897:40:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;15897:40:0::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;15908:16:0;::::1;;;::::0;15897:10:::1;:40::i;:::-;15948:16;:23:::0;;-1:-1:-1;;;;15948:23:0::1;-1:-1:-1::0;;;15948:23:0::1;::::0;;15987:53:::1;::::0;;19700:2:1;19682:21;;;19739:2;19719:18;;;19712:30;-1:-1:-1;;;19773:3:1;19758:19;;19751:47;16012:10:0::1;19865:4:1::0;19850:20;;19843:62;16024:15:0::1;19921:18:1::0;;;19914:34;;;;-1:-1:-1;;;;;;;;;;;15987:53:0;19830:3:1;19815:19;15987:53:0::1;19442:512:1::0;24487:360:0;4708:13;:11;:13::i;:::-;5194:7;5221:6;-1:-1:-1;;;;;5221:6:0;-1:-1:-1;;;;;24573:19:0::1;:8;-1:-1:-1::0;;;;;24573:19:0::1;::::0;24569:92:::1;;24616:33;::::0;-1:-1:-1;;;24616:33:0;;-1:-1:-1;;;;;3507:32:1;;24616:33:0::1;::::0;::::1;3489:51:1::0;3462:18;;24616:33:0::1;3343:203:1::0;24569:92:0::1;-1:-1:-1::0;;;;;;;24675:27:0;::::1;::::0;24671:91:::1;;24726:24;::::0;-1:-1:-1;;;24726:24:0;;-1:-1:-1;;;;;3507:32:1;;24726:24:0::1;::::0;::::1;3489:51:1::0;3462:18;;24726:24:0::1;3343:203:1::0;24671:91:0::1;24772:12;:23:::0;;-1:-1:-1;;;;;;24772:23:0::1;-1:-1:-1::0;;;;;24772:23:0;::::1;;::::0;;24806:33:::1;24772:23:::0;24806::::1;:33::i;26414:136::-:0;26502:40;26511:8;26521:7;26530:5;26537:4;26502:8;:40::i;:::-;26414:136;;;:::o;13108:243::-;13175:16;;13164:40;;;;;;;;;;;;-1:-1:-1;;;13164:40:0;;;;;;-1:-1:-1;;;13175:16:0;;;;;13164:10;:40::i;:::-;13219:12;;-1:-1:-1;;;;;13219:12:0;13235:10;13219:26;;;;:51;;-1:-1:-1;13260:10:0;13249:7;5194;5221:6;-1:-1:-1;;;;;5221:6:0;;5148:87;13249:7;-1:-1:-1;;;;;13249:21:0;;;13219:51;13215:129;;;13294:38;;-1:-1:-1;;;13294:38:0;;13321:10;13294:38;;;3489:51:1;3462:18;;13294:38:0;3343:203:1;13359:147:0;13443:5;13439:60;;;13479:7;13472:15;;-1:-1:-1;;;13472:15:0;;;;;;;;:::i;13439:60::-;13359:147;;:::o;13514:185::-;13618:7;13606:8;:19;13602:90;;13649:31;;-1:-1:-1;;;13649:31:0;;;;;1901:25:1;;;1874:18;;13649:31:0;1755:177:1;1711:162:0;1821:43;;;-1:-1:-1;;;;;8313:32:1;;1821:43:0;;;8295:51:1;8362:18;;;;8355:34;;;1821:43:0;;;;;;;;;;8268:18:1;;;;1821:43:0;;;;;;;;-1:-1:-1;;;;;1821:43:0;-1:-1:-1;;;1821:43:0;;;1794:71;;1814:5;;1794:19;:71::i;27021:496::-;-1:-1:-1;;;;;25690:21:0;;;27124:24;25690:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;-1:-1:-1;;27194:37:0;;27190:320;;27271:5;27252:16;:24;27248:132;;;27304:60;;-1:-1:-1;;;27304:60:0;;-1:-1:-1;;;;;20179:32:1;;27304:60:0;;;20161:51:1;20228:18;;;20221:34;;;20271:18;;;20264:34;;;20134:18;;27304:60:0;19959:345:1;27248:132:0;27423:60;27432:8;27442:7;27470:5;27451:16;:24;27477:5;27423:8;:60::i;27525:1338::-;-1:-1:-1;;;;;27609:18:0;;27605:88;;27651:30;;-1:-1:-1;;;27651:30:0;;27678:1;27651:30;;;3489:51:1;3462:18;;27651:30:0;3343:203:1;27605:88:0;-1:-1:-1;;;;;27707:16:0;;27703:88;;27747:32;;-1:-1:-1;;;27747:32:0;;27776:1;27747:32;;;3489:51:1;3462:18;;27747:32:0;3343:203:1;27703:88:0;27806:12;;-1:-1:-1;;;27806:12:0;;;;27801:151;;-1:-1:-1;;;;;27840:17:0;;;;;;:11;:17;;;;;;;;27839:18;:38;;;;-1:-1:-1;;;;;;27862:15:0;;;;;;:11;:15;;;;;;;;27861:16;27839:38;27835:106;;;27905:20;;-1:-1:-1;;;27905:20:0;;;;;;;;;;;27835:106;27968:6;;-1:-1:-1;;;27968:6:0;;;;;:27;;-1:-1:-1;;;;;;27978:17:0;;;;;;:11;:17;;;;;;;;27968:27;27964:91;;;28019:24;28027:4;28033:2;28037:5;28019:7;:24::i;27964:91::-;28077:4;;-1:-1:-1;;;;;28069:12:0;;;28077:4;;28069:12;;;;:29;;-1:-1:-1;28085:13:0;;-1:-1:-1;;;28085:13:0;;;;28069:29;:80;;;;;28142:7;;28122:16;;28102:17;;:36;;;;:::i;:::-;:47;;28069:80;:119;;;;;28181:7;;28153:24;28171:4;28153:9;:24::i;:::-;:35;;28069:119;28065:473;;;28226:7;;28254:16;;-1:-1:-1;;;28254:16:0;;;;:41;;;;-1:-1:-1;28293:1:0;5221:6;-1:-1:-1;;;;;5221:6:0;28274:21;28254:41;28250:238;;;28316:22;6615:6;28341:19;:17;:19::i;:::-;:24;;28363:2;28341:24;:::i;:::-;:41;;;;:::i;:::-;28316:66;;28432:10;28414:14;:28;;:58;;28462:10;28414:58;;;28445:14;28414:58;28401:71;;28297:191;28250:238;28504:22;28515:10;28504;:22::i;:::-;28190:348;28065:473;28591:11;;28569:5;;-1:-1:-1;;;28591:11:0;;;;:33;;;;-1:-1:-1;;;;;;28607:17:0;;;;;;:11;:17;;;;;;;;28606:18;28591:33;:53;;;;-1:-1:-1;;;;;;28629:15:0;;;;;;:11;:15;;;;;;;;28628:16;28591:53;28587:134;;;28672:37;28693:4;28699:2;28703:5;28672:20;:37::i;:::-;28661:48;;28587:134;28737:19;;-1:-1:-1;;;28737:19:0;;;;28733:83;;;28773:31;28791:8;28801:2;28773:17;:31::i;:::-;28828:27;28836:4;28842:2;28846:8;28828:7;:27::i;13707:179::-;13805:7;13793:19;;:8;:19;;;13789:90;;13836:31;;-1:-1:-1;;;13836:31:0;;1408:14:1;;1401:22;13836:31:0;;;1383:41:1;1356:18;;13836:31:0;1243:187:1;13894:195:0;14004:7;-1:-1:-1;;;;;13990:21:0;:10;-1:-1:-1;;;;;13990:21:0;;13986:96;;14035:35;;-1:-1:-1;;;14035:35:0;;-1:-1:-1;;;;;3507:32:1;;14035:35:0;;;3489:51:1;3462:18;;14035:35:0;3343:203:1;5243:162:0;5314:10;5303:7;5194;5221:6;-1:-1:-1;;;;;5221:6:0;;5148:87;5303:7;-1:-1:-1;;;;;5303:21:0;;5299:99;;5348:38;;-1:-1:-1;;;5348:38:0;;5375:10;5348:38;;;3489:51:1;3462:18;;5348:38:0;3343:203:1;24059:420:0;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;-1:-1:-1;;24139:10:0::1;:29:::0;24135:78:::1;;24179:31;::::0;-1:-1:-1;;;24179:31:0;;24202:6:::1;24179:31;::::0;::::1;3489:51:1::0;3462:18;;24179:31:0::1;3343:203:1::0;24135:78:0::1;24247:16;::::0;;24261:1:::1;24247:16:::0;;;;;::::1;::::0;;24223:21:::1;::::0;24247:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;24284:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;24284:13:0;;;;24223:40;;-1:-1:-1;;;;;;24284:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;24284:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24274:4;24279:1;24274:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24274:23:0::1;;;-1:-1:-1::0;;;;;24274:23:0::1;;;::::0;::::1;24326:4;24308;24313:1;24308:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24308:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24344:6:::1;::::0;:127:::1;::::0;-1:-1:-1;;;24344:127:0;;:6;::::1;::::0;:57:::1;::::0;24423:6;;24344:127:::1;::::0;:6:::1;::::0;24445:4;;24451:2;;24455:15:::1;::::0;24344:127:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8040:6:0;:14;;-1:-1:-1;;;;8040:14:0;;;-1:-1:-1;;;;;;24059:420:0:o;5752:191::-;5826:16;5845:6;;-1:-1:-1;;;;;5862:17:0;;;-1:-1:-1;;;;;;5862:17:0;;;;;;5895:40;;5845:6;;;;;;;5895:40;;5826:16;5895:40;5815:128;5752:191;:::o;5524:220::-;4708:13;:11;:13::i;:::-;-1:-1:-1;;;;;5609:22:0;::::1;5605:93;;5655:31;::::0;-1:-1:-1;;;5655:31:0;;5683:1:::1;5655:31;::::0;::::1;3489:51:1::0;3462:18;;5655:31:0::1;3343:203:1::0;5605:93:0::1;5708:28;5727:8;5708:18;:28::i;26558:455::-:0;-1:-1:-1;;;;;26674:22:0;;26670:94;;26720:32;;-1:-1:-1;;;26720:32:0;;26749:1;26720:32;;;3489:51:1;3462:18;;26720:32:0;3343:203:1;26670:94:0;-1:-1:-1;;;;;26778:21:0;;26774:92;;26823:31;;-1:-1:-1;;;26823:31:0;;26851:1;26823:31;;;3489:51:1;3462:18;;26823:31:0;3343:203:1;26774:92:0;-1:-1:-1;;;;;26876:21:0;;;;;;;:11;:21;;;;;;;;:30;;;;;;;;;:38;;;26925:81;;;;26979:7;-1:-1:-1;;;;;26960:34:0;26969:8;-1:-1:-1;;;;;26960:34:0;;26988:5;26960:34;;;;1901:25:1;;1889:2;1874:18;;1755:177;26960:34:0;;;;;;;;26558:455;;;;:::o;1881:295::-;1962:23;1988:33;-1:-1:-1;;;;;1988:27:0;;2016:4;1988:27;:33::i;:::-;1962:59;;2036:10;:17;2057:1;2036:22;;:57;;;;;2074:10;2063:30;;;;;;;;;;;;:::i;:::-;2062:31;2036:57;2032:137;;;2117:40;;-1:-1:-1;;;2117:40:0;;-1:-1:-1;;;;;3507:32:1;;2117:40:0;;;3489:51:1;3462:18;;2117:40:0;3343:203:1;29397:730:0;-1:-1:-1;;;;;29487:18:0;;29483:369;;29538:5;29522:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;29483:369:0;;-1:-1:-1;29483:369:0;;-1:-1:-1;;;;;29598:15:0;;29576:19;29598:15;;;:9;:15;;;;;;29632:19;;;29628:117;;;29679:50;;-1:-1:-1;;;29679:50:0;;-1:-1:-1;;;;;20179:32:1;;29679:50:0;;;20161:51:1;20228:18;;;20221:34;;;20271:18;;;20264:34;;;20134:18;;29679:50:0;19959:345:1;29628:117:0;-1:-1:-1;;;;;29788:15:0;;;;;;:9;:15;;;;;29806:19;;;;29788:37;;29483:369;-1:-1:-1;;;;;29868:16:0;;29864:213;;29930:12;:21;;;;;;;29864:213;;;-1:-1:-1;;;;;30028:13:0;;;;;;:9;:13;;;;;:22;;;;;;29864:213;30109:2;-1:-1:-1;;;;;30094:25:0;30103:4;-1:-1:-1;;;;;30094:25:0;;30113:5;30094:25;;;;1901::1;;1889:2;1874:18;;1755:177;30094:25:0;;;;;;;;29397:730;;;:::o;28871:518::-;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;-1:-1:-1;;;;;29002:14:0;::::1;28978:7:::0;29002:14;;;:8:::1;:14;::::0;;;;;8004:13;29002:14:::1;:40:::0;::::1;;;-1:-1:-1::0;29021:6:0::1;:16:::0;:20;;29002:40:::1;28998:104;;;29066:24;29077:4;29083:6;29066:10;:24::i;:::-;29059:31;;;;28998:104;-1:-1:-1::0;;;;;29116:12:0;::::1;;::::0;;;:8:::1;:12;::::0;;;;;::::1;;:39:::0;::::1;;;-1:-1:-1::0;29133:7:0::1;:17:::0;:21;;29116:39:::1;29112:104;;;29179:25;29191:4;29197:6;29179:11;:25::i;29112:104::-;-1:-1:-1::0;;;;;29231:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;29230:15;:32:::0;::::1;;;-1:-1:-1::0;;;;;;29250:12:0;::::1;;::::0;;;:8:::1;:12;::::0;;;;;::::1;;29249:13;29230:32;:63;;;;-1:-1:-1::0;29267:11:0::1;:21:::0;:25;;29230:63:::1;29226:132;;;29317:29;29333:4;29339:6;29317:15;:29::i;29226:132::-;-1:-1:-1::0;29375:6:0;8028:1:::1;8040:6:::0;:14;;-1:-1:-1;;;;8040:14:0;;;28871:518;;-1:-1:-1;;;28871:518:0:o;14097:369::-;14177:18;14214:6;14198:13;14208:2;14198:9;:13::i;:::-;:22;;;;:::i;:::-;14177:43;;14231:13;6615:6;14269:14;;14247:19;:17;:19::i;:::-;:36;;;;:::i;:::-;:53;;;;:::i;:::-;14315:19;;14231:69;;-1:-1:-1;;;;14315:19:0;;;;:53;;;;-1:-1:-1;;;;;;14339:29:0;;;;;;:25;:29;;;;;;;;14338:30;14315:53;:75;;;;;14385:5;14372:10;:18;14315:75;14311:148;;;14414:33;;;-1:-1:-1;;;14414:33:0;;;;;21036:21:1;;;;21093:2;21073:18;;;21066:30;-1:-1:-1;;;21112:18:1;;;21105:41;21198:20;;;21191:36;;;21163:19;;14414:33:0;20824:409:1;295:153:0;370:12;402:38;424:6;432:4;438:1;402:21;:38::i;22306:141::-;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;22410:29:::1;::::0;;::::1;::::0;::::1;::::0;;;8013:4;22410:29;;;22383:7;;22410:29:::1;::::0;22426:4;22432:6;22410:7:::1;:29::i;22455:143::-:0;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;22560:30:::1;::::0;;::::1;::::0;::::1;::::0;;;22568:7:::1;22560:30:::0;;;22533:7;;22560:30:::1;::::0;22577:4;22583:6;22560:7:::1;:30::i;22606:151::-:0;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;22715:34:::1;::::0;;::::1;::::0;::::1;::::0;;;22723:11:::1;22715:34:::0;;;22688:7;;22715:34:::1;::::0;22736:4;22742:6;22715:7:::1;:34::i;456:398::-:0;555:12;608:5;584:21;:29;580:110;;;637:41;;-1:-1:-1;;;637:41:0;;672:4;637:41;;;3489:51:1;3462:18;;637:41:0;3343:203:1;580:110:0;701:12;715:23;742:6;-1:-1:-1;;;;;742:11:0;761:5;768:4;742:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;700:73;;;;791:55;818:6;826:7;835:10;791:26;:55::i;:::-;784:62;456:398;-1:-1:-1;;;;;;456:398:0:o;22765:492::-;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;22898:17;;22946:15:::1;::::0;22859:7;;22898:17;22946:19:::1;::::0;22964:1:::1;22946:19;:::i;:::-;22930:12;:35;22926:83;;-1:-1:-1::0;22993:4:0::1;22926:83;23019:17;6615:6;23039:17;23048:8:::0;23039:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;23019:54:::0;-1:-1:-1;23084:17:0::1;23104:18;23019:54:::0;23104:6;:18:::1;:::i;:::-;23084:38:::0;-1:-1:-1;23137:13:0;;23133:90:::1;;23167:44;23176:7;23185:4;23191:9;23202:8;23167;:44::i;:::-;8040:6:::0;:14;;-1:-1:-1;;;;8040:14:0;;;23240:9;22765:492;-1:-1:-1;;;;;;22765:492:0:o;862:391::-;976:12;1006:7;1001:245;;1030:19;1038:10;1030:7;:19::i;:::-;1001:245;;;1086:17;;:22;:49;;;;-1:-1:-1;;;;;;1112:18:0;;;:23;1086:49;1082:121;;;1163:24;;-1:-1:-1;;;1163:24:0;;-1:-1:-1;;;;;3507:32:1;;1163:24:0;;;3489:51:1;3462:18;;1163:24:0;3343:203:1;1082:121:0;-1:-1:-1;1224:10:0;1217:17;;23265:286;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;23411:17;;8004:13;;23431:3;;23402:26:::1;::::0;:6;:26:::1;:::i;:::-;:32;;;;:::i;:::-;23375:59;;23445:41;23461:16;23479:6;23445:15;:41::i;:::-;23507:36;23515:4;23529;23536:6;23507:7;:36::i;:::-;-1:-1:-1::0;;8040:6:0;:14;;-1:-1:-1;;;;8040:14:0;;;-1:-1:-1;;;23265:286:0:o;1261:328::-;1331:17;;:21;1327:255;;1426:10;1420:17;1483:15;1470:10;1466:2;1462:19;1455:44;1327:255;1553:17;;-1:-1:-1;;;1553:17:0;;;;;;;;;;;23559:184;8004:6;:13;;-1:-1:-1;;;;8004:13:0;-1:-1:-1;;;8004:13:0;;;23655:12:::1;:42:::0;;23681:16;;23655:12;8004:13;;23655:42:::1;::::0;23681:16;;23655:42:::1;:::i;:::-;;;;;;;;23729:6;23708:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8040:6:0;:14;;-1:-1:-1;;;;8040:14:0;;;-1:-1:-1;;23559:184:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;855:131::-;-1:-1:-1;;;;;930:31:1;;920:42;;910:70;;976:1;973;966:12;991:247;1050:6;1103:2;1091:9;1082:7;1078:23;1074:32;1071:52;;;1119:1;1116;1109:12;1071:52;1158:9;1145:23;1177:31;1202:5;1177:31;:::i;1435:315::-;1503:6;1511;1564:2;1552:9;1543:7;1539:23;1535:32;1532:52;;;1580:1;1577;1570:12;1532:52;1619:9;1606:23;1638:31;1663:5;1638:31;:::i;:::-;1688:5;1740:2;1725:18;;;;1712:32;;-1:-1:-1;;;1435:315:1:o;1937:456::-;2014:6;2022;2030;2083:2;2071:9;2062:7;2058:23;2054:32;2051:52;;;2099:1;2096;2089:12;2051:52;2138:9;2125:23;2157:31;2182:5;2157:31;:::i;:::-;2207:5;-1:-1:-1;2264:2:1;2249:18;;2236:32;2277:33;2236:32;2277:33;:::i;:::-;1937:456;;2329:7;;-1:-1:-1;;;2383:2:1;2368:18;;;;2355:32;;1937:456::o;2587:118::-;2673:5;2666:13;2659:21;2652:5;2649:32;2639:60;;2695:1;2692;2685:12;2710:382;2775:6;2783;2836:2;2824:9;2815:7;2811:23;2807:32;2804:52;;;2852:1;2849;2842:12;2804:52;2891:9;2878:23;2910:31;2935:5;2910:31;:::i;:::-;2960:5;-1:-1:-1;3017:2:1;3002:18;;2989:32;3030:30;2989:32;3030:30;:::i;:::-;3079:7;3069:17;;;2710:382;;;;;:::o;3097:241::-;3153:6;3206:2;3194:9;3185:7;3181:23;3177:32;3174:52;;;3222:1;3219;3212:12;3174:52;3261:9;3248:23;3280:28;3302:5;3280:28;:::i;3551:388::-;3619:6;3627;3680:2;3668:9;3659:7;3655:23;3651:32;3648:52;;;3696:1;3693;3686:12;3648:52;3735:9;3722:23;3754:31;3779:5;3754:31;:::i;:::-;3804:5;-1:-1:-1;3861:2:1;3846:18;;3833:32;3874:33;3833:32;3874:33;:::i;4167:127::-;4228:10;4223:3;4219:20;4216:1;4209:31;4259:4;4256:1;4249:15;4283:4;4280:1;4273:15;4299:168;4372:9;;;4403;;4420:15;;;4414:22;;4400:37;4390:71;;4441:18;;:::i;4472:217::-;4512:1;4538;4528:132;;4582:10;4577:3;4573:20;4570:1;4563:31;4617:4;4614:1;4607:15;4645:4;4642:1;4635:15;4528:132;-1:-1:-1;4674:9:1;;4472:217::o;4947:128::-;5014:9;;;5035:11;;;5032:37;;;5049:18;;:::i;5080:125::-;5145:9;;;5166:10;;;5163:36;;;5179:18;;:::i;5342:127::-;5403:10;5398:3;5394:20;5391:1;5384:31;5434:4;5431:1;5424:15;5458:4;5455:1;5448:15;5474:251;5544:6;5597:2;5585:9;5576:7;5572:23;5568:32;5565:52;;;5613:1;5610;5603:12;5565:52;5645:9;5639:16;5664:31;5689:5;5664:31;:::i;6152:461::-;6205:3;6243:5;6237:12;6270:6;6265:3;6258:19;6296:4;6325:2;6320:3;6316:12;6309:19;;6362:2;6355:5;6351:14;6383:1;6393:195;6407:6;6404:1;6401:13;6393:195;;;6472:13;;-1:-1:-1;;;;;6468:39:1;6456:52;;6528:12;;;;6563:15;;;;6504:1;6422:9;6393:195;;;-1:-1:-1;6604:3:1;;6152:461;-1:-1:-1;;;;;6152:461:1:o;6618:582::-;6917:6;6906:9;6899:25;6960:6;6955:2;6944:9;6940:18;6933:34;7003:3;6998:2;6987:9;6983:18;6976:31;6880:4;7024:57;7076:3;7065:9;7061:19;7053:6;7024:57;:::i;:::-;-1:-1:-1;;;;;7117:32:1;;;;7112:2;7097:18;;7090:60;-1:-1:-1;7181:3:1;7166:19;7159:35;7016:65;6618:582;-1:-1:-1;;;6618:582:1:o;8400:245::-;8467:6;8520:2;8508:9;8499:7;8495:23;8491:32;8488:52;;;8536:1;8533;8526:12;8488:52;8568:9;8562:16;8587:28;8609:5;8587:28;:::i;9067:184::-;9137:6;9190:2;9178:9;9169:7;9165:23;9161:32;9158:52;;;9206:1;9203;9196:12;9158:52;-1:-1:-1;9229:16:1;;9067:184;-1:-1:-1;9067:184:1:o;20309:510::-;20580:6;20569:9;20562:25;20623:3;20618:2;20607:9;20603:18;20596:31;20543:4;20644:57;20696:3;20685:9;20681:19;20673:6;20644:57;:::i;:::-;-1:-1:-1;;;;;20737:32:1;;;;20732:2;20717:18;;20710:60;-1:-1:-1;20801:2:1;20786:18;20779:34;20636:65;20309:510;-1:-1:-1;;20309:510:1:o;21238:287::-;21367:3;21405:6;21399:13;21421:66;21480:6;21475:3;21468:4;21460:6;21456:17;21421:66;:::i;:::-;21503:16;;;;;21238:287;-1:-1:-1;;21238:287:1:o

Swarm Source

ipfs://d5756756294cee5b4320f152a022906e8cce523bdf88ef164589180fc849504c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.