ETH Price: $2,062.38 (-2.83%)

Token

SQUIDGAME (SQUID)
 

Overview

Max Total Supply

456,212,000 SQUID

Holders

11

Transfers

-
0 (0%)

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
SQUIDGAME

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-11-21
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;

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 amount) external returns (bool);

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

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

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

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
    using Address for address;

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

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

abstract contract Auth {
    address public owner;
    mapping(address => bool) internal authorizations;

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

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED");
        _;
    }

    function authorize(address adr) public authorized {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public authorized {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public authorized {
        require(adr != address(0), "Zero Address");
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    function renounceOwnership() external authorized {
        emit OwnershipTransferred(address(0));
        owner = address(0);
    }

    event OwnershipTransferred(address owner);
}

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

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

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

interface IPair {
    function sync() external;
}

interface IWeth {
    function deposit() external payable;
}

contract SQUIDGAME is IERC20, Auth {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    string private constant _name = "SQUIDGAME";
    string private constant _symbol = "SQUID";

    uint8 private constant _decimals = 9;
    uint256 private constant _totalSupply = 456_212_000_000_000_000;

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) _isBot;
    mapping(address => bool) isWhitelisted;
    mapping(address => bool) isBlacklisted;

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _maxTxAmount = (_totalSupply * 10000) / 10000;
    uint256 public _maxWalletAmount = (_totalSupply * 10000) / 10000;

    IRouter public immutable router;
    address public immutable pair;
    bool tradingEnabled = false;
    uint256 startedTime;

    uint256 constant feeDenominator = 10000;

    struct Fee {
        uint256 marketingFee;
        uint256 burnFee;
        uint256 liquidFee;
        uint256 totalFee;
    }

    enum TransactionType {
        BUY,
        SELL,
        TRANSFER
    }

    mapping(TransactionType => Fee) public fees;

    bool swapAndLiquifyEnabled = false;
    uint256 swapTimes;
    uint256 minTransactionsBeforeSwap = 7;
    bool swapping;
    bool antiBotEnabled = true;

    uint256 swapThreshold = (_totalSupply * 300) / 100000;
    uint256 _minTokenAmount = (_totalSupply * 15) / 100000;

    uint256 marketing_divisor = 0;
    uint256 liquidity_divisor = 100;
    uint256 total_divisor = 100;

    address liquidity_receiver;
    address staking_receiver;
    address marketing_receiver;

    event FeesUpdated(
        TransactionType indexed transactionType,
        uint256 burnFee,
        uint256 marketingFee,
        uint256 swapAndLiquifyFee
    );
    event FeesAddressesUpdated(
        address marketing,
        address liquidity,
        address staking
    );
    event ForceAdjustedLP(bool indexed squidgame, uint256 amount, bool indexed add);
    event TokensAirdroped(
        address indexed sender,
        uint256 length,
        uint256 airdropedAmount
    );
    event WhitelistUpdated(address indexed account, bool indexed whitelisted);
    event BotUpdated(address indexed account, bool indexed isBot);
    event BlacklistedUpdated(address indexed account, bool indexed blacklisted);
    event AntiBotStateUpdated(bool indexed enabled);
    event TradingEnabled();
    event TradingDisabled();
    event SwapBackSettingsUpdated(
        bool indexed enabled,
        uint256 threshold,
        uint256 minLimit,
        uint256 _minTransactions
    );
    event MaxLimitsUpdated(uint256 maxTxAmount, uint256 maxWalletAmount);
    event UnsupportedTokensRecoverd(
        address indexed token,
        address receiver,
        uint256 amount
    );
    event DivisorsUpdated(uint256 liquidity, uint256 marketing);

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

    constructor() Auth(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // eth - 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;

        // initilasing Fees
        fees[TransactionType.SELL] = Fee(300, 0, 0, 0);
        fees[TransactionType.BUY] = Fee(300, 0, 0, 0);
        fees[TransactionType.TRANSFER] = Fee(0, 0, 0, 0);

        isBlacklisted[address(0)] = true;

        isWhitelisted[msg.sender] = true;
        isWhitelisted[address(this)] = true;

        liquidity_receiver = address(this);
        staking_receiver = msg.sender;
        marketing_receiver = msg.sender;

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

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

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

    function isBot(address _address) public view returns (bool) {
        return _isBot[_address];
    }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function whitelistAddress(
        address _address,
        bool _whitelist
    ) external authorized {
        require(isWhitelisted[_address] != _whitelist, "Already set");
        isWhitelisted[_address] = _whitelist;

        emit WhitelistUpdated(_address, _whitelist);
    }

    function blacklistAddress(
        address _address,
        bool _blacklist
    ) external authorized {
        require(isBlacklisted[_address] != _blacklist, "Already set");
        isBlacklisted[_address] = _blacklist;

        emit BlacklistedUpdated(_address, _blacklist);
    }

    function updateBot(address _address, bool isBot_) external authorized {
        require(_isBot[_address] != isBot_, "Already set");
        _isBot[_address] = isBot_;

        emit BotUpdated(_address, isBot_);
    }

    function enableAntiBot(bool _enable) external authorized {
        require(antiBotEnabled != _enable, "Already set");
        antiBotEnabled = _enable;

        emit AntiBotStateUpdated(_enable);
    }

    function enableTrading(uint256 _input) external authorized {
        require(!tradingEnabled, "Already Enabled!");
        tradingEnabled = true;
        if (startedTime == 0)
            // initialise only once
            startedTime = block.timestamp.add(_input);

        emit TradingEnabled();
    }

    function updateSwapBackSettings(
        bool _enabled,
        uint256 _threshold,
        uint256 _minLimit,
        uint256 _minTransactionsBeforeSwap
    ) external authorized {
        swapAndLiquifyEnabled = _enabled;
        swapThreshold = _threshold;
        _minTokenAmount = _minLimit;
        minTransactionsBeforeSwap = _minTransactionsBeforeSwap;

        emit SwapBackSettingsUpdated(
            _enabled,
            _threshold,
            _minLimit,
            _minTransactionsBeforeSwap
        );
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        _spendAllowance(from, msg.sender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            msg.sender,
            spender,
            allowance(msg.sender, spender) + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = allowance(msg.sender, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount);

        bool takeFee = true;
        if (isWhitelisted[sender] || isWhitelisted[recipient]) {
            takeFee = false;
        } else {
            require(tradingEnabled, "Trading is Paused");
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );
            if (recipient != pair) {
                require(
                    _balances[recipient] + amount <= _maxWalletAmount,
                    "Wallet amount exceeds limit"
                );
            }
        }

        TransactionType transactionType;

        if (sender == pair) {
            transactionType = TransactionType.BUY;
            if (
                recipient != address(router) && block.timestamp <= startedTime
            ) {
                _isBot[recipient] = true;
            }
        } else if (recipient == pair) {
            transactionType = TransactionType.SELL;
        } else {
            transactionType = TransactionType.TRANSFER;
        }

        swapTimes = swapTimes.add(1);
        if (shouldSwapBack(sender, amount)) {
            swapAndLiquify(swapThreshold);
            swapTimes = 0;
        }

        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = takeFee
            ? takeTotalFee(sender, amount, transactionType)
            : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(!isBlacklisted[sender], "Blackisted");
        require(!isBlacklisted[recipient], "Blackisted");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(sender),
            "You are trying to transfer more than your balance"
        );
    }

    function takeTotalFee(
        address sender,
        uint256 amount,
        TransactionType transactionType
    ) internal returns (uint256) {
        Fee memory fee = fees[transactionType];
        uint256 totalFees = _isBot[sender] && antiBotEnabled
            ? (feeDenominator - 100)
            : fee.totalFee; // 99% fees if bot
        if (totalFees == 0) {
            return amount;
        }
        uint256 feeAmount = (amount.mul(totalFees)).div(feeDenominator);
        uint256 burnAmount = (feeAmount.mul(fee.burnFee)).div(totalFees);
        uint256 marketingAmount = (feeAmount.mul(fee.marketingFee)).div(
            totalFees
        );

        uint256 liquidAmount = feeAmount.sub(burnAmount).sub(marketingAmount);

        if (burnAmount > 0) {
            _balances[address(DEAD)] = _balances[address(DEAD)].add(burnAmount);
            emit Transfer(sender, address(DEAD), burnAmount);
        }
        if (marketingAmount > 0) {
            _balances[address(staking_receiver)] = _balances[
                address(staking_receiver)
            ].add(marketingAmount);
            emit Transfer(sender, address(staking_receiver), marketingAmount);
        }
        if (liquidAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(
                liquidAmount
            );
            emit Transfer(sender, address(this), liquidAmount);
        }
        return amount.sub(feeAmount);
    }

    function updateMaxLimits(
        uint256 _transaction,
        uint256 _wallet
    ) external authorized {
        require(
            _transaction >= 1,
            "Max txn limit cannot be less than 0.00001%"
        );
        require(_wallet >= 500000, "Max Wallet limit cannot be less than 5%");
        uint256 newTxLimit = (_totalSupply * _transaction) / 10000000;
        uint256 newWalletLimit = (_totalSupply * _wallet) / 10000000;
        _maxTxAmount = newTxLimit;
        _maxWalletAmount = newWalletLimit;

        emit MaxLimitsUpdated(_maxTxAmount, _maxWalletAmount);
    }

    function updateFee(
        TransactionType transactionType,
        uint256 _burnFee,
        uint256 _marketingFee,
        uint256 _swapAndLiquifyFee
    ) external authorized {
        require(
            _burnFee.add(_marketingFee).add(_swapAndLiquifyFee) <=
                feeDenominator.mul(3).div(20),
            "Tax cannot be more than 15%"
        );
        Fee storage fee = fees[transactionType];
        fee.burnFee = _burnFee;
        fee.marketingFee = _marketingFee;
        fee.liquidFee = _swapAndLiquifyFee;
        fee.totalFee = _burnFee.add(_marketingFee).add(_swapAndLiquifyFee);

        emit FeesUpdated(
            transactionType,
            _burnFee,
            _marketingFee,
            _swapAndLiquifyFee
        );
    }

    function updateFeesAddresses(
        address _marketing,
        address _liquidity,
        address _staking
    ) external authorized {
        require(_marketing != address(0), "Zero Address");
        require(_liquidity != address(0), "Zero Address");
        require(_staking != address(0), "Zero Address");
        marketing_receiver = _marketing;
        liquidity_receiver = _liquidity;
        staking_receiver = _staking;

        emit FeesAddressesUpdated(_marketing, _liquidity, _staking);
    }

    function shouldSwapBack(
        address sender,
        uint256 amount
    ) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return
            !swapping &&
            swapAndLiquifyEnabled &&
            aboveMin &&
            swapTimes >= minTransactionsBeforeSwap &&
            aboveThreshold &&
            sender != pair;
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 amountToLiquify = tokens
            .mul(liquidity_divisor)
            .div(total_divisor)
            .div(2);
        uint256 amountToSwap = tokens.sub(amountToLiquify);

        uint256 initialBalance = address(this).balance;
        swapTokensForETH(amountToSwap);

        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 totalETHFee = total_divisor.sub(liquidity_divisor.div(2));

        if (amountToLiquify > 0) {
            addLiquidity(
                amountToLiquify,
                deltaBalance.mul(liquidity_divisor).div(totalETHFee).div(2)
            );
        }
        // transfer ETH to marketing, teamFunds stay in contract for future distribution.
        transferETH(
            marketing_receiver,
            deltaBalance.mul(marketing_divisor).div(totalETHFee)
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function transferETH(address recipient, uint256 amount) private {
        if (amount == 0) return;
        (bool success, ) = payable(recipient).call{value: amount}("");
        require(success, "Unable to send ETH");
    }

    function airdropTokens(
        address[] calldata accounts,
        uint256[] calldata amounts
    ) external authorized {
        uint256 length = accounts.length;
        require(length == amounts.length, "array length mismatched");
        uint256 airdropAmount = 0;

        for (uint256 i = 0; i < length; i++) {
            // updating balance directly instead of calling transfer to save gas
            _balances[accounts[i]] += amounts[i];
            airdropAmount += amounts[i];
            emit Transfer(msg.sender, accounts[i], amounts[i]);
        }
        _balances[msg.sender] -= airdropAmount;

        emit TokensAirdroped(msg.sender, length, airdropAmount);
    }

    function AdjustLP(
        bool squidgame,
        uint256 amount,
        bool add
    ) external payable authorized {
        if (!squidgame) {
            require(add, "Cant withdraw bnb from pool");
            amount = msg.value;
            IWeth(router.WETH()).deposit{value: amount}();
            IERC20(router.WETH()).safeTransfer(pair, amount);
        } else {
            if (add) {
                _balances[msg.sender] -= amount;
                _balances[pair] += amount;
                emit Transfer(msg.sender, pair, amount);
            } else {
                _balances[pair] -= amount;
                _balances[msg.sender] += amount;
                emit Transfer(pair, msg.sender, amount);
            }
        }
        IPair(pair).sync();
        emit ForceAdjustedLP(squidgame, amount, add);
    }

    function recoverUnsupportedTokens(
        address _token,
        address _receiver,
        uint256 _percentage
    ) external authorized {
        uint256 amount = IERC20(_token).balanceOf(address(this));
        uint256 amountToWithdraw = amount.mul(_percentage).div(10000);
        IERC20(_token).safeTransfer(_receiver, amountToWithdraw);

        emit UnsupportedTokensRecoverd(_token, _receiver, amountToWithdraw);
    }

    function updateDivisors(
        uint256 _liquidity,
        uint256 _marketing
    ) external authorized {
        liquidity_divisor = _liquidity;
        marketing_divisor = _marketing;
        total_divisor = _liquidity.add(_marketing);

        emit DivisorsUpdated(_liquidity, _marketing);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AntiBotStateUpdated","type":"event"},{"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":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"BlacklistedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isBot","type":"bool"}],"name":"BotUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"DivisorsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"},{"indexed":false,"internalType":"address","name":"liquidity","type":"address"},{"indexed":false,"internalType":"address","name":"staking","type":"address"}],"name":"FeesAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum SQUIDGAME.TransactionType","name":"transactionType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapAndLiquifyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"squidgame","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"add","type":"bool"}],"name":"ForceAdjustedLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_minTransactions","type":"uint256"}],"name":"SwapBackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"airdropedAmount","type":"uint256"}],"name":"TokensAirdroped","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnsupportedTokensRecoverd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"squidgame","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"add","type":"bool"}],"name":"AdjustLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_blacklist","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SQUIDGAME.TransactionType","name":"","type":"uint8"}],"name":"fees","outputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"liquidFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"recoverUnsupportedTokens","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"isBot_","type":"bool"}],"name":"updateBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"updateDivisors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SQUIDGAME.TransactionType","name":"transactionType","type":"uint8"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_swapAndLiquifyFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"updateFeesAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transaction","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"updateMaxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_minLimit","type":"uint256"},{"internalType":"uint256","name":"_minTransactionsBeforeSwap","type":"uint256"}],"name":"updateSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelist","type":"bool"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526127106200001b670654ca659a454000826200057d565b620000279190620005ab565b60075561271062000041670654ca659a454000826200057d565b6200004d9190620005ab565b6008556009805460ff19908116909155600c805490911690556007600e55600f805461ff001916610100179055620186a062000094670654ca659a45400061012c6200057d565b620000a09190620005ab565b601055620186a0620000bc670654ca659a454000600f6200057d565b620000c89190620005ab565b601155600060125560646013556064601455348015620000e757600080fd5b50600080546001600160a01b0319163390811782558152600160208181526040808420805460ff1916909317909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a0155926004808401938290030181865afa15801562000163573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001899190620005ce565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd9190620005ce565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002719190620005ce565b6001600160a01b03838116608090815290821660a05260408051808301825261012c8082526000602080840182815284860183815260608087018581526001808752600b80875298517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf5593517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05591517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d15590517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d2558651808901885294855284830184815285880185815286830186815286805288865296517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f765590517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7755517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f785593517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f795585519687018652828752868201838152878701848152948801848152600280865296845297517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163455517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916355592517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916365594517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91637557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8805460ff19908116841790915533808352600587528583208054831685179055308084528684208054909316909417909155601580546001600160a01b0319908116909417905560168054841682179055601780549093168117909255818152918452828220670654ca659a45400090819055835190815292519495509390927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a3505062000600565b6000816000190483118215151615620005a657634e487b7160e01b600052601160045260246000fd5b500290565b600082620005c957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005e157600080fd5b81516001600160a01b0381168114620005f957600080fd5b9392505050565b60805160a051613236620006a46000396000818161061a015281816114740152818161155f015281816115aa015281816115ff01528181611678015281816116b701528181611d7d01528181611e2d01528181611edc015261226f0152600081816107610152818161139c0152818161149601528181611e6a015281816127830152818161283c01528181612878015281816128f2015261295a01526132366000f3fe6080604052600436106102295760003560e01c80637d1db4a511610123578063b9a45aac116100ab578063f2fde38b1161006f578063f2fde38b1461070f578063f319ae771461072f578063f887ea401461074f578063fac1b9bc14610783578063fe9fbb80146107a357600080fd5b8063b9a45aac1461067c578063dd62ed3e1461069c578063ea7b91ec146106bc578063eb42f193146106dc578063f0b37c04146106ef57600080fd5b806395d89b41116100f257806395d89b41146105ba578063a457c2d7146105e8578063a8aa1b3114610608578063a9059cbb1461063c578063b6a5d7de1461065c57600080fd5b80637d1db4a51461052c57806382aa7c68146105425780638da5cb5b146105625780638e5c3ad31461059a57600080fd5b806339264b66116101b15780636b7f8b90116101755780636b7f8b901461048b5780636c0a24eb146104ab578063706f6937146104c157806370a08231146104e1578063715018a61461051757600080fd5b806339264b66146103d257806339509351146103f25780633bbac5791461041257806340005fbe1461044b578063455a43961461046b57600080fd5b806323b872dd116101f857806323b872dd146102f05780632b112e49146103105780632f54bf6e14610325578063313ce56714610354578063357c13541461037057600080fd5b806306fdde0314610235578063095ea7b3146102795780630eefe44b146102a957806318160ddd146102cb57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b50604080518082019091526009815268535155494447414d4560b81b60208201525b6040516102709190612c32565b60405180910390f35b34801561028557600080fd5b50610299610294366004612c7d565b6107c3565b6040519015158152602001610270565b3480156102b557600080fd5b506102c96102c4366004612cbd565b6107d9565b005b3480156102d757600080fd5b50670654ca659a4540005b604051908152602001610270565b3480156102fc57600080fd5b5061029961030b366004612cf6565b61093b565b34801561031c57600080fd5b506102e261095e565b34801561033157600080fd5b50610299610340366004612d37565b6000546001600160a01b0391821691161490565b34801561036057600080fd5b5060405160098152602001610270565b34801561037c57600080fd5b506103b261038b366004612d54565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610270565b3480156103de57600080fd5b506102c96103ed366004612cf6565b6109a5565b3480156103fe57600080fd5b5061029961040d366004612c7d565b610aa2565b34801561041e57600080fd5b5061029961042d366004612d37565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561045757600080fd5b506102c9610466366004612d6f565b610ac3565b34801561047757600080fd5b506102c9610486366004612dc8565b610bde565b34801561049757600080fd5b506102c96104a6366004612e01565b610c97565b3480156104b757600080fd5b506102e260085481565b3480156104cd57600080fd5b506102c96104dc366004612e6a565b610d33565b3480156104ed57600080fd5b506102e26104fc366004612d37565b6001600160a01b031660009081526002602052604090205490565b34801561052357600080fd5b506102c9610f3d565b34801561053857600080fd5b506102e260075481565b34801561054e57600080fd5b506102c961055d366004612ed6565b610fa8565b34801561056e57600080fd5b50600054610582906001600160a01b031681565b6040516001600160a01b039091168152602001610270565b3480156105a657600080fd5b506102c96105b5366004612eef565b611064565b3480156105c657600080fd5b5060408051808201909152600581526414d455525160da1b6020820152610263565b3480156105f457600080fd5b50610299610603366004612c7d565b6110f0565b34801561061457600080fd5b506105827f000000000000000000000000000000000000000000000000000000000000000081565b34801561064857600080fd5b50610299610657366004612c7d565b61116a565b34801561066857600080fd5b506102c9610677366004612d37565b611177565b34801561068857600080fd5b506102c9610697366004612dc8565b6111c3565b3480156106a857600080fd5b506102e26106b7366004612f10565b61127c565b3480156106c857600080fd5b506102c96106d7366004612f3e565b6112a7565b6102c96106ea366004612f60565b611320565b3480156106fb57600080fd5b506102c961070a366004612d37565b61176c565b34801561071b57600080fd5b506102c961072a366004612d37565b6117b2565b34801561073b57600080fd5b506102c961074a366004612f3e565b611869565b34801561075b57600080fd5b506105827f000000000000000000000000000000000000000000000000000000000000000081565b34801561078f57600080fd5b506102c961079e366004612dc8565b6119e7565b3480156107af57600080fd5b506102996107be366004612d37565b611aa0565b60006107d0338484611abe565b50600192915050565b6107e233611aa0565b6108075760405162461bcd60e51b81526004016107fe90612f97565b60405180910390fd5b61081f60146108196127106003611bda565b90611be6565b6108338261082d8686611bf2565b90611bf2565b11156108815760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e20313525000000000060448201526064016107fe565b6000600b600086600281111561089957610899612fbc565b60028111156108aa576108aa612fbc565b81526020810191909152604001600020600181018590558381556002810183905590506108db8261082d8686611bf2565b60038201558460028111156108f2576108f2612fbc565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b6000610948843384611bfe565b610953848484611c78565b5060015b9392505050565b61dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546109a090670654ca659a4540009061201d565b905090565b6109ae33611aa0565b6109ca5760405162461bcd60e51b81526004016107fe90612f97565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a359190612fd2565b90506000610a496127106108198486611bda565b9050610a5f6001600160a01b0386168583612029565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b8910161092c565b60006107d0338484610ab4338861127c565b610abe9190613001565b611abe565b610acc33611aa0565b610ae85760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b038316610b0e5760405162461bcd60e51b81526004016107fe90613019565b6001600160a01b038216610b345760405162461bcd60e51b81526004016107fe90613019565b6001600160a01b038116610b5a5760405162461bcd60e51b81526004016107fe90613019565b601780546001600160a01b038581166001600160a01b0319928316811790935560158054868316908416811790915560168054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c9060600160405180910390a1505050565b610be733611aa0565b610c035760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503610c435760405162461bcd60e51b81526004016107fe9061303f565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610ca033611aa0565b610cbc5760405162461bcd60e51b81526004016107fe90612f97565b801515600f60019054906101000a900460ff16151503610cee5760405162461bcd60e51b81526004016107fe9061303f565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b610d3c33611aa0565b610d585760405162461bcd60e51b81526004016107fe90612f97565b82818114610da85760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d61746368656400000000000000000060448201526064016107fe565b6000805b82811015610ed557848482818110610dc657610dc6613064565b9050602002013560026000898985818110610de357610de3613064565b9050602002016020810190610df89190612d37565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e279190613001565b909155508590508482818110610e3f57610e3f613064565b9050602002013582610e519190613001565b9150868682818110610e6557610e65613064565b9050602002016020810190610e7a9190612d37565b6001600160a01b0316336000805160206131e1833981519152878785818110610ea557610ea5613064565b90506020020135604051610ebb91815260200190565b60405180910390a380610ecd8161307a565b915050610dac565b503360009081526002602052604081208054839290610ef5908490613093565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b610f4633611aa0565b610f625760405162461bcd60e51b81526004016107fe90612f97565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b610fb133611aa0565b610fcd5760405162461bcd60e51b81526004016107fe90612f97565b60095460ff16156110135760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b60448201526064016107fe565b6009805460ff19166001179055600a54600003611038576110344282611bf2565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b61106d33611aa0565b6110895760405162461bcd60e51b81526004016107fe90612f97565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b6000806110fd338561127c565b90508281101561115d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107fe565b6109533385858403611abe565b60006107d0338484611c78565b61118033611aa0565b61119c5760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6111cc33611aa0565b6111e85760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03821660009081526005602052604090205481151560ff9091161515036112285760405162461bcd60e51b81526004016107fe9061303f565b6001600160a01b038216600081815260056020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6112b033611aa0565b6112cc5760405162461bcd60e51b81526004016107fe90612f97565b601382905560128190556112e08282611bf2565b60145560408051838152602081018390527fc47e67f6e0d0627200bd21b8c292cc95284420e11df6a67d8a4e128b6b58a8e2910160405180910390a15050565b61132933611aa0565b6113455760405162461bcd60e51b81526004016107fe90612f97565b8261152b57806113975760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c000000000060448201526064016107fe565b3491507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141c91906130aa565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b50505050506115267f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151691906130aa565b6001600160a01b03169190612029565b6116b5565b80156115f5573360009081526002602052604081208054849290611550908490613093565b90915550506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600260205260408120805484929061159d908490613001565b90915550506040518281527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033906000805160206131e18339815191529060200160405180910390a36116b5565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600260205260408120805484929061163d908490613093565b90915550503360009081526002602052604081208054849290611661908490613001565b909155505060405182815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906000805160206131e18339815191529060200160405180910390a35b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561171057600080fd5b505af1158015611724573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161175f91815260200190565b60405180910390a3505050565b61177533611aa0565b6117915760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6117bb33611aa0565b6117d75760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b0381166117fd5760405162461bcd60e51b81526004016107fe90613019565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61187233611aa0565b61188e5760405162461bcd60e51b81526004016107fe90612f97565b60018210156118f25760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b60648201526084016107fe565b6207a1208110156119555760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b60648201526084016107fe565b60006298968061196d84670654ca659a4540006130c7565b61197791906130e6565b905060006298968061199184670654ca659a4540006130c7565b61199b91906130e6565b6007839055600881905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c229910160405180910390a150505050565b6119f033611aa0565b611a0c5760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611a4c5760405162461bcd60e51b81526004016107fe9061303f565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611b205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107fe565b6001600160a01b038216611b815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107fe565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161175f565b600061095782846130c7565b600061095782846130e6565b60006109578284613001565b6000611c0a848461127c565b90506000198114611c725781811015611c655760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107fe565b611c728484848403611abe565b50505050565b611c83838383612080565b6001600160a01b03831660009081526005602052604090205460019060ff1680611cc557506001600160a01b03831660009081526005602052604090205460ff165b15611cd257506000611e29565b60095460ff16611d185760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b60448201526064016107fe565b600754821115611d7b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016107fe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611e29576008546001600160a01b038416600090815260026020526040902054611ddb908490613001565b1115611e295760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d6974000000000060448201526064016107fe565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603611eda57600090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614158015611eac5750600a544211155b15611ed5576001600160a01b0384166000908152600460205260409020805460ff191660011790555b611f1f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603611f1b57506001611f1f565b5060025b600d54611f2d906001611bf2565b600d55611f3a8584612210565b15611f5057611f4a6010546122ad565b6000600d555b6001600160a01b038516600090815260026020526040902054611f73908461201d565b6001600160a01b03861660009081526002602052604081209190915582611f9a5783611fa5565b611fa586858461238e565b6001600160a01b038616600090815260026020526040902054909150611fcb9082611bf2565b6001600160a01b0380871660008181526002602052604090819020939093559151908816906000805160206131e18339815191529061200d9085815260200190565b60405180910390a3505050505050565b60006109578284613093565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261207b90849061265a565b505050565b6001600160a01b03831660009081526006602052604090205460ff16156120d65760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b60448201526064016107fe565b6001600160a01b03821660009081526006602052604090205460ff161561212c5760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b60448201526064016107fe565b6000811161218e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107fe565b6001600160a01b03831660009081526002602052604090205481111561207b5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016107fe565b60115460105430600090815260026020526040812054600f5491938510159211159060ff161580156122445750600c5460ff165b801561224d5750815b801561225d5750600e54600d5410155b80156122665750805b80156122a457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff191660011790556014546013546000916122d7916002916108199182908790611bda565b905060006122e5838361201d565b9050476122f18261272c565b60006122fd478361201d565b9050600061232361231a6002601354611be690919063ffffffff16565b6014549061201d565b90508415612352576123528561234d60026108198561081960135489611bda90919063ffffffff16565b6128ec565b60175460125461237c916001600160a01b031690612377908490610819908790611bda565b6129d2565b5050600f805460ff1916905550505050565b600080600b60008460028111156123a7576123a7612fbc565b60028111156123b8576123b8612fbc565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526004909352908120549192509060ff1680156124255750600f54610100900460ff165b612433578160600151612440565b6124406064612710613093565b905080600003612454578492505050610957565b60006124666127106108198885611bda565b9050600061248583610819866020015185611bda90919063ffffffff16565b905060006124a484610819876000015186611bda90919063ffffffff16565b905060006124bc826124b6868661201d565b9061201d565b905082156125615761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546124fb9084611bf2565b61dead600081905260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc919091556040516001600160a01b038c16906000805160206131e1833981519152906125589087815260200190565b60405180910390a35b81156125da576016546001600160a01b031660009081526002602052604090205461258c9083611bf2565b601680546001600160a01b03908116600090815260026020908152604091829020949094559154915185815291811692908d16916000805160206131e1833981519152910160405180910390a35b801561264257306000908152600260205260409020546125fa9082611bf2565b30600081815260026020526040908190209290925590516001600160a01b038c16906000805160206131e1833981519152906126399085815260200190565b60405180910390a35b61264c898561201d565b9a9950505050505050505050565b60006126af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a769092919063ffffffff16565b80519091501561207b57808060200190518101906126cd9190613108565b61207b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107fe565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061276157612761613064565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280391906130aa565b8160018151811061281657612816613064565b60200260200101906001600160a01b031690816001600160a01b031681525050612861307f000000000000000000000000000000000000000000000000000000000000000084611abe565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906128b6908590600090869030904290600401613125565b600060405180830381600087803b1580156128d057600080fd5b505af11580156128e4573d6000803e3d6000fd5b505050505050565b612917307f000000000000000000000000000000000000000000000000000000000000000084611abe565b60155460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156129a6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129cb9190613196565b5050505050565b806000036129de575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612a2b576040519150601f19603f3d011682016040523d82523d6000602084013e612a30565b606091505b505090508061207b5760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b60448201526064016107fe565b6060612a858484600085612a8d565b949350505050565b606082471015612aee5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016107fe565b600080866001600160a01b03168587604051612b0a91906131c4565b60006040518083038185875af1925050503d8060008114612b47576040519150601f19603f3d011682016040523d82523d6000602084013e612b4c565b606091505b5091509150612b5d87838387612b68565b979650505050505050565b60608315612bd7578251600003612bd0576001600160a01b0385163b612bd05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107fe565b5081612a85565b612a858383815115612bec5781518083602001fd5b8060405162461bcd60e51b81526004016107fe9190612c32565b60005b83811015612c21578181015183820152602001612c09565b83811115611c725750506000910152565b6020815260008251806020840152612c51816040850160208701612c06565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612c7a57600080fd5b50565b60008060408385031215612c9057600080fd5b8235612c9b81612c65565b946020939093013593505050565b803560038110612cb857600080fd5b919050565b60008060008060808587031215612cd357600080fd5b612cdc85612ca9565b966020860135965060408601359560600135945092505050565b600080600060608486031215612d0b57600080fd5b8335612d1681612c65565b92506020840135612d2681612c65565b929592945050506040919091013590565b600060208284031215612d4957600080fd5b813561095781612c65565b600060208284031215612d6657600080fd5b61095782612ca9565b600080600060608486031215612d8457600080fd5b8335612d8f81612c65565b92506020840135612d9f81612c65565b91506040840135612daf81612c65565b809150509250925092565b8015158114612c7a57600080fd5b60008060408385031215612ddb57600080fd5b8235612de681612c65565b91506020830135612df681612dba565b809150509250929050565b600060208284031215612e1357600080fd5b813561095781612dba565b60008083601f840112612e3057600080fd5b50813567ffffffffffffffff811115612e4857600080fd5b6020830191508360208260051b8501011115612e6357600080fd5b9250929050565b60008060008060408587031215612e8057600080fd5b843567ffffffffffffffff80821115612e9857600080fd5b612ea488838901612e1e565b90965094506020870135915080821115612ebd57600080fd5b50612eca87828801612e1e565b95989497509550505050565b600060208284031215612ee857600080fd5b5035919050565b60008060008060808587031215612f0557600080fd5b8435612cdc81612dba565b60008060408385031215612f2357600080fd5b8235612f2e81612c65565b91506020830135612df681612c65565b60008060408385031215612f5157600080fd5b50508035926020909101359150565b600080600060608486031215612f7557600080fd5b8335612f8081612dba565b9250602084013591506040840135612daf81612dba565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612fe457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561301457613014612feb565b500190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161308c5761308c612feb565b5060010190565b6000828210156130a5576130a5612feb565b500390565b6000602082840312156130bc57600080fd5b815161095781612c65565b60008160001904831182151516156130e1576130e1612feb565b500290565b60008261310357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561311a57600080fd5b815161095781612dba565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131755784516001600160a01b031683529383019391830191600101613150565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156131ab57600080fd5b8351925060208401519150604084015190509250925092565b600082516131d6818460208701612c06565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b0b37f46757b948efa5b6d0c857f26f814da0e20bc7e9fe784b4f68640dbe0a164736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80637d1db4a511610123578063b9a45aac116100ab578063f2fde38b1161006f578063f2fde38b1461070f578063f319ae771461072f578063f887ea401461074f578063fac1b9bc14610783578063fe9fbb80146107a357600080fd5b8063b9a45aac1461067c578063dd62ed3e1461069c578063ea7b91ec146106bc578063eb42f193146106dc578063f0b37c04146106ef57600080fd5b806395d89b41116100f257806395d89b41146105ba578063a457c2d7146105e8578063a8aa1b3114610608578063a9059cbb1461063c578063b6a5d7de1461065c57600080fd5b80637d1db4a51461052c57806382aa7c68146105425780638da5cb5b146105625780638e5c3ad31461059a57600080fd5b806339264b66116101b15780636b7f8b90116101755780636b7f8b901461048b5780636c0a24eb146104ab578063706f6937146104c157806370a08231146104e1578063715018a61461051757600080fd5b806339264b66146103d257806339509351146103f25780633bbac5791461041257806340005fbe1461044b578063455a43961461046b57600080fd5b806323b872dd116101f857806323b872dd146102f05780632b112e49146103105780632f54bf6e14610325578063313ce56714610354578063357c13541461037057600080fd5b806306fdde0314610235578063095ea7b3146102795780630eefe44b146102a957806318160ddd146102cb57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b50604080518082019091526009815268535155494447414d4560b81b60208201525b6040516102709190612c32565b60405180910390f35b34801561028557600080fd5b50610299610294366004612c7d565b6107c3565b6040519015158152602001610270565b3480156102b557600080fd5b506102c96102c4366004612cbd565b6107d9565b005b3480156102d757600080fd5b50670654ca659a4540005b604051908152602001610270565b3480156102fc57600080fd5b5061029961030b366004612cf6565b61093b565b34801561031c57600080fd5b506102e261095e565b34801561033157600080fd5b50610299610340366004612d37565b6000546001600160a01b0391821691161490565b34801561036057600080fd5b5060405160098152602001610270565b34801561037c57600080fd5b506103b261038b366004612d54565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610270565b3480156103de57600080fd5b506102c96103ed366004612cf6565b6109a5565b3480156103fe57600080fd5b5061029961040d366004612c7d565b610aa2565b34801561041e57600080fd5b5061029961042d366004612d37565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561045757600080fd5b506102c9610466366004612d6f565b610ac3565b34801561047757600080fd5b506102c9610486366004612dc8565b610bde565b34801561049757600080fd5b506102c96104a6366004612e01565b610c97565b3480156104b757600080fd5b506102e260085481565b3480156104cd57600080fd5b506102c96104dc366004612e6a565b610d33565b3480156104ed57600080fd5b506102e26104fc366004612d37565b6001600160a01b031660009081526002602052604090205490565b34801561052357600080fd5b506102c9610f3d565b34801561053857600080fd5b506102e260075481565b34801561054e57600080fd5b506102c961055d366004612ed6565b610fa8565b34801561056e57600080fd5b50600054610582906001600160a01b031681565b6040516001600160a01b039091168152602001610270565b3480156105a657600080fd5b506102c96105b5366004612eef565b611064565b3480156105c657600080fd5b5060408051808201909152600581526414d455525160da1b6020820152610263565b3480156105f457600080fd5b50610299610603366004612c7d565b6110f0565b34801561061457600080fd5b506105827f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a191417881565b34801561064857600080fd5b50610299610657366004612c7d565b61116a565b34801561066857600080fd5b506102c9610677366004612d37565b611177565b34801561068857600080fd5b506102c9610697366004612dc8565b6111c3565b3480156106a857600080fd5b506102e26106b7366004612f10565b61127c565b3480156106c857600080fd5b506102c96106d7366004612f3e565b6112a7565b6102c96106ea366004612f60565b611320565b3480156106fb57600080fd5b506102c961070a366004612d37565b61176c565b34801561071b57600080fd5b506102c961072a366004612d37565b6117b2565b34801561073b57600080fd5b506102c961074a366004612f3e565b611869565b34801561075b57600080fd5b506105827f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561078f57600080fd5b506102c961079e366004612dc8565b6119e7565b3480156107af57600080fd5b506102996107be366004612d37565b611aa0565b60006107d0338484611abe565b50600192915050565b6107e233611aa0565b6108075760405162461bcd60e51b81526004016107fe90612f97565b60405180910390fd5b61081f60146108196127106003611bda565b90611be6565b6108338261082d8686611bf2565b90611bf2565b11156108815760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e20313525000000000060448201526064016107fe565b6000600b600086600281111561089957610899612fbc565b60028111156108aa576108aa612fbc565b81526020810191909152604001600020600181018590558381556002810183905590506108db8261082d8686611bf2565b60038201558460028111156108f2576108f2612fbc565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b6000610948843384611bfe565b610953848484611c78565b5060015b9392505050565b61dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546109a090670654ca659a4540009061201d565b905090565b6109ae33611aa0565b6109ca5760405162461bcd60e51b81526004016107fe90612f97565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a359190612fd2565b90506000610a496127106108198486611bda565b9050610a5f6001600160a01b0386168583612029565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b8910161092c565b60006107d0338484610ab4338861127c565b610abe9190613001565b611abe565b610acc33611aa0565b610ae85760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b038316610b0e5760405162461bcd60e51b81526004016107fe90613019565b6001600160a01b038216610b345760405162461bcd60e51b81526004016107fe90613019565b6001600160a01b038116610b5a5760405162461bcd60e51b81526004016107fe90613019565b601780546001600160a01b038581166001600160a01b0319928316811790935560158054868316908416811790915560168054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c9060600160405180910390a1505050565b610be733611aa0565b610c035760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503610c435760405162461bcd60e51b81526004016107fe9061303f565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610ca033611aa0565b610cbc5760405162461bcd60e51b81526004016107fe90612f97565b801515600f60019054906101000a900460ff16151503610cee5760405162461bcd60e51b81526004016107fe9061303f565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b610d3c33611aa0565b610d585760405162461bcd60e51b81526004016107fe90612f97565b82818114610da85760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d61746368656400000000000000000060448201526064016107fe565b6000805b82811015610ed557848482818110610dc657610dc6613064565b9050602002013560026000898985818110610de357610de3613064565b9050602002016020810190610df89190612d37565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e279190613001565b909155508590508482818110610e3f57610e3f613064565b9050602002013582610e519190613001565b9150868682818110610e6557610e65613064565b9050602002016020810190610e7a9190612d37565b6001600160a01b0316336000805160206131e1833981519152878785818110610ea557610ea5613064565b90506020020135604051610ebb91815260200190565b60405180910390a380610ecd8161307a565b915050610dac565b503360009081526002602052604081208054839290610ef5908490613093565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b610f4633611aa0565b610f625760405162461bcd60e51b81526004016107fe90612f97565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b610fb133611aa0565b610fcd5760405162461bcd60e51b81526004016107fe90612f97565b60095460ff16156110135760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b60448201526064016107fe565b6009805460ff19166001179055600a54600003611038576110344282611bf2565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b61106d33611aa0565b6110895760405162461bcd60e51b81526004016107fe90612f97565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b6000806110fd338561127c565b90508281101561115d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107fe565b6109533385858403611abe565b60006107d0338484611c78565b61118033611aa0565b61119c5760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6111cc33611aa0565b6111e85760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03821660009081526005602052604090205481151560ff9091161515036112285760405162461bcd60e51b81526004016107fe9061303f565b6001600160a01b038216600081815260056020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6112b033611aa0565b6112cc5760405162461bcd60e51b81526004016107fe90612f97565b601382905560128190556112e08282611bf2565b60145560408051838152602081018390527fc47e67f6e0d0627200bd21b8c292cc95284420e11df6a67d8a4e128b6b58a8e2910160405180910390a15050565b61132933611aa0565b6113455760405162461bcd60e51b81526004016107fe90612f97565b8261152b57806113975760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c000000000060448201526064016107fe565b3491507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141c91906130aa565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b50505050506115267f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a1914178837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151691906130aa565b6001600160a01b03169190612029565b6116b5565b80156115f5573360009081526002602052604081208054849290611550908490613093565b90915550506001600160a01b037f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a1914178166000908152600260205260408120805484929061159d908490613001565b90915550506040518281527f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a19141786001600160a01b03169033906000805160206131e18339815191529060200160405180910390a36116b5565b6001600160a01b037f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a1914178166000908152600260205260408120805484929061163d908490613093565b90915550503360009081526002602052604081208054849290611661908490613001565b909155505060405182815233906001600160a01b037f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a191417816906000805160206131e18339815191529060200160405180910390a35b7f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a19141786001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561171057600080fd5b505af1158015611724573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161175f91815260200190565b60405180910390a3505050565b61177533611aa0565b6117915760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6117bb33611aa0565b6117d75760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b0381166117fd5760405162461bcd60e51b81526004016107fe90613019565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61187233611aa0565b61188e5760405162461bcd60e51b81526004016107fe90612f97565b60018210156118f25760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b60648201526084016107fe565b6207a1208110156119555760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b60648201526084016107fe565b60006298968061196d84670654ca659a4540006130c7565b61197791906130e6565b905060006298968061199184670654ca659a4540006130c7565b61199b91906130e6565b6007839055600881905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c229910160405180910390a150505050565b6119f033611aa0565b611a0c5760405162461bcd60e51b81526004016107fe90612f97565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611a4c5760405162461bcd60e51b81526004016107fe9061303f565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611b205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107fe565b6001600160a01b038216611b815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107fe565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161175f565b600061095782846130c7565b600061095782846130e6565b60006109578284613001565b6000611c0a848461127c565b90506000198114611c725781811015611c655760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107fe565b611c728484848403611abe565b50505050565b611c83838383612080565b6001600160a01b03831660009081526005602052604090205460019060ff1680611cc557506001600160a01b03831660009081526005602052604090205460ff165b15611cd257506000611e29565b60095460ff16611d185760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b60448201526064016107fe565b600754821115611d7b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016107fe565b7f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a19141786001600160a01b0316836001600160a01b031614611e29576008546001600160a01b038416600090815260026020526040902054611ddb908490613001565b1115611e295760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d6974000000000060448201526064016107fe565b60007f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a19141786001600160a01b0316856001600160a01b031603611eda57600090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614158015611eac5750600a544211155b15611ed5576001600160a01b0384166000908152600460205260409020805460ff191660011790555b611f1f565b7f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a19141786001600160a01b0316846001600160a01b031603611f1b57506001611f1f565b5060025b600d54611f2d906001611bf2565b600d55611f3a8584612210565b15611f5057611f4a6010546122ad565b6000600d555b6001600160a01b038516600090815260026020526040902054611f73908461201d565b6001600160a01b03861660009081526002602052604081209190915582611f9a5783611fa5565b611fa586858461238e565b6001600160a01b038616600090815260026020526040902054909150611fcb9082611bf2565b6001600160a01b0380871660008181526002602052604090819020939093559151908816906000805160206131e18339815191529061200d9085815260200190565b60405180910390a3505050505050565b60006109578284613093565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261207b90849061265a565b505050565b6001600160a01b03831660009081526006602052604090205460ff16156120d65760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b60448201526064016107fe565b6001600160a01b03821660009081526006602052604090205460ff161561212c5760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b60448201526064016107fe565b6000811161218e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107fe565b6001600160a01b03831660009081526002602052604090205481111561207b5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016107fe565b60115460105430600090815260026020526040812054600f5491938510159211159060ff161580156122445750600c5460ff165b801561224d5750815b801561225d5750600e54600d5410155b80156122665750805b80156122a457507f0000000000000000000000007ada13f1bd90f516e68817bdc32eeb89a19141786001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff191660011790556014546013546000916122d7916002916108199182908790611bda565b905060006122e5838361201d565b9050476122f18261272c565b60006122fd478361201d565b9050600061232361231a6002601354611be690919063ffffffff16565b6014549061201d565b90508415612352576123528561234d60026108198561081960135489611bda90919063ffffffff16565b6128ec565b60175460125461237c916001600160a01b031690612377908490610819908790611bda565b6129d2565b5050600f805460ff1916905550505050565b600080600b60008460028111156123a7576123a7612fbc565b60028111156123b8576123b8612fbc565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526004909352908120549192509060ff1680156124255750600f54610100900460ff165b612433578160600151612440565b6124406064612710613093565b905080600003612454578492505050610957565b60006124666127106108198885611bda565b9050600061248583610819866020015185611bda90919063ffffffff16565b905060006124a484610819876000015186611bda90919063ffffffff16565b905060006124bc826124b6868661201d565b9061201d565b905082156125615761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546124fb9084611bf2565b61dead600081905260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc919091556040516001600160a01b038c16906000805160206131e1833981519152906125589087815260200190565b60405180910390a35b81156125da576016546001600160a01b031660009081526002602052604090205461258c9083611bf2565b601680546001600160a01b03908116600090815260026020908152604091829020949094559154915185815291811692908d16916000805160206131e1833981519152910160405180910390a35b801561264257306000908152600260205260409020546125fa9082611bf2565b30600081815260026020526040908190209290925590516001600160a01b038c16906000805160206131e1833981519152906126399085815260200190565b60405180910390a35b61264c898561201d565b9a9950505050505050505050565b60006126af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a769092919063ffffffff16565b80519091501561207b57808060200190518101906126cd9190613108565b61207b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107fe565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061276157612761613064565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280391906130aa565b8160018151811061281657612816613064565b60200260200101906001600160a01b031690816001600160a01b031681525050612861307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611abe565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906128b6908590600090869030904290600401613125565b600060405180830381600087803b1580156128d057600080fd5b505af11580156128e4573d6000803e3d6000fd5b505050505050565b612917307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611abe565b60155460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156129a6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129cb9190613196565b5050505050565b806000036129de575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612a2b576040519150601f19603f3d011682016040523d82523d6000602084013e612a30565b606091505b505090508061207b5760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b60448201526064016107fe565b6060612a858484600085612a8d565b949350505050565b606082471015612aee5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016107fe565b600080866001600160a01b03168587604051612b0a91906131c4565b60006040518083038185875af1925050503d8060008114612b47576040519150601f19603f3d011682016040523d82523d6000602084013e612b4c565b606091505b5091509150612b5d87838387612b68565b979650505050505050565b60608315612bd7578251600003612bd0576001600160a01b0385163b612bd05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107fe565b5081612a85565b612a858383815115612bec5781518083602001fd5b8060405162461bcd60e51b81526004016107fe9190612c32565b60005b83811015612c21578181015183820152602001612c09565b83811115611c725750506000910152565b6020815260008251806020840152612c51816040850160208701612c06565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612c7a57600080fd5b50565b60008060408385031215612c9057600080fd5b8235612c9b81612c65565b946020939093013593505050565b803560038110612cb857600080fd5b919050565b60008060008060808587031215612cd357600080fd5b612cdc85612ca9565b966020860135965060408601359560600135945092505050565b600080600060608486031215612d0b57600080fd5b8335612d1681612c65565b92506020840135612d2681612c65565b929592945050506040919091013590565b600060208284031215612d4957600080fd5b813561095781612c65565b600060208284031215612d6657600080fd5b61095782612ca9565b600080600060608486031215612d8457600080fd5b8335612d8f81612c65565b92506020840135612d9f81612c65565b91506040840135612daf81612c65565b809150509250925092565b8015158114612c7a57600080fd5b60008060408385031215612ddb57600080fd5b8235612de681612c65565b91506020830135612df681612dba565b809150509250929050565b600060208284031215612e1357600080fd5b813561095781612dba565b60008083601f840112612e3057600080fd5b50813567ffffffffffffffff811115612e4857600080fd5b6020830191508360208260051b8501011115612e6357600080fd5b9250929050565b60008060008060408587031215612e8057600080fd5b843567ffffffffffffffff80821115612e9857600080fd5b612ea488838901612e1e565b90965094506020870135915080821115612ebd57600080fd5b50612eca87828801612e1e565b95989497509550505050565b600060208284031215612ee857600080fd5b5035919050565b60008060008060808587031215612f0557600080fd5b8435612cdc81612dba565b60008060408385031215612f2357600080fd5b8235612f2e81612c65565b91506020830135612df681612c65565b60008060408385031215612f5157600080fd5b50508035926020909101359150565b600080600060608486031215612f7557600080fd5b8335612f8081612dba565b9250602084013591506040840135612daf81612dba565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612fe457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561301457613014612feb565b500190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161308c5761308c612feb565b5060010190565b6000828210156130a5576130a5612feb565b500390565b6000602082840312156130bc57600080fd5b815161095781612c65565b60008160001904831182151516156130e1576130e1612feb565b500290565b60008261310357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561311a57600080fd5b815161095781612dba565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131755784516001600160a01b031683529383019391830191600101613150565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156131ab57600080fd5b8351925060208401519150604084015190509250925092565b600082516131d6818460208701612c06565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b0b37f46757b948efa5b6d0c857f26f814da0e20bc7e9fe784b4f68640dbe0a164736f6c634300080e0033

Deployed Bytecode Sourcemap

15364:19630:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19475:83;;;;;;;;;;-1:-1:-1;19545:5:0;;;;;;;;;;;;-1:-1:-1;;;19545:5:0;;;;19475:83;;;;;;;:::i;:::-;;;;;;;;19852:184;;;;;;;;;;-1:-1:-1;19852:184:0;;;;;:::i;:::-;;:::i;:::-;;;1286:14:1;;1279:22;1261:41;;1249:2;1234:18;19852:184:0;1121:187:1;28879:783:0;;;;;;;;;;-1:-1:-1;28879:783:0;;;;;:::i;:::-;;:::i;:::-;;20230:100;;;;;;;;;;-1:-1:-1;15657:23:0;20230:100;;;2049:25:1;;;2037:2;2022:18;20230:100:0;1903:177:1;22700:249:0;;;;;;;;;;-1:-1:-1;22700:249:0;;;;;:::i;:::-;;:::i;20663:121::-;;;;;;;;;;;;;:::i;13473:103::-;;;;;;;;;;-1:-1:-1;13473:103:0;;;;;:::i;:::-;13528:4;13563:5;-1:-1:-1;;;;;13552:16:0;;;13563:5;;13552:16;;13473:103;20139:83;;;;;;;;;;-1:-1:-1;20139:83:0;;15609:1;2940:36:1;;2928:2;2913:18;20139:83:0;2798:184:1;16557:43:0;;;;;;;;;;-1:-1:-1;16557:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3442:25:1;;;3498:2;3483:18;;3476:34;;;;3526:18;;;3519:34;3584:2;3569:18;;3562:34;3429:3;3414:19;16557:43:0;3211:391:1;34236:438:0;;;;;;;;;;-1:-1:-1;34236:438:0;;;;;:::i;:::-;;:::i;22957:284::-;;;;;;;;;;-1:-1:-1;22957:284:0;;;;;:::i;:::-;;:::i;19742:102::-;;;;;;;;;;-1:-1:-1;19742:102:0;;;;;:::i;:::-;-1:-1:-1;;;;;19820:16:0;19796:4;19820:16;;;:6;:16;;;;;;;;;19742:102;29670:521;;;;;;;;;;-1:-1:-1;29670:521:0;;;;;:::i;:::-;;:::i;21089:291::-;;;;;;;;;;-1:-1:-1;21089:291:0;;;;;:::i;:::-;;:::i;21617:206::-;;;;;;;;;;-1:-1:-1;21617:206:0;;;;;:::i;:::-;;:::i;16077:64::-;;;;;;;;;;;;;;;;32670:701;;;;;;;;;;-1:-1:-1;32670:701:0;;;;;:::i;:::-;;:::i;20338:119::-;;;;;;;;;;-1:-1:-1;20338:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;20431:18:0;20404:7;20431:18;;;:9;:18;;;;;;;20338:119;13934:134;;;;;;;;;;;;;:::i;16010:60::-;;;;;;;;;;;;;;;;21831:312;;;;;;;;;;-1:-1:-1;21831:312:0;;;;;:::i;:::-;;:::i;12864:20::-;;;;;;;;;;-1:-1:-1;12864:20:0;;;;-1:-1:-1;;;;;12864:20:0;;;;;;-1:-1:-1;;;;;6396:32:1;;;6378:51;;6366:2;6351:18;12864:20:0;6232:203:1;22151:541:0;;;;;;;;;;-1:-1:-1;22151:541:0;;;;;:::i;:::-;;:::i;20044:87::-;;;;;;;;;;-1:-1:-1;20116:7:0;;;;;;;;;;;;-1:-1:-1;;;20116:7:0;;;;20044:87;;23249:469;;;;;;;;;;-1:-1:-1;23249:469:0;;;;;:::i;:::-;;:::i;16188:29::-;;;;;;;;;;;;;;;20465:190;;;;;;;;;;-1:-1:-1;20465:190:0;;;;;:::i;:::-;;:::i;13264:95::-;;;;;;;;;;-1:-1:-1;13264:95:0;;;;;:::i;:::-;;:::i;20792:289::-;;;;;;;;;;-1:-1:-1;20792:289:0;;;;;:::i;:::-;;:::i;19566:168::-;;;;;;;;;;-1:-1:-1;19566:168:0;;;;;:::i;:::-;;:::i;34682:309::-;;;;;;;;;;-1:-1:-1;34682:309:0;;;;;:::i;:::-;;:::i;33379:849::-;;;;;;:::i;:::-;;:::i;13367:98::-;;;;;;;;;;-1:-1:-1;13367:98:0;;;;;:::i;:::-;;:::i;13699:227::-;;;;;;;;;;-1:-1:-1;13699:227:0;;;;;:::i;:::-;;:::i;28265:606::-;;;;;;;;;;-1:-1:-1;28265:606:0;;;;;:::i;:::-;;:::i;16150:31::-;;;;;;;;;;;;;;;21388:221;;;;;;;;;;-1:-1:-1;21388:221:0;;;;;:::i;:::-;;:::i;13584:107::-;;;;;;;;;;-1:-1:-1;13584:107:0;;;;;:::i;:::-;;:::i;19852:184::-;19952:4;19969:37;19978:10;19990:7;19999:6;19969:8;:37::i;:::-;-1:-1:-1;20024:4:0;19852:184;;;;:::o;28879:783::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;;;;;;;;;29168:29:::1;29194:2;29168:21;16320:5;29187:1;29168:18;:21::i;:::-;:25:::0;::::1;:29::i;:::-;29096:51;29128:18:::0;29096:27:::1;:8:::0;29109:13;29096:12:::1;:27::i;:::-;:31:::0;::::1;:51::i;:::-;:101;;29074:178;;;::::0;-1:-1:-1;;;29074:178:0;;9012:2:1;29074:178:0::1;::::0;::::1;8994:21:1::0;9051:2;9031:18;;;9024:30;9090:29;9070:18;;;9063:57;9137:18;;29074:178:0::1;8810:351:1::0;29074:178:0::1;29263:15;29281:4;:21;29286:15;29281:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29281:21:0;29313:11:::1;::::0;::::1;:22:::0;;;29346:32;;;29389:13:::1;::::0;::::1;:34:::0;;;29281:21;-1:-1:-1;29449:51:0::1;29405:18:::0;29449:27:::1;29327:8:::0;29365:13;29449:12:::1;:27::i;:51::-;29434:12;::::0;::::1;:66:::0;29544:15;29518:136:::1;::::0;::::1;;;;;;:::i;:::-;;::::0;;9500:25:1;;;9556:2;9541:18;;9534:34;;;9584:18;;;9577:34;;;29518:136:0::1;::::0;9488:2:1;9473:18;29518:136:0::1;;;;;;;;29063:599;28879:783:::0;;;;:::o;22700:249::-;22823:4;22840:41;22856:4;22862:10;22874:6;22840:15;:41::i;:::-;22892:27;22902:4;22908:2;22912:6;22892:9;:27::i;:::-;-1:-1:-1;22937:4:0;22700:249;;;;;;:::o;20663:121::-;15961:42;20716:7;20431:18;;;:9;:18;;;;20743:33;;15657:23;;20743:16;:33::i;:::-;20736:40;;20663:121;:::o;34236:438::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;34408:39:::1;::::0;-1:-1:-1;;;34408:39:0;;34441:4:::1;34408:39;::::0;::::1;6378:51:1::0;34391:14:0::1;::::0;-1:-1:-1;;;;;34408:24:0;::::1;::::0;::::1;::::0;6351:18:1;;34408:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34391:56:::0;-1:-1:-1;34458:24:0::1;34485:34;34513:5;34485:23;34391:56:::0;34496:11;34485:10:::1;:23::i;:34::-;34458:61:::0;-1:-1:-1;34530:56:0::1;-1:-1:-1::0;;;;;34530:27:0;::::1;34558:9:::0;34458:61;34530:27:::1;:56::i;:::-;34604:62;::::0;;-1:-1:-1;;;;;10003:32:1;;;9985:51;;10067:2;10052:18;;10045:34;;;34604:62:0;::::1;::::0;::::1;::::0;9958:18:1;34604:62:0::1;9811:274:1::0;22957:284:0;23070:4;23087:124;23110:10;23135:7;23190:10;23157:30;23167:10;23179:7;23157:9;:30::i;:::-;:43;;;;:::i;:::-;23087:8;:124::i;29670:521::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29830:24:0;::::1;29822:49;;;;-1:-1:-1::0;;;29822:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29890:24:0;::::1;29882:49;;;;-1:-1:-1::0;;;29882:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29950:22:0;::::1;29942:47;;;;-1:-1:-1::0;;;29942:47:0::1;;;;;;;:::i;:::-;30000:18;:31:::0;;-1:-1:-1;;;;;30000:31:0;;::::1;-1:-1:-1::0;;;;;;30000:31:0;;::::1;::::0;::::1;::::0;;;30042:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;30084:16:::1;:27:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;30129:54:::1;::::0;;10936:34:1;;;11001:2;10986:18;;10979:43;;;;11038:18;;;11031:43;30129:54:0::1;::::0;10886:2:1;10871:18;30129:54:0::1;;;;;;;29670:521:::0;;;:::o;21089:291::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21214:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;21206:61:::1;;;;-1:-1:-1::0;;;21206:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21278:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;21278:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21332:40;;21278:36;;:23;21332:40:::1;::::0;::::1;21089:291:::0;;:::o;21617:206::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;21711:7:::1;21693:25;;:14;;;;;;;;;;;:25;;::::0;21685:49:::1;;;;-1:-1:-1::0;;;21685:49:0::1;;;;;;;:::i;:::-;21745:14;:24:::0;;-1:-1:-1;;21745:24:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;21787:28:::1;::::0;::::1;::::0;-1:-1:-1;;21787:28:0::1;21617:206:::0;:::o;32670:701::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;32823:8;32857:24;;::::1;32849:60;;;::::0;-1:-1:-1;;;32849:60:0;;11627:2:1;32849:60:0::1;::::0;::::1;11609:21:1::0;11666:2;11646:18;;;11639:30;11705:25;11685:18;;;11678:53;11748:18;;32849:60:0::1;11425:347:1::0;32849:60:0::1;32920:21;32963:9:::0;32958:289:::1;32982:6;32978:1;:10;32958:289;;;33118:7;;33126:1;33118:10;;;;;;;:::i;:::-;;;;;;;33092:9;:22;33102:8;;33111:1;33102:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33092:22:0::1;-1:-1:-1::0;;;;;33092:22:0::1;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;33160:7:0;;-1:-1:-1;33160:7:0;33168:1;33160:10;;::::1;;;;;:::i;:::-;;;;;;;33143:27;;;;;:::i;:::-;;;33211:8;;33220:1;33211:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33190:45:0::1;33199:10;-1:-1:-1::0;;;;;;;;;;;33224:7:0;;33232:1;33224:10;;::::1;;;;;:::i;:::-;;;;;;;33190:45;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;33190:45:0::1;;;;;;;;32990:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32958:289;;;-1:-1:-1::0;33267:10:0::1;33257:21;::::0;;;:9:::1;:21;::::0;;;;:38;;33282:13;;33257:21;:38:::1;::::0;33282:13;;33257:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;33313:50:0::1;::::0;;12353:25:1;;;12409:2;12394:18;;12387:34;;;33329:10:0::1;::::0;33313:50:::1;::::0;12326:18:1;33313:50:0::1;;;;;;;32795:576;;32670:701:::0;;;;:::o;13934:134::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;13999:32:::1;::::0;14028:1:::1;6378:51:1::0;;13999:32:0::1;::::0;6366:2:1;6351:18;13999:32:0::1;;;;;;;14058:1;14042:18:::0;;-1:-1:-1;;;;;;14042:18:0::1;::::0;;13934:134::o;21831:312::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;21910:14:::1;::::0;::::1;;21909:15;21901:44;;;::::0;-1:-1:-1;;;21901:44:0;;12634:2:1;21901:44:0::1;::::0;::::1;12616:21:1::0;12673:2;12653:18;;;12646:30;-1:-1:-1;;;12692:18:1;;;12685:46;12748:18;;21901:44:0::1;12432:340:1::0;21901:44:0::1;21956:14;:21:::0;;-1:-1:-1;;21956:21:0::1;21973:4;21956:21;::::0;;21992:11:::1;::::0;21956:14:::1;21992:16:::0;21988:113:::1;;22074:27;:15;22094:6:::0;22074:19:::1;:27::i;:::-;22060:11;:41:::0;21988:113:::1;22119:16;::::0;::::1;::::0;;;::::1;21831:312:::0;:::o;22151:541::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;22347:21:::1;:32:::0;;-1:-1:-1;;22347:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22390:13:::1;:26:::0;;;22427:15:::1;:27:::0;;;22465:25:::1;:54:::0;;;22537:147:::1;::::0;;9500:25:1;;;9556:2;9541:18;;9534:34;;;9584:18;;;9577:34;;;22537:147:0::1;::::0;9488:2:1;9473:18;22537:147:0::1;;;;;;;22151:541:::0;;;;:::o;23249:469::-;23367:4;23384:24;23411:30;23421:10;23433:7;23411:9;:30::i;:::-;23384:57;;23494:15;23474:16;:35;;23452:122;;;;-1:-1:-1;;;23452:122:0;;12979:2:1;23452:122:0;;;12961:21:1;13018:2;12998:18;;;12991:30;13057:34;13037:18;;;13030:62;-1:-1:-1;;;13108:18:1;;;13101:35;13153:19;;23452:122:0;12777:401:1;23452:122:0;23610:65;23619:10;23631:7;23659:15;23640:16;:34;23610:8;:65::i;20465:190::-;20568:4;20585:40;20595:10;20607:9;20618:6;20585:9;:40::i;13264:95::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13325:19:0::1;;::::0;;;13347:4:::1;13325:19;::::0;;;;;;;:26;;-1:-1:-1;;13325:26:0::1;::::0;;::::1;::::0;;13264:95::o;20792:289::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20917:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;20909:61:::1;;;;-1:-1:-1::0;;;20909:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20981:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;20981:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21035:38;;20981:36;;:23;21035:38:::1;::::0;::::1;20792:289:::0;;:::o;19566:168::-;-1:-1:-1;;;;;19699:18:0;;;19672:7;19699:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19566:168::o;34682:309::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;34802:17:::1;:30:::0;;;34843:17:::1;:30:::0;;;34900:26:::1;34822:10:::0;34863;34900:14:::1;:26::i;:::-;34884:13;:42:::0;34944:39:::1;::::0;;12353:25:1;;;12409:2;12394:18;;12387:34;;;34944:39:0::1;::::0;12326:18:1;34944:39:0::1;;;;;;;34682:309:::0;;:::o;33379:849::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;33517:9:::1;33512:625;;33551:3;33543:43;;;::::0;-1:-1:-1;;;33543:43:0;;13385:2:1;33543:43:0::1;::::0;::::1;13367:21:1::0;13424:2;13404:18;;;13397:30;13463:29;13443:18;;;13436:57;13510:18;;33543:43:0::1;13183:351:1::0;33543:43:0::1;33610:9;33601:18;;33640:6;-1:-1:-1::0;;;;;33640:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33634:28:0::1;;33670:6;33634:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;33694:48;33729:4;33735:6;33701;-1:-1:-1::0;;;;;33701:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33694:34:0::1;::::0;:48;:34:::1;:48::i;:::-;33512:625;;;33779:3;33775:351;;;33813:10;33803:21;::::0;;;:9:::1;:21;::::0;;;;:31;;33828:6;;33803:21;:31:::1;::::0;33828:6;;33803:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;33863:4:0::1;33853:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33872:6;;33853:15;:25:::1;::::0;33872:6;;33853:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;33902:34:0::1;::::0;2049:25:1;;;33923:4:0::1;-1:-1:-1::0;;;;;33902:34:0::1;::::0;33911:10:::1;::::0;-1:-1:-1;;;;;;;;;;;33902:34:0;2037:2:1;2022:18;33902:34:0::1;;;;;;;33775:351;;;-1:-1:-1::0;;;;;33987:4:0::1;33977:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33996:6;;33977:15;:25:::1;::::0;33996:6;;33977:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;34031:10:0::1;34021:21;::::0;;;:9:::1;:21;::::0;;;;:31;;34046:6;;34021:21;:31:::1;::::0;34046:6;;34021:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;34076:34:0::1;::::0;2049:25:1;;;34091:10:0::1;::::0;-1:-1:-1;;;;;34085:4:0::1;34076:34;::::0;-1:-1:-1;;;;;;;;;;;34076:34:0;2037:2:1;2022:18;34076:34:0::1;;;;;;;33775:351;34153:4;-1:-1:-1::0;;;;;34147:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34216:3;34181:39;;34197:9;34181:39;;;34208:6;34181:39;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;34181:39:0::1;;;;;;;;33379:849:::0;;;:::o;13367:98::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13430:19:0::1;13452:5;13430:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;13430:27:0::1;::::0;;13367:98::o;13699:227::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13784:17:0;::::1;13776:42;;;;-1:-1:-1::0;;;13776:42:0::1;;;;;;;:::i;:::-;13829:5;:11:::0;;-1:-1:-1;;;;;;13829:11:0::1;-1:-1:-1::0;;;;;13829:11:0;::::1;::::0;;::::1;::::0;;13851:19;;;-1:-1:-1;13851:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;13851:26:0::1;::::0;;::::1;::::0;;;13893:25;;6378:51:1;;;13893:25:0::1;::::0;6351:18:1;13893:25:0::1;;;;;;;13699:227:::0;:::o;28265:606::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;28423:1:::1;28407:12;:17;;28385:109;;;::::0;-1:-1:-1;;;28385:109:0;;14213:2:1;28385:109:0::1;::::0;::::1;14195:21:1::0;14252:2;14232:18;;;14225:30;14291:34;14271:18;;;14264:62;-1:-1:-1;;;14342:18:1;;;14335:40;14392:19;;28385:109:0::1;14011:406:1::0;28385:109:0::1;28524:6;28513:7;:17;;28505:69;;;::::0;-1:-1:-1;;;28505:69:0;;14624:2:1;28505:69:0::1;::::0;::::1;14606:21:1::0;14663:2;14643:18;;;14636:30;14702:34;14682:18;;;14675:62;-1:-1:-1;;;14753:18:1;;;14746:37;14800:19;;28505:69:0::1;14422:403:1::0;28505:69:0::1;28585:18;28638:8;28607:27;28622:12:::0;15657:23:::1;28607:27;:::i;:::-;28606:40;;;;:::i;:::-;28585:61:::0;-1:-1:-1;28657:22:0::1;28709:8;28683:22;28698:7:::0;15657:23:::1;28683:22;:::i;:::-;28682:35;;;;:::i;:::-;28728:12;:25:::0;;;28764:16:::1;:33:::0;;;28815:48:::1;::::0;;12353:25:1;;;12409:2;12394:18;;12387:34;;;28764:33:0;;-1:-1:-1;28815:48:0::1;::::0;12326:18:1;28815:48:0::1;;;;;;;28374:497;;28265:606:::0;;:::o;21388:221::-;13196:24;13209:10;13196:12;:24::i;:::-;13188:48;;;;-1:-1:-1;;;13188:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21477:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:26;::::1;;:16;::::0;;::::1;:26;;::::0;21469:50:::1;;;;-1:-1:-1::0;;;21469:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21530:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:25;;-1:-1:-1;;21530:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21573:28;;21530:25;;:16;21573:28:::1;::::0;::::1;21388:221:::0;;:::o;13584:107::-;-1:-1:-1;;;;;13664:19:0;13640:4;13664:19;;;:14;:19;;;;;;;;;13584:107::o;23726:338::-;-1:-1:-1;;;;;23820:19:0;;23812:68;;;;-1:-1:-1;;;23812:68:0;;15427:2:1;23812:68:0;;;15409:21:1;15466:2;15446:18;;;15439:30;15505:34;15485:18;;;15478:62;-1:-1:-1;;;15556:18:1;;;15549:34;15600:19;;23812:68:0;15225:400:1;23812:68:0;-1:-1:-1;;;;;23899:21:0;;23891:68;;;;-1:-1:-1;;;23891:68:0;;15832:2:1;23891:68:0;;;15814:21:1;15871:2;15851:18;;;15844:30;15910:34;15890:18;;;15883:62;-1:-1:-1;;;15961:18:1;;;15954:32;16003:19;;23891:68:0;15630:398:1;23891:68:0;-1:-1:-1;;;;;23972:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24024:32;;2049:25:1;;;24024:32:0;;2022:18:1;24024:32:0;1903:177:1;2539:98:0;2597:7;2624:5;2628:1;2624;:5;:::i;2645:98::-;2703:7;2730:5;2734:1;2730;:5;:::i;2327:98::-;2385:7;2412:5;2416:1;2412;:5;:::i;24072:502::-;24207:24;24234:25;24244:5;24251:7;24234:9;:25::i;:::-;24207:52;;-1:-1:-1;;24274:16:0;:37;24270:297;;24374:6;24354:16;:26;;24328:117;;;;-1:-1:-1;;;24328:117:0;;16235:2:1;24328:117:0;;;16217:21:1;16274:2;16254:18;;;16247:30;16313:31;16293:18;;;16286:59;16362:18;;24328:117:0;16033:353:1;24328:117:0;24489:51;24498:5;24505:7;24533:6;24514:16;:25;24489:8;:51::i;:::-;24196:378;24072:502;;;:::o;24582:1719::-;24705:37;24716:6;24724:9;24735:6;24705:10;:37::i;:::-;-1:-1:-1;;;;;24789:21:0;;24755:12;24789:21;;;:13;:21;;;;;;24770:4;;24789:21;;;:49;;-1:-1:-1;;;;;;24814:24:0;;;;;;:13;:24;;;;;;;;24789:49;24785:535;;;-1:-1:-1;24865:5:0;24785:535;;;24911:14;;;;24903:44;;;;-1:-1:-1;;;24903:44:0;;16593:2:1;24903:44:0;;;16575:21:1;16632:2;16612:18;;;16605:30;-1:-1:-1;;;16651:18:1;;;16644:47;16708:18;;24903:44:0;16391:341:1;24903:44:0;24998:12;;24988:6;:22;;24962:124;;;;-1:-1:-1;;;24962:124:0;;16939:2:1;24962:124:0;;;16921:21:1;16978:2;16958:18;;;16951:30;17017:34;16997:18;;;16990:62;-1:-1:-1;;;17068:18:1;;;17061:38;17116:19;;24962:124:0;16737:404:1;24962:124:0;25118:4;-1:-1:-1;;;;;25105:17:0;:9;-1:-1:-1;;;;;25105:17:0;;25101:208;;25206:16;;-1:-1:-1;;;;;25173:20:0;;;;;;:9;:20;;;;;;:29;;25196:6;;25173:29;:::i;:::-;:49;;25143:150;;;;-1:-1:-1;;;25143:150:0;;17348:2:1;25143:150:0;;;17330:21:1;17387:2;17367:18;;;17360:30;17426:29;17406:18;;;17399:57;17473:18;;25143:150:0;17146:351:1;25143:150:0;25332:31;25390:4;-1:-1:-1;;;;;25380:14:0;:6;-1:-1:-1;;;;;25380:14:0;;25376:426;;25429:19;25411:37;;25506:6;-1:-1:-1;;;;;25485:28:0;:9;-1:-1:-1;;;;;25485:28:0;;;:62;;;;;25536:11;;25517:15;:30;;25485:62;25463:159;;;-1:-1:-1;;;;;25582:17:0;;;;;;:6;:17;;;;;:24;;-1:-1:-1;;25582:24:0;25602:4;25582:24;;;25463:159;25376:426;;;25656:4;-1:-1:-1;;;;;25643:17:0;:9;-1:-1:-1;;;;;25643:17:0;;25639:163;;-1:-1:-1;25695:20:0;25639:163;;;-1:-1:-1;25766:24:0;25639:163;25826:9;;:16;;25840:1;25826:13;:16::i;:::-;25814:9;:28;25857:30;25872:6;25880;25857:14;:30::i;:::-;25853:120;;;25904:29;25919:13;;25904:14;:29::i;:::-;25960:1;25948:9;:13;25853:120;-1:-1:-1;;;;;26005:17:0;;;;;;:9;:17;;;;;;:29;;26027:6;26005:21;:29::i;:::-;-1:-1:-1;;;;;25985:17:0;;;;;;:9;:17;;;;;:49;;;;26070:7;:90;;26154:6;26070:90;;;26093:45;26106:6;26114;26122:15;26093:12;:45::i;:::-;-1:-1:-1;;;;;26194:20:0;;;;;;:9;:20;;;;;;26045:115;;-1:-1:-1;26194:40:0;;26045:115;26194:24;:40::i;:::-;-1:-1:-1;;;;;26171:20:0;;;;;;;:9;:20;;;;;;;:63;;;;26250:43;;;;;;-1:-1:-1;;;;;;;;;;;26250:43:0;;;26278:14;2049:25:1;;2037:2;2022:18;;1903:177;26250:43:0;;;;;;;;24694:1607;;;24582:1719;;;:::o;2433:98::-;2491:7;2518:5;2522:1;2518;:5;:::i;9205:214::-;9342:58;;;-1:-1:-1;;;;;10003:32:1;;9342:58:0;;;9985:51:1;10052:18;;;;10045:34;;;9342:58:0;;;;;;;;;;9958:18:1;;;;9342:58:0;;;;;;;;-1:-1:-1;;;;;9342:58:0;-1:-1:-1;;;9342:58:0;;;9288:123;;9322:5;;9288:19;:123::i;:::-;9205:214;;;:::o;26309:454::-;-1:-1:-1;;;;;26448:21:0;;;;;;:13;:21;;;;;;;;26447:22;26439:45;;;;-1:-1:-1;;;26439:45:0;;17704:2:1;26439:45:0;;;17686:21:1;17743:2;17723:18;;;17716:30;-1:-1:-1;;;17762:18:1;;;17755:40;17812:18;;26439:45:0;17502:334:1;26439:45:0;-1:-1:-1;;;;;26504:24:0;;;;;;:13;:24;;;;;;;;26503:25;26495:48;;;;-1:-1:-1;;;26495:48:0;;17704:2:1;26495:48:0;;;17686:21:1;17743:2;17723:18;;;17716:30;-1:-1:-1;;;17762:18:1;;;17755:40;17812:18;;26495:48:0;17502:334:1;26495:48:0;26571:1;26562:6;:10;26554:64;;;;-1:-1:-1;;;26554:64:0;;18043:2:1;26554:64:0;;;18025:21:1;18082:2;18062:18;;;18055:30;18121:34;18101:18;;;18094:62;-1:-1:-1;;;18172:18:1;;;18165:39;18221:19;;26554:64:0;17841:405:1;26554:64:0;-1:-1:-1;;;;;20431:18:0;;20404:7;20431:18;;;:9;:18;;;;;;26651:6;:27;;26629:126;;;;-1:-1:-1;;;26629:126:0;;18453:2:1;26629:126:0;;;18435:21:1;18492:2;18472:18;;;18465:30;18531:34;18511:18;;;18504:62;-1:-1:-1;;;18582:18:1;;;18575:47;18639:19;;26629:126:0;18251:413:1;30199:464:0;30346:15;;30422:13;;30412:4;30303;20431:18;;;:9;:18;;;;;;30467:8;;30303:4;;30336:25;;;;-1:-1:-1;30394:41:0;;30467:8;;30466:9;:47;;;;-1:-1:-1;30492:21:0;;;;30466:47;:72;;;;;30530:8;30466:72;:127;;;;;30568:25;;30555:9;;:38;;30466:127;:158;;;;;30610:14;30466:158;:189;;;;;30651:4;-1:-1:-1;;;;;30641:14:0;:6;-1:-1:-1;;;;;30641:14:0;;;30466:189;30446:209;30199:464;-1:-1:-1;;;;;30199:464:0:o;30671:943::-;18427:8;:15;;-1:-1:-1;;18427:15:0;18438:4;18427:15;;;30830:13:::1;::::0;30793:17:::1;::::0;18427:8;;30768:97:::1;::::0;30863:1:::1;::::0;30768:76:::1;::::0;;;:6;;:24:::1;:43::i;:97::-;30742:123:::0;-1:-1:-1;30876:20:0::1;30899:27;:6:::0;30742:123;30899:10:::1;:27::i;:::-;30876:50:::0;-1:-1:-1;30964:21:0::1;30996:30;30876:50:::0;30996:16:::1;:30::i;:::-;31039:20;31062:41;:21;31088:14:::0;31062:25:::1;:41::i;:::-;31039:64;;31114:19;31136:43;31154:24;31176:1;31154:17;;:21;;:24;;;;:::i;:::-;31136:13;::::0;;:17:::1;:43::i;:::-;31114:65:::0;-1:-1:-1;31196:19:0;;31192:191:::1;;31232:139;31263:15;31297:59;31354:1;31297:52;31337:11;31297:35;31314:17;;31297:12;:16;;:35;;;;:::i;:59::-;31232:12;:139::i;:::-;31510:18;::::0;31560:17:::1;::::0;31484:122:::1;::::0;-1:-1:-1;;;;;31510:18:0::1;::::0;31543:52:::1;::::0;31583:11;;31543:35:::1;::::0;:12;;:16:::1;:35::i;:52::-;31484:11;:122::i;:::-;-1:-1:-1::0;;18465:8:0;:16;;-1:-1:-1;;18465:16:0;;;-1:-1:-1;;;;30671:943:0:o;26771:1486::-;26910:7;26930:14;26947:4;:21;26952:15;26947:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;26947:21:0;;;26930:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26999:14:0;;;;:6;:14;;;;;;;26930:38;;-1:-1:-1;;26999:14:0;;:32;;;;-1:-1:-1;27017:14:0;;;;;;;26999:32;:98;;27085:3;:12;;;26999:98;;;27048:20;27065:3;16320:5;27048:20;:::i;:::-;26979:118;;27131:9;27144:1;27131:14;27127:60;;27169:6;27162:13;;;;;;27127:60;27197:17;27217:43;16320:5;27218:21;:6;27229:9;27218:10;:21::i;27217:43::-;27197:63;;27271:18;27292:43;27325:9;27293:26;27307:3;:11;;;27293:9;:13;;:26;;;;:::i;27292:43::-;27271:64;;27346:23;27372:72;27424:9;27373:31;27387:3;:16;;;27373:9;:13;;:31;;;;:::i;27372:72::-;27346:98;-1:-1:-1;27457:20:0;27480:46;27346:98;27480:25;:9;27494:10;27480:13;:25::i;:::-;:29;;:46::i;:::-;27457:69;-1:-1:-1;27543:14:0;;27539:177;;15961:42;27601:24;;:9;:24;;;;:40;;27630:10;27601:28;:40::i;:::-;15961:42;27574:24;;;;:9;:24;;;:67;;;;:24;27661:43;-1:-1:-1;;;;;27661:43:0;;;-1:-1:-1;;;;;;;;;;;27661:43:0;;;27693:10;2049:25:1;;2037:2;2022:18;;1903:177;27661:43:0;;;;;;;;27539:177;27730:19;;27726:260;;27841:16;;-1:-1:-1;;;;;27841:16:0;27805:68;;;;:9;:68;;;;;;:89;;27878:15;27805:72;:89::i;:::-;27784:16;;;-1:-1:-1;;;;;27784:16:0;;;27766:36;;;;:9;:36;;;;;;;;;:128;;;;27939:16;;27914:60;;2049:25:1;;;27939:16:0;;;;27914:60;;;;-1:-1:-1;;;;;;;;;;;27914:60:0;2022:18:1;27914:60:0;;;;;;;27726:260;28000:16;;27996:215;;28078:4;28060:24;;;;:9;:24;;;;;;:74;;28107:12;28060:28;:74::i;:::-;28051:4;28033:24;;;;:9;:24;;;;;;;:101;;;;28154:45;;-1:-1:-1;;;;;28154:45:0;;;-1:-1:-1;;;;;;;;;;;28154:45:0;;;28186:12;2049:25:1;;2037:2;2022:18;;1903:177;28154:45:0;;;;;;;;27996:215;28228:21;:6;28239:9;28228:10;:21::i;:::-;28221:28;26771:1486;-1:-1:-1;;;;;;;;;;26771:1486:0:o;12025:802::-;12449:23;12475:106;12517:4;12475:106;;;;;;;;;;;;;;;;;12483:5;-1:-1:-1;;;;;12475:27:0;;;:106;;;;;:::i;:::-;12596:17;;12449:132;;-1:-1:-1;12596:21:0;12592:228;;12711:10;12700:30;;;;;;;;;;;;:::i;:::-;12674:134;;;;-1:-1:-1;;;12674:134:0;;19121:2:1;12674:134:0;;;19103:21:1;19160:2;19140:18;;;19133:30;19199:34;19179:18;;;19172:62;-1:-1:-1;;;19250:18:1;;;19243:40;19300:19;;12674:134:0;18919:406:1;31983:444:0;32073:16;;;32087:1;32073:16;;;;;;;;32049:21;;32073:16;;;;;;;;;;-1:-1:-1;32073:16:0;32049:40;;32118:4;32100;32105:1;32100:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32100:23:0;;;-1:-1:-1;;;;;32100:23:0;;;;;32144:6;-1:-1:-1;;;;;32144:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32134:4;32139:1;32134:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32134:23:0;;;-1:-1:-1;;;;;32134:23:0;;;;;32168:53;32185:4;32200:6;32209:11;32168:8;:53::i;:::-;32232:187;;-1:-1:-1;;;32232:187:0;;-1:-1:-1;;;;;32232:6:0;:57;;;;:187;;32304:11;;32330:1;;32346:4;;32373;;32393:15;;32232:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32038:389;31983:444;:::o;31622:353::-;31703:53;31720:4;31735:6;31744:11;31703:8;:53::i;:::-;31908:18;;31767:200;;-1:-1:-1;;;31767:200:0;;31830:4;31767:200;;;20788:34:1;20838:18;;;20831:34;;;31876:1:0;20881:18:1;;;20874:34;;;20924:18;;;20917:34;-1:-1:-1;;;;;31908:18:0;;;20967:19:1;;;20960:44;31941:15:0;21020:19:1;;;21013:35;31767:6:0;:22;;;;;;31797:9;;20722:19:1;;31767:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31622:353;;:::o;32435:227::-;32514:6;32524:1;32514:11;32510:24;;32435:227;;:::o;32510:24::-;32545:12;32571:9;-1:-1:-1;;;;;32563:23:0;32594:6;32563:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32544:61;;;32624:7;32616:38;;;;-1:-1:-1;;;32616:38:0;;21782:2:1;32616:38:0;;;21764:21:1;21821:2;21801:18;;;21794:30;-1:-1:-1;;;21840:18:1;;;21833:48;21898:18;;32616:38:0;21580:342:1;4459:229:0;4596:12;4628:52;4650:6;4658:4;4664:1;4667:12;4628:21;:52::i;:::-;4621:59;4459:229;-1:-1:-1;;;;4459:229:0:o;5060:612::-;5230:12;5302:5;5277:21;:30;;5255:118;;;;-1:-1:-1;;;5255:118:0;;22129:2:1;5255:118:0;;;22111:21:1;22168:2;22148:18;;;22141:30;22207:34;22187:18;;;22180:62;-1:-1:-1;;;22258:18:1;;;22251:36;22304:19;;5255:118:0;21927:402:1;5255:118:0;5385:12;5399:23;5426:6;-1:-1:-1;;;;;5426:11:0;5445:5;5466:4;5426:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5384:97;;;;5512:152;5557:6;5582:7;5608:10;5637:12;5512:26;:152::i;:::-;5492:172;5060:612;-1:-1:-1;;;;;;;5060:612:0:o;7176:644::-;7361:12;7390:7;7386:427;;;7418:10;:17;7439:1;7418:22;7414:290;;-1:-1:-1;;;;;3705:19:0;;;7628:60;;;;-1:-1:-1;;;7628:60:0;;22815:2:1;7628:60:0;;;22797:21:1;22854:2;22834:18;;;22827:30;22893:31;22873:18;;;22866:59;22942:18;;7628:60:0;22613:353:1;7628:60:0;-1:-1:-1;7725:10:0;7718:17;;7386:427;7768:33;7776:10;7788:12;8327:17;;:21;8323:388;;8559:10;8553:17;8616:15;8603:10;8599:2;8595:19;8588:44;8323:388;8686:12;8679:20;;-1:-1:-1;;;8679:20:0;;;;;;;;:::i;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:131::-;-1:-1:-1;;;;;740:31:1;;730:42;;720:70;;786:1;783;776:12;720:70;665:131;:::o;801:315::-;869:6;877;930:2;918:9;909:7;905:23;901:32;898:52;;;946:1;943;936:12;898:52;985:9;972:23;1004:31;1029:5;1004:31;:::i;:::-;1054:5;1106:2;1091:18;;;;1078:32;;-1:-1:-1;;;801:315:1:o;1313:156::-;1394:20;;1443:1;1433:12;;1423:40;;1459:1;1456;1449:12;1423:40;1313:156;;;:::o;1474:424::-;1580:6;1588;1596;1604;1657:3;1645:9;1636:7;1632:23;1628:33;1625:53;;;1674:1;1671;1664:12;1625:53;1697:42;1729:9;1697:42;:::i;:::-;1687:52;1786:2;1771:18;;1758:32;;-1:-1:-1;1837:2:1;1822:18;;1809:32;;1888:2;1873:18;1860:32;;-1:-1:-1;1474:424:1;-1:-1:-1;;;1474:424:1:o;2085:456::-;2162:6;2170;2178;2231:2;2219:9;2210:7;2206:23;2202:32;2199:52;;;2247:1;2244;2237:12;2199:52;2286:9;2273:23;2305:31;2330:5;2305:31;:::i;:::-;2355:5;-1:-1:-1;2412:2:1;2397:18;;2384:32;2425:33;2384:32;2425:33;:::i;:::-;2085:456;;2477:7;;-1:-1:-1;;;2531:2:1;2516:18;;;;2503:32;;2085:456::o;2546:247::-;2605:6;2658:2;2646:9;2637:7;2633:23;2629:32;2626:52;;;2674:1;2671;2664:12;2626:52;2713:9;2700:23;2732:31;2757:5;2732:31;:::i;2987:219::-;3066:6;3119:2;3107:9;3098:7;3094:23;3090:32;3087:52;;;3135:1;3132;3125:12;3087:52;3158:42;3190:9;3158:42;:::i;3607:529::-;3684:6;3692;3700;3753:2;3741:9;3732:7;3728:23;3724:32;3721:52;;;3769:1;3766;3759:12;3721:52;3808:9;3795:23;3827:31;3852:5;3827:31;:::i;:::-;3877:5;-1:-1:-1;3934:2:1;3919:18;;3906:32;3947:33;3906:32;3947:33;:::i;:::-;3999:7;-1:-1:-1;4058:2:1;4043:18;;4030:32;4071:33;4030:32;4071:33;:::i;:::-;4123:7;4113:17;;;3607:529;;;;;:::o;4141:118::-;4227:5;4220:13;4213:21;4206:5;4203:32;4193:60;;4249:1;4246;4239:12;4264:382;4329:6;4337;4390:2;4378:9;4369:7;4365:23;4361:32;4358:52;;;4406:1;4403;4396:12;4358:52;4445:9;4432:23;4464:31;4489:5;4464:31;:::i;:::-;4514:5;-1:-1:-1;4571:2:1;4556:18;;4543:32;4584:30;4543:32;4584:30;:::i;:::-;4633:7;4623:17;;;4264:382;;;;;:::o;4651:241::-;4707:6;4760:2;4748:9;4739:7;4735:23;4731:32;4728:52;;;4776:1;4773;4766:12;4728:52;4815:9;4802:23;4834:28;4856:5;4834:28;:::i;4897:367::-;4960:8;4970:6;5024:3;5017:4;5009:6;5005:17;5001:27;4991:55;;5042:1;5039;5032:12;4991:55;-1:-1:-1;5065:20:1;;5108:18;5097:30;;5094:50;;;5140:1;5137;5130:12;5094:50;5177:4;5169:6;5165:17;5153:29;;5237:3;5230:4;5220:6;5217:1;5213:14;5205:6;5201:27;5197:38;5194:47;5191:67;;;5254:1;5251;5244:12;5191:67;4897:367;;;;;:::o;5269:773::-;5391:6;5399;5407;5415;5468:2;5456:9;5447:7;5443:23;5439:32;5436:52;;;5484:1;5481;5474:12;5436:52;5524:9;5511:23;5553:18;5594:2;5586:6;5583:14;5580:34;;;5610:1;5607;5600:12;5580:34;5649:70;5711:7;5702:6;5691:9;5687:22;5649:70;:::i;:::-;5738:8;;-1:-1:-1;5623:96:1;-1:-1:-1;5826:2:1;5811:18;;5798:32;;-1:-1:-1;5842:16:1;;;5839:36;;;5871:1;5868;5861:12;5839:36;;5910:72;5974:7;5963:8;5952:9;5948:24;5910:72;:::i;:::-;5269:773;;;;-1:-1:-1;6001:8:1;-1:-1:-1;;;;5269:773:1:o;6047:180::-;6106:6;6159:2;6147:9;6138:7;6134:23;6130:32;6127:52;;;6175:1;6172;6165:12;6127:52;-1:-1:-1;6198:23:1;;6047:180;-1:-1:-1;6047:180:1:o;6440:446::-;6523:6;6531;6539;6547;6600:3;6588:9;6579:7;6575:23;6571:33;6568:53;;;6617:1;6614;6607:12;6568:53;6656:9;6643:23;6675:28;6697:5;6675:28;:::i;6891:388::-;6959:6;6967;7020:2;7008:9;6999:7;6995:23;6991:32;6988:52;;;7036:1;7033;7026:12;6988:52;7075:9;7062:23;7094:31;7119:5;7094:31;:::i;:::-;7144:5;-1:-1:-1;7201:2:1;7186:18;;7173:32;7214:33;7173:32;7214:33;:::i;7284:248::-;7352:6;7360;7413:2;7401:9;7392:7;7388:23;7384:32;7381:52;;;7429:1;7426;7419:12;7381:52;-1:-1:-1;;7452:23:1;;;7522:2;7507:18;;;7494:32;;-1:-1:-1;7284:248:1:o;7537:444::-;7608:6;7616;7624;7677:2;7665:9;7656:7;7652:23;7648:32;7645:52;;;7693:1;7690;7683:12;7645:52;7732:9;7719:23;7751:28;7773:5;7751:28;:::i;:::-;7798:5;-1:-1:-1;7850:2:1;7835:18;;7822:32;;-1:-1:-1;7906:2:1;7891:18;;7878:32;7919:30;7878:32;7919:30;:::i;8470:335::-;8672:2;8654:21;;;8711:2;8691:18;;;8684:30;-1:-1:-1;;;8745:2:1;8730:18;;8723:41;8796:2;8781:18;;8470:335::o;9166:127::-;9227:10;9222:3;9218:20;9215:1;9208:31;9258:4;9255:1;9248:15;9282:4;9279:1;9272:15;9622:184;9692:6;9745:2;9733:9;9724:7;9720:23;9716:32;9713:52;;;9761:1;9758;9751:12;9713:52;-1:-1:-1;9784:16:1;;9622:184;-1:-1:-1;9622:184:1:o;10090:127::-;10151:10;10146:3;10142:20;10139:1;10132:31;10182:4;10179:1;10172:15;10206:4;10203:1;10196:15;10222:128;10262:3;10293:1;10289:6;10286:1;10283:13;10280:39;;;10299:18;;:::i;:::-;-1:-1:-1;10335:9:1;;10222:128::o;10355:336::-;10557:2;10539:21;;;10596:2;10576:18;;;10569:30;-1:-1:-1;;;10630:2:1;10615:18;;10608:42;10682:2;10667:18;;10355:336::o;11085:335::-;11287:2;11269:21;;;11326:2;11306:18;;;11299:30;-1:-1:-1;;;11360:2:1;11345:18;;11338:41;11411:2;11396:18;;11085:335::o;11777:127::-;11838:10;11833:3;11829:20;11826:1;11819:31;11869:4;11866:1;11859:15;11893:4;11890:1;11883:15;11909:135;11948:3;11969:17;;;11966:43;;11989:18;;:::i;:::-;-1:-1:-1;12036:1:1;12025:13;;11909:135::o;12049:125::-;12089:4;12117:1;12114;12111:8;12108:34;;;12122:18;;:::i;:::-;-1:-1:-1;12159:9:1;;12049:125::o;13539:251::-;13609:6;13662:2;13650:9;13641:7;13637:23;13633:32;13630:52;;;13678:1;13675;13668:12;13630:52;13710:9;13704:16;13729:31;13754:5;13729:31;:::i;14830:168::-;14870:7;14936:1;14932;14928:6;14924:14;14921:1;14918:21;14913:1;14906:9;14899:17;14895:45;14892:71;;;14943:18;;:::i;:::-;-1:-1:-1;14983:9:1;;14830:168::o;15003:217::-;15043:1;15069;15059:132;;15113:10;15108:3;15104:20;15101:1;15094:31;15148:4;15145:1;15138:15;15176:4;15173:1;15166:15;15059:132;-1:-1:-1;15205:9:1;;15003:217::o;18669:245::-;18736:6;18789:2;18777:9;18768:7;18764:23;18760:32;18757:52;;;18805:1;18802;18795:12;18757:52;18837:9;18831:16;18856:28;18878:5;18856:28;:::i;19462:980::-;19724:4;19772:3;19761:9;19757:19;19803:6;19792:9;19785:25;19829:2;19867:6;19862:2;19851:9;19847:18;19840:34;19910:3;19905:2;19894:9;19890:18;19883:31;19934:6;19969;19963:13;20000:6;19992;19985:22;20038:3;20027:9;20023:19;20016:26;;20077:2;20069:6;20065:15;20051:29;;20098:1;20108:195;20122:6;20119:1;20116:13;20108:195;;;20187:13;;-1:-1:-1;;;;;20183:39:1;20171:52;;20278:15;;;;20243:12;;;;20219:1;20137:9;20108:195;;;-1:-1:-1;;;;;;;20359:32:1;;;;20354:2;20339:18;;20332:60;-1:-1:-1;;;20423:3:1;20408:19;20401:35;20320:3;19462:980;-1:-1:-1;;;19462:980:1:o;21059:306::-;21147:6;21155;21163;21216:2;21204:9;21195:7;21191:23;21187:32;21184:52;;;21232:1;21229;21222:12;21184:52;21261:9;21255:16;21245:26;;21311:2;21300:9;21296:18;21290:25;21280:35;;21355:2;21344:9;21340:18;21334:25;21324:35;;21059:306;;;;;:::o;22334:274::-;22463:3;22501:6;22495:13;22517:53;22563:6;22558:3;22551:4;22543:6;22539:17;22517:53;:::i;:::-;22586:16;;;;;22334:274;-1:-1:-1;;22334:274:1:o

Swarm Source

ipfs://b0b37f46757b948efa5b6d0c857f26f814da0e20bc7e9fe784b4f68640dbe0a1
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.