ETH Price: $2,272.85 (-0.76%)

Contract

0xf7E032dadc8c89b97A291a4D590dA0e032F7eD44
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove Authentic...199671122024-05-28 8:16:23103 days ago1716884183IN
0xf7E032da...032F7eD44
0 ETH0.0005284617.91237215
Prepare Launch199646802024-05-28 0:07:23103 days ago1716854843IN
0xf7E032da...032F7eD44
0 ETH0.0318275611.11128447
Add Authenticato...199646782024-05-28 0:06:59103 days ago1716854819IN
0xf7E032da...032F7eD44
0 ETH0.0005752511.18719494
Transfer199646752024-05-28 0:06:23103 days ago1716854783IN
0xf7E032da...032F7eD44
2 ETH0.0002365511.23489208
0x6000600d199646592024-05-28 0:03:11103 days ago1716854591IN
 Create: ATESTTOKEN
0 ETH0.038169639.93521696

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
199646802024-05-28 0:07:23103 days ago1716854843
0xf7E032da...032F7eD44
2 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ATESTTOKEN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-28
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IAccessControl {

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) external view returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

    function renounceRole(bytes32 role, address account) external;
}

library Math {
    enum Rounding {
        Down, 
        Up, 
        Zero 
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {

        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {

        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {

            uint256 prod0; 
            uint256 prod1; 
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            if (prod1 == 0) {

                return prod0 / denominator;
            }

            require(denominator > prod1, "Math: mulDiv overflow");

            uint256 remainder;
            assembly {

                remainder := mulmod(x, y, denominator)

                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            uint256 twos = denominator & (~denominator + 1);
            assembly {

                denominator := div(denominator, twos)

                prod0 := div(prod0, twos)

                twos := add(div(sub(0, twos), twos), 1)
            }

            prod0 |= prod1 * twos;

            uint256 inverse = (3 * denominator) ^ 2;

            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 

            result = prod0 * inverse;
            return result;
        }
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 result = 1 << (log2(a) >> 1);

        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }

    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

library SignedMath {

    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    function average(int256 a, int256 b) internal pure returns (int256) {

        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    function abs(int256 n) internal pure returns (uint256) {
        unchecked {

            return uint256(n >= 0 ? n : -n);
        }
    }
}

library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;

            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;

                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    function toString(int256 value) internal pure returns (string memory) {
        return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }

    function equal(string memory a, string memory b) internal pure returns (bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(account),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

interface IERC20Metadata is IERC20 {

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(
        address account,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }
}

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

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

contract ATESTTOKEN is ERC20, AccessControl {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public operationsAddress;

    uint256 public tradingActiveBlock = 0;
    mapping(address => bool) public markedAsSniper;

    bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
    bytes32 public constant AUTHENTICATOR_ROLE =
        keccak256("AUTHENTICATOR_ROLE");    

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public flagSnipersEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    // Modifiers
    modifier onlyManager() {
        require(hasRole(MANAGER_ROLE, msg.sender), "Not a manager");
        _;
    }

    modifier onlyAuthenticators() {
        require(
            hasRole(AUTHENTICATOR_ROLE, msg.sender),
            "Not an authenticator"
        );
        _;
    }

    constructor() payable ERC20("ATEST2", "ATEST2") {
        address newOwner = msg.sender;  

        _setupRole(MANAGER_ROLE, newOwner); // Assign the manager role to the contract deployer
        _setRoleAdmin(AUTHENTICATOR_ROLE, MANAGER_ROLE); // Assign manager as the administrator of the authenticator role
        grantRole(AUTHENTICATOR_ROLE, newOwner); // Grant the authenticator role to the contract deployer

        uint256 totalSupply = 100 * 1e6 * 1e18; 

        buyOperationsFee = 10;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 20;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;        

        maxBuyAmount = (totalSupply * 1) / 100; // 1%
        maxSellAmount = (totalSupply * 1) / 100; // 1%
        maxWallet = (totalSupply * 1) / 100; // 1%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        operationsAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);

        _createInitialSupply(address(this), totalSupply);     
    }

    receive() external payable {}

    function addAuthenticator(address _authenticator) external onlyManager {
        require(_authenticator != address(0), "Invalid address");
        grantRole(AUTHENTICATOR_ROLE, _authenticator);
    }

    function removeAuthenticator(address _authenticator) external onlyManager {
        require(_authenticator != address(0), "Invalid address");
        revokeRole(AUTHENTICATOR_ROLE, _authenticator);
    }    

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyManager {
        transferDelayEnabled = false;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyManager {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyManager {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }        

    function updateBuyTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyManager {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyManager {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }    

    function excludeFromFees(address account, bool excluded) public onlyManager {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        } else {
            require(
                !markedAsSniper[from],
                "Snipers cannot transfer tokens"
            );
        }

        if (limitsInEffect) {
            if (to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {    
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 15) {
            contractBalance = swapTokensAtAmount * 15;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success, ) = address(operationsAddress).call{
            value: address(this).balance
        }("");
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyManager returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function setOperationsAddress(
        address _operationsAddress
    ) external onlyManager {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function removeLimits() external onlyManager {
        limitsInEffect = false;
    }

    function restoreLimits() external onlyManager { 
        limitsInEffect = true;
    }

    function flagSniper(address wallet) external onlyAuthenticators {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality disabled forever!"
        );

        require(!markedAsSniper[wallet], "Wallet is already flagged.");
        markedAsSniper[wallet] = true;
    }

    function massFlagSnipers(address[] calldata wallets)
        external onlyAuthenticators
    {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality disabled forever!"
        );        

        for (uint256 i = 0; i < wallets.length; i++) {
            markedAsSniper[wallets[i]] = true;
        }
    }

    function unflagSniper(address wallet) external onlyAuthenticators {
        require(markedAsSniper[wallet], "Wallet is already not marked.");
        markedAsSniper[wallet] = false;
    }        

    function massUnflagSnipers(address[] calldata wallets)
        external onlyAuthenticators
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            markedAsSniper[wallets[i]] = false;
        }
    }    

    function disableFlagSnipersForever() external onlyManager {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality already disabled forever!!"
        );

        flagSnipersEnabled = false;
    }    

    function emergencyETHRecovery() external onlyManager {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }      

    function prepareLaunch() external onlyManager {
        require(!tradingActive, "Trading is already active, cannot relaunch.");     

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 11155111) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Sepolia
        } else if (block.chainid == 56) {
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if (block.chainid == 97) {
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if (block.chainid == 42161) {
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);
        
        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);        

        _excludeFromMaxTransaction(address(dexRouter), true);
        excludeFromFees(address(dexRouter), true);  

        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );           

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        ); 
    }

    function enableTrading() external onlyAuthenticators {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }      
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"AUTHENTICATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"addAuthenticator","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFlagSnipersForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyETHRecovery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flagSnipersEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massFlagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massUnflagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"removeAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d55600f805463ffffffff191663010000011790556011805460ff19166001179055600660808181526520aa22a9aa1960d11b60a081905261010060405260c092835260e05290600362000057838262000863565b50600462000066828262000863565b50339150620000879050600080516020620044408339815191528262000235565b620000b1600080516020620044608339815191526000805160206200444083398151915262000245565b620000cc600080516020620044608339815191528262000290565b600a6013819055600060148190556a52b7d2dcc80cd2e400000091620000f3919062000945565b60125560146016819055600060178190556200010f9162000945565b6015556064620001218260016200095b565b6200012d919062000975565b60065560646200013f8260016200095b565b6200014b919062000975565b60075560646200015d8260016200095b565b62000169919062000975565b6008556127106200017c8260056200095b565b62000188919062000975565b600b55600c80546001600160a01b03191633179055620001aa826001620002be565b620001b7306001620002be565b620001c661dead6001620002be565b600c54620001df906001600160a01b03166001620002be565b620001ec82600162000321565b620001f930600162000321565b6200020861dead600162000321565b600c5462000221906001600160a01b0316600162000321565b6200022d3082620003dd565b505062000a9c565b620002418282620004c2565b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600082815260056020526040902060010154620002ad816200054c565b620002b98383620004c2565b505050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6200033c60008051602062004440833981519152336200055b565b6200037e5760405162461bcd60e51b815260206004820152600d60248201526c2737ba10309036b0b730b3b2b960991b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004355760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000375565b806002600082825462000449919062000945565b90915550506001600160a01b038216600090815260208190526040812080548392906200047890849062000945565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004ce82826200055b565b620002415760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005083390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000558813362000588565b50565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6200059482826200055b565b6200024157620005a481620005ec565b620005b1836020620005ff565b604051602001620005c4929190620009be565b60408051601f198184030181529082905262461bcd60e51b8252620003759160040162000a37565b6060620005826001600160a01b03831660145b60606000620006108360026200095b565b6200061d90600262000945565b6001600160401b03811115620006375762000637620007bf565b6040519080825280601f01601f19166020018201604052801562000662576020820181803683370190505b509050600360fc1b8160008151811062000680576200068062000a6c565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620006b257620006b262000a6c565b60200101906001600160f81b031916908160001a9053506000620006d88460026200095b565b620006e590600162000945565b90505b600181111562000767576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200071d576200071d62000a6c565b1a60f81b82828151811062000736576200073662000a6c565b60200101906001600160f81b031916908160001a90535060049490941c936200075f8162000a82565b9050620006e8565b508315620007b85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000375565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007ea57607f821691505b6020821081036200080b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b957600081815260208120601f850160051c810160208610156200083a5750805b601f850160051c820191505b818110156200085b5782815560010162000846565b505050505050565b81516001600160401b038111156200087f576200087f620007bf565b6200089781620008908454620007d5565b8462000811565b602080601f831160018114620008cf5760008415620008b65750858301515b600019600386901b1c1916600185901b1785556200085b565b600085815260208120601f198616915b828110156200090057888601518255948401946001909101908401620008df565b50858210156200091f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156200058257620005826200092f565b80820281158282048414176200058257620005826200092f565b6000826200099357634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015620009b55781810151838201526020016200099b565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620009f881601785016020880162000998565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000a2b81602884016020880162000998565b01602801949350505050565b602081526000825180602084015262000a5881604085016020870162000998565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008162000a945762000a946200092f565b506000190190565b6139948062000aac6000396000f3fe6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a2646970667358221220d90e0023bc80598a1a4545a4b0ff79b4bf0fc4c6b30733e2f6c3935b4550a60b64736f6c63430008130033241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a2646970667358221220d90e0023bc80598a1a4545a4b0ff79b4bf0fc4c6b30733e2f6c3935b4550a60b64736f6c63430008130033

Deployed Bytecode Sourcemap

20447:18330:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11094:204;;;;;;;;;;-1:-1:-1;11094:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;11094:204:0;;;;;;;;15066:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20600:27::-;;;;;;;;;;-1:-1:-1;20600:27:0;;;;-1:-1:-1;;;;;20600:27:0;;;;;;-1:-1:-1;;;;;1336:32:1;;;1318:51;;1306:2;1291:18;20600:27:0;1153:222:1;16046:194:0;;;;;;;;;;-1:-1:-1;16046:194:0;;;;;:::i;:::-;;:::i;21691:63::-;;;;;;;;;;-1:-1:-1;21691:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15387:108;;;;;;;;;;-1:-1:-1;15475:12:0;;15387:108;;;2234:25:1;;;2222:2;2207:18;15387:108:0;2088:177:1;21590:33:0;;;;;;;;;;;;;;;;16248:529;;;;;;;;;;-1:-1:-1;16248:529:0;;;;;:::i;:::-;;:::i;12074:131::-;;;;;;;;;;-1:-1:-1;12074:131:0;;;;;:::i;:::-;12148:7;12175:12;;;:6;:12;;;;;:22;;;;12074:131;12213:147;;;;;;;;;;-1:-1:-1;12213:147:0;;;;;:::i;:::-;;:::i;:::-;;15286:93;;;;;;;;;;-1:-1:-1;15286:93:0;;15369:2;3560:36:1;;3548:2;3533:18;15286:93:0;3418:184:1;12525:218:0;;;;;;;;;;-1:-1:-1;12525:218:0;;;;;:::i;:::-;;:::i;16785:290::-;;;;;;;;;;-1:-1:-1;16785:290:0;;;;;:::i;:::-;;:::i;24349:202::-;;;;;;;;;;-1:-1:-1;24349:202:0;;;;;:::i;:::-;;:::i;20634:21::-;;;;;;;;;;-1:-1:-1;20634:21:0;;;;-1:-1:-1;;;;;20634:21:0;;;34347:352;;;;;;;;;;-1:-1:-1;34347:352:0;;;;;:::i;:::-;;:::i;21041:33::-;;;;;;;;;;-1:-1:-1;21041:33:0;;;;;;;;35777:221;;;;;;;;;;-1:-1:-1;35777:221:0;;;;;:::i;:::-;;:::i;36258:191::-;;;;;;;;;;;;;:::i;21470:32::-;;;;;;;;;;;;;;;;34896:309;;;;;;;;;;-1:-1:-1;34896:309:0;;;;;:::i;:::-;;:::i;21358:31::-;;;;;;;;;;;;;;;;21159:37;;;;;;;;;;-1:-1:-1;21159:37:0;;;;;;;;;;;20532:28;;;;;;;;;;;;;;;;21435;;;;;;;;;;;;;;;;21121:31;;;;;;;;;;-1:-1:-1;21121:31:0;;;;;;;;;;;35213:350;;;;;;;;;;-1:-1:-1;35213:350:0;;;;;:::i;:::-;;:::i;15503:143::-;;;;;;;;;;-1:-1:-1;15503:143:0;;;;;:::i;:::-;;:::i;34707:86::-;;;;;;;;;;;;;:::i;25178:338::-;;;;;;;;;;-1:-1:-1;25178:338:0;;;;;:::i;:::-;;:::i;33777:562::-;;;;;;;;;;-1:-1:-1;33777:562:0;;;;;:::i;:::-;;:::i;20498:27::-;;;;;;;;;;;;;;;;38510:258;;;;;;;;;;;;;:::i;11306:147::-;;;;;;;;;;-1:-1:-1;11306:147:0;;;;;:::i;:::-;;:::i;15174:104::-;;;;;;;;;;;;;:::i;24559:206::-;;;;;;;;;;-1:-1:-1;24559:206:0;;;;;:::i;:::-;;:::i;36463:2039::-;;;;;;;;;;;;;:::i;25768:357::-;;;;;;;;;;-1:-1:-1;25768:357:0;;;;;:::i;:::-;;:::i;10949:49::-;;;;;;;;;;-1:-1:-1;10949:49:0;10994:4;10949:49;;34801:87;;;;;;;;;;;;;:::i;17083:475::-;;;;;;;;;;-1:-1:-1;17083:475:0;;;;;:::i;:::-;;:::i;15654:200::-;;;;;;;;;;-1:-1:-1;15654:200:0;;;;;:::i;:::-;;:::i;36010:236::-;;;;;;;;;;;;;:::i;26141:340::-;;;;;;;;;;-1:-1:-1;26141:340:0;;;;;:::i;:::-;;:::i;21761:57::-;;;;;;;;;;-1:-1:-1;21761:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20943:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20943:85:0;;26489:347;;;;;;;;;;-1:-1:-1;26489:347:0;;;;;:::i;:::-;;:::i;21081:33::-;;;;;;;;;;-1:-1:-1;21081:33:0;;;;;;;;;;;26848:184;;;;;;;;;;-1:-1:-1;26848:184:0;;;;;:::i;:::-;;:::i;20817:46::-;;;;;;;;;;-1:-1:-1;20817:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21276:39;;;;;;;;;;-1:-1:-1;21276:39:0;;;;;;;;12368:149;;;;;;;;;;-1:-1:-1;12368:149:0;;;;;:::i;:::-;;:::i;21324:27::-;;;;;;;;;;;;;;;;35571:190;;;;;;;;;;-1:-1:-1;35571:190:0;;;;;:::i;:::-;;:::i;15862:176::-;;;;;;;;;;-1:-1:-1;15862:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;16003:18:0;;;15976:7;16003:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15862:176;20692:33;;;;;;;;;;;;;;;;24830:100;;;;;;;;;;;;;:::i;20732:32::-;;;;;;;;;;-1:-1:-1;20732:32:0;;;;-1:-1:-1;;;;;20732:32:0;;;20872:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20872:64:0;;20773:37;;;;;;;;;;;;;;;;21396:30;;;;;;;;;;;;;;;;21509:31;;;;;;;;;;;;;;;;20567:24;;;;;;;;;;;;;;;;21549:34;;;;;;;;;;;;;;;;11094:204;11179:4;-1:-1:-1;;;;;;11203:47:0;;-1:-1:-1;;;11203:47:0;;:87;;-1:-1:-1;;;;;;;;;;705:40:0;;;11254:36;11196:94;11094:204;-1:-1:-1;;11094:204:0:o;15066:100::-;15120:13;15153:5;15146:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15066:100;:::o;16046:194::-;16154:4;16171:39;173:10;16194:7;16203:6;16171:8;:39::i;:::-;-1:-1:-1;16228:4:0;16046:194;;;;:::o;16248:529::-;16388:4;16405:36;16415:6;16423:9;16434:6;16405:9;:36::i;:::-;-1:-1:-1;;;;;16481:19:0;;16454:24;16481:19;;;:11;:19;;;;;;;;173:10;16481:33;;;;;;;;16547:26;;;;16525:116;;;;-1:-1:-1;;;16525:116:0;;6178:2:1;16525:116:0;;;6160:21:1;6217:2;6197:18;;;6190:30;6256:34;6236:18;;;6229:62;-1:-1:-1;;;6307:18:1;;;6300:38;6355:19;;16525:116:0;;;;;;;;;16677:57;16686:6;173:10;16727:6;16708:16;:25;16677:8;:57::i;:::-;-1:-1:-1;16765:4:0;;16248:529;-1:-1:-1;;;;16248:529:0:o;12213:147::-;12148:7;12175:12;;;:6;:12;;;;;:22;;;11050:16;11061:4;11050:10;:16::i;:::-;12327:25:::1;12338:4;12344:7;12327:10;:25::i;:::-;12213:147:::0;;;:::o;12525:218::-;-1:-1:-1;;;;;12621:23:0;;173:10;12621:23;12613:83;;;;-1:-1:-1;;;12613:83:0;;6587:2:1;12613:83:0;;;6569:21:1;6626:2;6606:18;;;6599:30;6665:34;6645:18;;;6638:62;-1:-1:-1;;;6716:18:1;;;6709:45;6771:19;;12613:83:0;6385:411:1;12613:83:0;12709:26;12721:4;12727:7;12709:11;:26::i;:::-;12525:218;;:::o;16785:290::-;173:10;16898:4;16987:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16987:34:0;;;;;;;;;;16898:4;;16915:130;;16965:7;;16987:47;;17024:10;;16987:47;:::i;:::-;16915:8;:130::i;24349:202::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24439:28:0;::::1;24431:56;;;::::0;-1:-1:-1;;;24431:56:0;;7607:2:1;24431:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24431:56:0::1;7405:339:1::0;24431:56:0::1;24498:45;-1:-1:-1::0;;;;;;;;;;;24528:14:0::1;24498:9;:45::i;:::-;24349:202:::0;:::o;34347:352::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34475:32:0;::::1;34453:120;;;::::0;-1:-1:-1;;;34453:120:0;;7951:2:1;34453:120:0::1;::::0;::::1;7933:21:1::0;7990:2;7970:18;;;7963:30;8029:34;8009:18;;;8002:62;-1:-1:-1;;;8080:18:1;;;8073:36;8126:19;;34453:120:0::1;7749:402:1::0;34453:120:0::1;34584:17;:47:::0;;-1:-1:-1;;;;;;34584:47:0::1;-1:-1:-1::0;;;;;34584:47:0;::::1;::::0;;::::1;::::0;;;34647:44:::1;::::0;::::1;::::0;-1:-1:-1;;34647:44:0::1;34347:352:::0;:::o;35777:221::-;22655:39;-1:-1:-1;;;;;;;;;;;22683:10:0;22655:7;:39::i;:::-;22633:109;;;;-1:-1:-1;;;22633:109:0;;;;;;;:::i;:::-;35890:9:::1;35885:106;35905:18:::0;;::::1;35885:106;;;35974:5;35945:14;:26;35960:7;;35968:1;35960:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35945:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35945:26:0;:34;;-1:-1:-1;;35945:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35925:3;::::1;::::0;::::1;:::i;:::-;;;;35885:106;;36258:191:::0;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;36359:82:::1;::::0;36322:12:::1;::::0;36367:10:::1;::::0;36391:21:::1;::::0;36322:12;36359:82;36322:12;36359:82;36391:21;36367:10;36359:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;36258:191:0:o;34896:309::-;22655:39;-1:-1:-1;;;;;;;;;;;22683:10:0;22655:7;:39::i;:::-;22633:109;;;;-1:-1:-1;;;22633:109:0;;;;;;;:::i;:::-;34993:18:::1;::::0;;;::::1;;;34971:111;;;;-1:-1:-1::0;;;34971:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35104:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35103:23;35095:62;;;::::0;-1:-1:-1;;;35095:62:0;;9601:2:1;35095:62:0::1;::::0;::::1;9583:21:1::0;9640:2;9620:18;;;9613:30;9679:28;9659:18;;;9652:56;9725:18;;35095:62:0::1;9399:350:1::0;35095:62:0::1;-1:-1:-1::0;;;;;35168:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;35168:29:0::1;35193:4;35168:29;::::0;;34896:309::o;35213:350::-;22655:39;-1:-1:-1;;;;;;;;;;;22683:10:0;22655:7;:39::i;:::-;22633:109;;;;-1:-1:-1;;;22633:109:0;;;;;;;:::i;:::-;35341:18:::1;::::0;;;::::1;;;35319:111;;;;-1:-1:-1::0;;;35319:111:0::1;;;;;;;:::i;:::-;35456:9;35451:105;35471:18:::0;;::::1;35451:105;;;35540:4;35511:14;:26;35526:7;;35534:1;35526:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35511:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35511:26:0;:33;;-1:-1:-1;;35511:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35491:3;::::1;::::0;::::1;:::i;:::-;;;;35451:105;;15503:143:::0;-1:-1:-1;;;;;15620:18:0;15593:7;15620:18;;;;;;;;;;;;15503:143::o;34707:86::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;34763:14:::1;:22:::0;;-1:-1:-1;;34763:22:0::1;::::0;;34707:86::o;25178:338::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;25302:4:::1;25297:155;;25359:6;::::0;-1:-1:-1;;;;;25359:6:0;;::::1;25349:16:::0;;::::1;::::0;25323:117:::1;;;::::0;-1:-1:-1;;;25323:117:0;;9956:2:1;25323:117:0::1;::::0;::::1;9938:21:1::0;9995:2;9975:18;;;9968:30;10034:34;10014:18;;;10007:62;-1:-1:-1;;;10085:18:1;;;10078:37;10132:19;;25323:117:0::1;9754:403:1::0;25323:117:0::1;-1:-1:-1::0;;;;;25462:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25462:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25178:338::o;33777:562::-;33891:10;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33922:20:0;::::1;33914:59;;;::::0;-1:-1:-1;;;33914:59:0;;10364:2:1;33914:59:0::1;::::0;::::1;10346:21:1::0;10403:2;10383:18;;;10376:30;10442:28;10422:18;;;10415:56;10488:18;;33914:59:0::1;10162:350:1::0;33914:59:0::1;-1:-1:-1::0;;;;;34006:23:0;::::1;34024:4;34006:23;;::::0;:41:::1;;-1:-1:-1::0;34034:13:0::1;::::0;::::1;::::0;::::1;;;34033:14;34006:41;33984:143;;;::::0;-1:-1:-1;;;33984:143:0;;10719:2:1;33984:143:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;10797:34;10777:18;;;10770:62;-1:-1:-1;;;10848:18:1;;;10841:50;10908:19;;33984:143:0::1;10517:416:1::0;33984:143:0::1;34165:39;::::0;-1:-1:-1;;;34165:39:0;;34198:4:::1;34165:39;::::0;::::1;1318:51:1::0;34138:24:0::1;::::0;-1:-1:-1;;;;;34165:24:0;::::1;::::0;::::1;::::0;1291:18:1;;34165:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34223:46;::::0;-1:-1:-1;;;34223:46:0;;-1:-1:-1;;;;;11319:32:1;;;34223:46:0::1;::::0;::::1;11301:51:1::0;11368:18;;;11361:34;;;34138:66:0;;-1:-1:-1;34223:23:0;;::::1;::::0;::::1;::::0;11274:18:1;;34223:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34285;::::0;;-1:-1:-1;;;;;11319:32:1;;11301:51;;11383:2;11368:18;;11361:34;;;34215:54:0;;-1:-1:-1;34285:46:0::1;::::0;11274:18:1;34285:46:0::1;;;;;;;33903:436;33777:562:::0;;;;:::o;38510:258::-;22655:39;-1:-1:-1;;;;;;;;;;;22683:10:0;22655:7;:39::i;:::-;22633:109;;;;-1:-1:-1;;;22633:109:0;;;;;;;:::i;:::-;38583:13:::1;::::0;::::1;::::0;::::1;;;38582:14;38574:50;;;::::0;-1:-1:-1;;;38574:50:0;;11858:2:1;38574:50:0::1;::::0;::::1;11840:21:1::0;11897:2;11877:18;;;11870:30;11936:25;11916:18;;;11909:53;11979:18;;38574:50:0::1;11656:347:1::0;38574:50:0::1;38635:13;:20:::0;;-1:-1:-1;;38666:18:0;;;;;38716:12:::1;38695:18;:33:::0;38744:16:::1;::::0;::::1;::::0;-1:-1:-1;;38744:16:0::1;38510:258::o:0;11306:147::-;11392:4;11416:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11416:29:0;;;;;;;;;;;;;;;11306:147::o;15174:104::-;15230:13;15263:7;15256:14;;;;;:::i;24559:206::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24652:28:0;::::1;24644:56;;;::::0;-1:-1:-1;;;24644:56:0;;7607:2:1;24644:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24644:56:0::1;7405:339:1::0;24644:56:0::1;24711:46;-1:-1:-1::0;;;;;;;;;;;24742:14:0::1;24711:10;:46::i;36463:2039::-:0;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;36529:13:::1;::::0;::::1;::::0;::::1;;;36528:14;36520:70;;;::::0;-1:-1:-1;;;36520:70:0;;12210:2:1;36520:70:0::1;::::0;::::1;12192:21:1::0;12249:2;12229:18;;;12222:30;12288:34;12268:18;;;12261:62;-1:-1:-1;;;12339:18:1;;;12332:41;12390:19;;36520:70:0::1;12008:407:1::0;36520:70:0::1;36608:18;36643:13;36660:1;36643:18:::0;36639:730:::1;;-1:-1:-1::0;36691:42:0::1;36639:730;;;36774:13;36791:8;36774:25:::0;36770:599:::1;;-1:-1:-1::0;36829:42:0::1;36770:599;;;36909:13;36926:2;36909:19:::0;36905:464:::1;;-1:-1:-1::0;36958:42:0::1;36905:464;;;37043:13;37060:2;37043:19:::0;37039:330:::1;;-1:-1:-1::0;37092:42:0::1;37039:330;;;37177:13;37194:5;37177:22:::0;37173:196:::1;;-1:-1:-1::0;37229:42:0::1;37173:196;;;37327:30;::::0;-1:-1:-1;;;37327:30:0;;12622:2:1;37327:30:0::1;::::0;::::1;12604:21:1::0;12661:2;12641:18;;;12634:30;-1:-1:-1;;;12680:18:1;;;12673:50;12740:18;;37327:30:0::1;12420:344:1::0;37173:196:0::1;37411:9;:34:::0;;-1:-1:-1;;;;;;37411:34:0::1;-1:-1:-1::0;;;;;37411:34:0;::::1;::::0;;::::1;::::0;;;37511:19:::1;::::0;;-1:-1:-1;;;37511:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;37411:34;37511:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37499:43:0::1;;37565:4;37585:9;;;;;;;;;-1:-1:-1::0;;;;;37585:9:0::1;-1:-1:-1::0;;;;;37585:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37499:113;::::0;-1:-1:-1;;;;;;37499:113:0::1;::::0;;;;;;-1:-1:-1;;;;;13255:15:1;;;37499:113:0::1;::::0;::::1;13237:34:1::0;13307:15;;13287:18;;;13280:43;13172:18;;37499:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37490:6;:122:::0;;-1:-1:-1;;;;;;37490:122:0::1;-1:-1:-1::0;;;;;37490:122:0;;;::::1;::::0;;::::1;::::0;;37625:49:::1;::::0;-1:-1:-1;37625:26:0::1;:49::i;:::-;37722:6;::::0;37685:51:::1;::::0;-1:-1:-1;;;;;37722:6:0::1;::::0;37685:28:::1;:51::i;:::-;37792:9;::::0;37757:52:::1;::::0;-1:-1:-1;;;;;37792:9:0::1;::::0;37757:26:::1;:52::i;:::-;37844:9;::::0;37820:41:::1;::::0;-1:-1:-1;;;;;37844:9:0::1;::::0;37820:15:::1;:41::i;:::-;37922:1;37898:21;:25;37876:110;;;::::0;-1:-1:-1;;;37876:110:0;;13536:2:1;37876:110:0::1;::::0;::::1;13518:21:1::0;13575:2;13555:18;;;13548:30;13614:34;13594:18;;;13587:62;-1:-1:-1;;;13665:18:1;;;13658:33;13708:19;;37876:110:0::1;13334:399:1::0;37876:110:0::1;38046:1;38019:24;38037:4;38019:9;:24::i;:::-;:28;37997:116;;;::::0;-1:-1:-1;;;37997:116:0;;13940:2:1;37997:116:0::1;::::0;::::1;13922:21:1::0;13979:2;13959:18;;;13952:30;14018:34;13998:18;;;13991:62;-1:-1:-1;;;14069:18:1;;;14062:36;14115:19;;37997:116:0::1;13738:402:1::0;37997:116:0::1;38169:9;::::0;38137:69:::1;::::0;38154:4:::1;::::0;-1:-1:-1;;;;;38169:9:0::1;38181:24;38154:4:::0;38181:9:::1;:24::i;38137:69::-;38219:9;::::0;-1:-1:-1;;;;;38219:9:0::1;:25;38252:21;38297:4;38317:24;38297:4:::0;38317:9:::1;:24::i;:::-;38356:1;38399::::0;38442:10:::1;38467:15;38219:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25768:357::-:0;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;25918:6:::1;::::0;-1:-1:-1;;;;;25918:6:0;;::::1;25910:14:::0;;::::1;::::0;25888:121:::1;;;::::0;-1:-1:-1;;;25888:121:0;;15270:2:1;25888:121:0::1;::::0;::::1;15252:21:1::0;15309:2;15289:18;;;15282:30;15348:34;15328:18;;;15321:62;15419:27;15399:18;;;15392:55;15464:19;;25888:121:0::1;15068:421:1::0;25888:121:0::1;26020:41;26049:4;26055:5;26020:28;:41::i;:::-;26077:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;26077:40:0;::::1;::::0;::::1;::::0;;;::::1;25768:357:::0;;:::o;34801:87::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;34859:14:::1;:21:::0;;-1:-1:-1;;34859:21:0::1;34876:4;34859:21;::::0;;34801:87::o;17083:475::-;173:10;17201:4;17245:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17245:34:0;;;;;;;;;;17312:35;;;;17290:122;;;;-1:-1:-1;;;17290:122:0;;15696:2:1;17290:122:0;;;15678:21:1;15735:2;15715:18;;;15708:30;15774:34;15754:18;;;15747:62;-1:-1:-1;;;15825:18:1;;;15818:35;15870:19;;17290:122:0;15494:401:1;17290:122:0;17448:67;173:10;17471:7;17499:15;17480:16;:34;17448:8;:67::i;:::-;-1:-1:-1;17546:4:0;;17083:475;-1:-1:-1;;;17083:475:0:o;15654:200::-;15765:4;15782:42;173:10;15806:9;15817:6;15782:9;:42::i;36010:236::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;36101:18:::1;::::0;;;::::1;;;36079:120;;;::::0;-1:-1:-1;;;36079:120:0;;16102:2:1;36079:120:0::1;::::0;::::1;16084:21:1::0;16141:2;16121:18;;;16114:30;16180:34;16160:18;;;16153:62;-1:-1:-1;;;16231:18:1;;;16224:50;16291:19;;36079:120:0::1;15900:416:1::0;36079:120:0::1;36212:18;:26:::0;;-1:-1:-1;;36212:26:0::1;::::0;;36010:236::o;26141:340::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;26267:16:::1;:33:::0;;;26311:15:::1;:31:::0;;;26368:34:::1;26329:13:::0;26286:14;26368:34:::1;:::i;:::-;26353:12;:49:::0;;;26437:2:::1;-1:-1:-1::0;26421:18:0::1;26413:60;;;::::0;-1:-1:-1;;;26413:60:0;;16523:2:1;26413:60:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26413:60:0::1;16321:353:1::0;26489:347:0;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;26616:17:::1;:34:::0;;;26661:16:::1;:32:::0;;;26720:36:::1;26680:13:::0;26636:14;26720:36:::1;:::i;:::-;26704:13;:52:::0;;;26792:2:::1;-1:-1:-1::0;26775:19:0::1;26767:61;;;::::0;-1:-1:-1;;;26767:61:0;;16523:2:1;26767:61:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26767:61:0::1;16321:353:1::0;26848:184:0;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26935:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;26935:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26990:34;;445:41:1;;;26990:34:0::1;::::0;418:18:1;26990:34:0::1;;;;;;;26848:184:::0;;:::o;12368:149::-;12148:7;12175:12;;;:6;:12;;;;;:22;;;11050:16;11061:4;11050:10;:16::i;:::-;12483:26:::1;12495:4;12501:7;12483:11;:26::i;35571:190::-:0;22655:39;-1:-1:-1;;;;;;;;;;;22683:10:0;22655:7;:39::i;:::-;22633:109;;;;-1:-1:-1;;;22633:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35656:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35648:64;;;::::0;-1:-1:-1;;;35648:64:0;;16881:2:1;35648:64:0::1;::::0;::::1;16863:21:1::0;16920:2;16900:18;;;16893:30;16959:31;16939:18;;;16932:59;17008:18;;35648:64:0::1;16679:353:1::0;35648:64:0::1;-1:-1:-1::0;;;;;35723:22:0::1;35748:5;35723:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;35723:30:0::1;::::0;;35571:190::o;24830:100::-;22513:33;-1:-1:-1;;;;;;;;;;;22535:10:0;22513:7;:33::i;:::-;22505:59;;;;-1:-1:-1;;;22505:59:0;;;;;;;:::i;:::-;24894:20:::1;:28:::0;;-1:-1:-1;;24894:28:0::1;::::0;;24830:100::o;18549:380::-;-1:-1:-1;;;;;18685:19:0;;18677:68;;;;-1:-1:-1;;;18677:68:0;;17239:2:1;18677:68:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:34;17412:19;;18677:68:0;17037:400:1;18677:68:0;-1:-1:-1;;;;;18764:21:0;;18756:68;;;;-1:-1:-1;;;18756:68:0;;17644:2:1;18756:68:0;;;17626:21:1;17683:2;17663:18;;;17656:30;17722:34;17702:18;;;17695:62;-1:-1:-1;;;17773:18:1;;;17766:32;17815:19;;18756:68:0;17442:398:1;18756:68:0;-1:-1:-1;;;;;18837:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18889:32;;2234:25:1;;;18889:32:0;;2207:18:1;18889:32:0;;;;;;;18549:380;;;:::o;27040:4356::-;-1:-1:-1;;;;;27172:18:0;;27164:68;;;;-1:-1:-1;;;27164:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27251:16:0;;27243:64;;;;-1:-1:-1;;;27243:64:0;;;;;;;:::i;:::-;27335:1;27326:6;:10;27318:52;;;;-1:-1:-1;;;27318:52:0;;18857:2:1;27318:52:0;;;18839:21:1;18896:2;18876:18;;;18869:30;18935:31;18915:18;;;18908:59;18984:18;;27318:52:0;18655:353:1;27318:52:0;27388:13;;;;;;;27383:329;;-1:-1:-1;;;;;27444:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27473:23:0;;;;;;:19;:23;;;;;;;;27444:52;27418:136;;;;-1:-1:-1;;;27418:136:0;;19215:2:1;27418:136:0;;;19197:21:1;19254:2;19234:18;;;19227:30;-1:-1:-1;;;19273:18:1;;;19266:52;19335:18;;27418:136:0;19013:346:1;27418:136:0;27383:329;;;-1:-1:-1;;;;;27614:20:0;;;;;;:14;:20;;;;;;;;27613:21;27587:113;;;;-1:-1:-1;;;27587:113:0;;19566:2:1;27587:113:0;;;19548:21:1;19605:2;19585:18;;;19578:30;19644:32;19624:18;;;19617:60;19694:18;;27587:113:0;19364:354:1;27587:113:0;27728:14;;;;27724:2060;;;-1:-1:-1;;;;;27763:21:0;;27777:6;27763:21;;;;:68;;-1:-1:-1;;;;;;27806:25:0;;;;;;:19;:25;;;;;;;;27805:26;27763:68;:113;;;;-1:-1:-1;;;;;;27853:23:0;;;;;;:19;:23;;;;;;;;27852:24;27763:113;27759:2014;;;27915:20;;;;27911:692;;;27978:9;;-1:-1:-1;;;;;27964:24:0;;;27978:9;;27964:24;;;;:49;;-1:-1:-1;28006:6:0;;-1:-1:-1;;;;;27992:21:0;;;28006:6;;27992:21;;27964:49;27960:624;;;28155:16;28170:1;28155:12;:16;:::i;:::-;28109:9;28080:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;28276:16:0;28291:1;28276:12;:16;:::i;:::-;-1:-1:-1;;;;;28208:32:0;;;;;;:28;:32;;;;;;:84;28080:212;28042:363;;;;-1:-1:-1;;;28042:363:0;;20058:2:1;28042:363:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:51;20248:19;;28042:363:0;19856:417:1;28042:363:0;28461:9;28432:39;;;;:28;:39;;;;;;28474:12;28432:54;;;;-1:-1:-1;;;;;28513:32:0;;;;;;:47;27960:624;-1:-1:-1;;;;;28677:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28734:35:0;;;;;;:31;:35;;;;;;;;28733:36;28677:92;28651:1107;;;28856:12;;28846:6;:22;;28812:148;;;;-1:-1:-1;;;28812:148:0;;20480:2:1;28812:148:0;;;20462:21:1;20519:2;20499:18;;;20492:30;20558:34;20538:18;;;20531:62;-1:-1:-1;;;20609:18:1;;;20602:38;20657:19;;28812:148:0;20278:404:1;28812:148:0;29043:9;;29026:13;29036:2;29026:9;:13::i;:::-;29017:22;;:6;:22;:::i;:::-;:35;;28983:140;;;;-1:-1:-1;;;28983:140:0;;20889:2:1;28983:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;28983:140:0;20687:343:1;28983:140:0;28651:1107;;;-1:-1:-1;;;;;29221:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;29276:37:0;;;;;;:31;:37;;;;;;;;29275:38;29221:92;29195:563;;;29400:13;;29390:6;:23;;29356:151;;;;-1:-1:-1;;;29356:151:0;;21237:2:1;29356:151:0;;;21219:21:1;21276:2;21256:18;;;21249:30;21315:34;21295:18;;;21288:62;-1:-1:-1;;;21366:18:1;;;21359:40;21416:19;;29356:151:0;21035:406:1;29195:563:0;-1:-1:-1;;;;;29538:35:0;;;;;;:31;:35;;;;;;;;29533:225;;29658:9;;29641:13;29651:2;29641:9;:13::i;:::-;29632:22;;:6;:22;:::i;:::-;:35;;29598:140;;;;-1:-1:-1;;;29598:140:0;;20889:2:1;29598:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29598:140:0;20687:343:1;29598:140:0;29796:28;29827:24;29845:4;29827:9;:24::i;:::-;29903:18;;29796:55;;-1:-1:-1;29879:42:0;;;;;;;29952:22;;-1:-1:-1;29963:11:0;;;;;;;29952:22;:35;;;;-1:-1:-1;29979:8:0;;-1:-1:-1;;;29979:8:0;;;;29978:9;29952:35;:68;;;;-1:-1:-1;;;;;;29991:29:0;;;;;;:25;:29;;;;;;;;29952:68;29934:196;;;30047:8;:15;;-1:-1:-1;;;;30047:15:0;-1:-1:-1;;;30047:15:0;;;30077:10;:8;:10::i;:::-;30102:8;:16;;-1:-1:-1;;;;30102:16:0;;;29934:196;-1:-1:-1;;;;;30261:25:0;;30142:12;30261:25;;;:19;:25;;;;;;30157:4;;30261:25;;;:52;;-1:-1:-1;;;;;;30290:23:0;;;;;;:19;:23;;;;;;;;30261:52;30257:100;;;-1:-1:-1;30340:5:0;30257:100;30369:12;30474:7;30470:873;;;-1:-1:-1;;;;;30530:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30579:1;30563:13;;:17;30530:50;30526:668;;;30635:3;30618:13;;30609:6;:22;;;;:::i;:::-;30608:30;;;;:::i;:::-;30601:37;;30707:13;;30687:16;;30680:4;:23;;;;:::i;:::-;30679:41;;;;:::i;:::-;30657:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30833:13:0;;30791:17;;30784:24;;:4;:24;:::i;:::-;30783:63;;;;:::i;:::-;30739:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;30526:668:0;;-1:-1:-1;30526:668:0;;-1:-1:-1;;;;;30908:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;30958:1;30943:12;;:16;30908:51;30904:290;;;31013:3;30997:12;;30988:6;:21;;;;:::i;:::-;30987:29;;;;:::i;:::-;30980:36;;31084:12;;31065:15;;31058:4;:22;;;;:::i;:::-;31057:39;;;;:::i;:::-;31035:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31166:12:0;;31146:16;;31139:23;;:4;:23;:::i;:::-;31138:40;;;;:::i;:::-;31115:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30904:290:0;31214:8;;31210:91;;31243:42;31259:4;31273;31280;31243:15;:42::i;:::-;31317:14;31327:4;31317:14;;:::i;:::-;;;30470:873;31355:33;31371:4;31377:2;31381:6;31355:15;:33::i;:::-;27153:4243;;;;27040:4356;;;:::o;11461:105::-;11528:30;11539:4;173:10;11528;:30::i;13130:238::-;13214:22;13222:4;13228:7;13214;:22::i;:::-;13209:152;;13253:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13253:29:0;;;;;;;;;:36;;-1:-1:-1;;13253:36:0;13285:4;13253:36;;;13336:12;173:10;;93:98;13336:12;-1:-1:-1;;;;;13309:40:0;13327:7;-1:-1:-1;;;;;13309:40:0;13321:4;13309:40;;;;;;;;;;13130:238;;:::o;13376:239::-;13460:22;13468:4;13474:7;13460;:22::i;:::-;13456:152;;;13531:5;13499:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13499:29:0;;;;;;;;;;:37;;-1:-1:-1;;13499:37:0;;;13556:40;173:10;;13499:12;;13556:40;;13531:5;13556:40;13376:239;;:::o;24938:232::-;-1:-1:-1;;;;;25051:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;25051:52:0;;;;;;;;;;25119:43;;22009:51:1;;;22076:18;;;22069:50;25119:43:0;;21982:18:1;25119:43:0;;;;;;;24938:232;;:::o;25524:236::-;-1:-1:-1;;;;;25607:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25607:39:0;;;;;;;25657;25607:31;:39;25657:26;:39::i;32500:1269::-;32539:23;32565:24;32583:4;32565:9;:24::i;:::-;32539:50;;32600:25;32649:19;;32628:18;;:40;;;;:::i;:::-;32600:68;-1:-1:-1;32685:20:0;;;:46;;-1:-1:-1;32709:22:0;;32685:46;32681:85;;;32748:7;;32500:1269::o;32681:85::-;32800:18;;:23;;32821:2;32800:23;:::i;:::-;32782:15;:41;32778:115;;;32858:18;;:23;;32879:2;32858:23;:::i;:::-;32840:41;;32778:115;32905:12;32979:23;33092:1;33059:17;33024:18;;33006:15;:36;;;;:::i;:::-;33005:71;;;;:::i;:::-;:88;;;;:::i;:::-;32979:114;-1:-1:-1;33106:51:0;33123:33;32979:114;33123:15;:33;:::i;:::-;33106:16;:51::i;:::-;33371:18;;33191:21;;;;33170:18;;33371:22;;33392:1;;33371:22;:::i;:::-;33350:44;;:17;:44;:::i;:::-;33313:19;;33300:32;;:10;:32;:::i;:::-;33299:96;;;;:::i;:::-;33272:123;-1:-1:-1;33408:35:0;33272:123;33408:35;;:::i;:::-;33477:1;33456:18;:22;;;33489:19;:23;33408:35;-1:-1:-1;33529:19:0;;;;;:42;;;33570:1;33552:15;:19;33529:42;33525:121;;;33588:46;33601:15;33618;33588:12;:46::i;:::-;33680:17;;33672:89;;-1:-1:-1;;;;;33680:17:0;;;;33725:21;;33672:89;;;;33725:21;33680:17;33672:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;32500:1269:0:o;17566:651::-;-1:-1:-1;;;;;17706:20:0;;17698:70;;;;-1:-1:-1;;;17698:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17787:23:0;;17779:71;;;;-1:-1:-1;;;17779:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17887:17:0;;17863:21;17887:17;;;;;;;;;;;17937:23;;;;17915:111;;;;-1:-1:-1;;;17915:111:0;;22332:2:1;17915:111:0;;;22314:21:1;22371:2;22351:18;;;22344:30;22410:34;22390:18;;;22383:62;-1:-1:-1;;;22461:18:1;;;22454:36;22507:19;;17915:111:0;22130:402:1;17915:111:0;-1:-1:-1;;;;;18062:17:0;;;:9;:17;;;;;;;;;;;18082:22;;;18062:42;;18126:20;;;;;;;;:30;;18098:6;;18062:9;18126:30;;18098:6;;18126:30;:::i;:::-;;;;;;;;18191:9;-1:-1:-1;;;;;18174:35:0;18183:6;-1:-1:-1;;;;;18174:35:0;;18202:6;18174:35;;;;2234:25:1;;2222:2;2207:18;;2088:177;18174:35:0;;;;;;;;17687:530;17566:651;;;:::o;11574:492::-;11663:22;11671:4;11677:7;11663;:22::i;:::-;11658:401;;11851:28;11871:7;11851:19;:28::i;:::-;11952:38;11980:4;11987:2;11952:19;:38::i;:::-;11756:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11756:257:0;;;;;;;;;;-1:-1:-1;;;11702:345:0;;;;;;;:::i;31404:571::-;31554:16;;;31568:1;31554:16;;;;;;;;31530:21;;31554:16;;;;;;;;;;-1:-1:-1;31554:16:0;31530:40;;31599:4;31581;31586:1;31581:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31581:23:0;;;:7;;;;;;;;;;:23;;;;31625:9;;:16;;;-1:-1:-1;;;31625:16:0;;;;:9;;;;;:14;;:16;;;;;31581:7;;31625:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31615:4;31620:1;31615:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31615:26:0;;;:7;;;;;;;;;:26;31686:9;;31654:56;;31671:4;;31686:9;31698:11;31654:8;:56::i;:::-;31749:9;;:218;;-1:-1:-1;;;31749:218:0;;-1:-1:-1;;;;;31749:9:0;;;;:60;;:218;;31824:11;;31749:9;;31894:4;;31921;;31941:15;;31749:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31459:516;31404:571;:::o;31983:509::-;32163:9;;32131:56;;32148:4;;-1:-1:-1;;;;;32163:9:0;32175:11;32131:8;:56::i;:::-;32230:9;;:254;;-1:-1:-1;;;32230:254:0;;-1:-1:-1;;;;;32230:9:0;;;;:25;;32263:9;;32230:254;;32296:4;;32316:11;;32230:9;;;;32436:6;;32458:15;;32230:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31983:509;;:::o;10408:151::-;10466:13;10499:52;-1:-1:-1;;;;;10511:22:0;;8945:2;9953:447;10028:13;10054:19;10086:10;10090:6;10086:1;:10;:::i;:::-;:14;;10099:1;10086:14;:::i;:::-;10076:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10076:25:0;;10054:47;;-1:-1:-1;;;10112:6:0;10119:1;10112:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10112:15:0;;;;;;;;;-1:-1:-1;;;10138:6:0;10145:1;10138:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10138:15:0;;;;;;;;-1:-1:-1;10169:9:0;10181:10;10185:6;10181:1;:10;:::i;:::-;:14;;10194:1;10181:14;:::i;:::-;10169:26;;10164:131;10201:1;10197;:5;10164:131;;;-1:-1:-1;;;10245:5:0;10253:3;10245:11;10236:21;;;;;;;:::i;:::-;;;;10224:6;10231:1;10224:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;10224:33:0;;;;;;;;-1:-1:-1;10282:1:0;10272:11;;;;;10204:3;;;:::i;:::-;;;10164:131;;;-1:-1:-1;10313:10:0;;10305:55;;;;-1:-1:-1;;;10305:55:0;;24814:2:1;10305:55:0;;;24796:21:1;;;24833:18;;;24826:30;24892:34;24872:18;;;24865:62;24944:18;;10305:55:0;24612:356:1;10305:55:0;10385:6;9953:447;-1:-1:-1;;;9953:447:0:o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:1;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:1:o;1380:131::-;-1:-1:-1;;;;;1455:31:1;;1445:42;;1435:70;;1501:1;1498;1491:12;1516:315;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;1821:2;1806:18;;;;1793:32;;-1:-1:-1;;;1516:315:1:o;1836:247::-;1895:6;1948:2;1936:9;1927:7;1923:23;1919:32;1916:52;;;1964:1;1961;1954:12;1916:52;2003:9;1990:23;2022:31;2047:5;2022:31;:::i;2270:456::-;2347:6;2355;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2471:9;2458:23;2490:31;2515:5;2490:31;:::i;:::-;2540:5;-1:-1:-1;2597:2:1;2582:18;;2569:32;2610:33;2569:32;2610:33;:::i;:::-;2270:456;;2662:7;;-1:-1:-1;;;2716:2:1;2701:18;;;;2688:32;;2270:456::o;2731:180::-;2790:6;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;-1:-1:-1;2882:23:1;;2731:180;-1:-1:-1;2731:180:1:o;3098:315::-;3166:6;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3279:9;3266:23;3256:33;;3339:2;3328:9;3324:18;3311:32;3352:31;3377:5;3352:31;:::i;:::-;3402:5;3392:15;;;3098:315;;;;;:::o;3815:615::-;3901:6;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4018:9;4005:23;4047:18;4088:2;4080:6;4077:14;4074:34;;;4104:1;4101;4094:12;4074:34;4142:6;4131:9;4127:22;4117:32;;4187:7;4180:4;4176:2;4172:13;4168:27;4158:55;;4209:1;4206;4199:12;4158:55;4249:2;4236:16;4275:2;4267:6;4264:14;4261:34;;;4291:1;4288;4281:12;4261:34;4344:7;4339:2;4329:6;4326:1;4322:14;4318:2;4314:23;4310:32;4307:45;4304:65;;;4365:1;4362;4355:12;4304:65;4396:2;4388:11;;;;;4418:6;;-1:-1:-1;3815:615:1;;-1:-1:-1;;;;3815:615:1:o;4435:118::-;4521:5;4514:13;4507:21;4500:5;4497:32;4487:60;;4543:1;4540;4533:12;4558:382;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4739:9;4726:23;4758:31;4783:5;4758:31;:::i;:::-;4808:5;-1:-1:-1;4865:2:1;4850:18;;4837:32;4878:30;4837:32;4878:30;:::i;4945:388::-;5013:6;5021;5074:2;5062:9;5053:7;5049:23;5045:32;5042:52;;;5090:1;5087;5080:12;5042:52;5129:9;5116:23;5148:31;5173:5;5148:31;:::i;:::-;5198:5;-1:-1:-1;5255:2:1;5240:18;;5227:32;5268:33;5227:32;5268:33;:::i;5338:248::-;5406:6;5414;5467:2;5455:9;5446:7;5442:23;5438:32;5435:52;;;5483:1;5480;5473:12;5435:52;-1:-1:-1;;5506:23:1;;;5576:2;5561:18;;;5548:32;;-1:-1:-1;5338:248:1:o;5591:380::-;5670:1;5666:12;;;;5713;;;5734:61;;5788:4;5780:6;5776:17;5766:27;;5734:61;5841:2;5833:6;5830:14;5810:18;5807:38;5804:161;;5887:10;5882:3;5878:20;5875:1;5868:31;5922:4;5919:1;5912:15;5950:4;5947:1;5940:15;5804:161;;5591:380;;;:::o;6801:127::-;6862:10;6857:3;6853:20;6850:1;6843:31;6893:4;6890:1;6883:15;6917:4;6914:1;6907:15;6933:125;6998:9;;;7019:10;;;7016:36;;;7032:18;;:::i;7063:337::-;7265:2;7247:21;;;7304:2;7284:18;;;7277:30;-1:-1:-1;;;7338:2:1;7323:18;;7316:43;7391:2;7376:18;;7063:337::o;8156:344::-;8358:2;8340:21;;;8397:2;8377:18;;;8370:30;-1:-1:-1;;;8431:2:1;8416:18;;8409:50;8491:2;8476:18;;8156:344::o;8505:127::-;8566:10;8561:3;8557:20;8554:1;8547:31;8597:4;8594:1;8587:15;8621:4;8618:1;8611:15;8637:135;8676:3;8697:17;;;8694:43;;8717:18;;:::i;:::-;-1:-1:-1;8764:1:1;8753:13;;8637:135::o;8987:407::-;9189:2;9171:21;;;9228:2;9208:18;;;9201:30;9267:34;9262:2;9247:18;;9240:62;-1:-1:-1;;;9333:2:1;9318:18;;9311:41;9384:3;9369:19;;8987:407::o;10938:184::-;11008:6;11061:2;11049:9;11040:7;11036:23;11032:32;11029:52;;;11077:1;11074;11067:12;11029:52;-1:-1:-1;11100:16:1;;10938:184;-1:-1:-1;10938:184:1:o;11406:245::-;11473:6;11526:2;11514:9;11505:7;11501:23;11497:32;11494:52;;;11542:1;11539;11532:12;11494:52;11574:9;11568:16;11593:28;11615:5;11593:28;:::i;12769:251::-;12839:6;12892:2;12880:9;12871:7;12867:23;12863:32;12860:52;;;12908:1;12905;12898:12;12860:52;12940:9;12934:16;12959:31;12984:5;12959:31;:::i;14145:607::-;-1:-1:-1;;;;;14504:15:1;;;14486:34;;14551:2;14536:18;;14529:34;;;;14594:2;14579:18;;14572:34;;;;14637:2;14622:18;;14615:34;;;;14686:15;;;14680:3;14665:19;;14658:44;14466:3;14718:19;;14711:35;;;;14435:3;14420:19;;14145:607::o;14757:306::-;14845:6;14853;14861;14914:2;14902:9;14893:7;14889:23;14885:32;14882:52;;;14930:1;14927;14920:12;14882:52;14959:9;14953:16;14943:26;;15009:2;14998:9;14994:18;14988:25;14978:35;;15053:2;15042:9;15038:18;15032:25;15022:35;;14757:306;;;;;:::o;17845:401::-;18047:2;18029:21;;;18086:2;18066:18;;;18059:30;18125:34;18120:2;18105:18;;18098:62;-1:-1:-1;;;18191:2:1;18176:18;;18169:35;18236:3;18221:19;;17845:401::o;18251:399::-;18453:2;18435:21;;;18492:2;18472:18;;;18465:30;18531:34;18526:2;18511:18;;18504:62;-1:-1:-1;;;18597:2:1;18582:18;;18575:33;18640:3;18625:19;;18251:399::o;19723:128::-;19790:9;;;19811:11;;;19808:37;;;19825:18;;:::i;21446:168::-;21519:9;;;21550;;21567:15;;;21561:22;;21547:37;21537:71;;21588:18;;:::i;21619:217::-;21659:1;21685;21675:132;;21729:10;21724:3;21720:20;21717:1;21710:31;21764:4;21761:1;21754:15;21792:4;21789:1;21782:15;21675:132;-1:-1:-1;21821:9:1;;21619:217::o;22537:812::-;22948:25;22943:3;22936:38;22918:3;23003:6;22997:13;23019:75;23087:6;23082:2;23077:3;23073:12;23066:4;23058:6;23054:17;23019:75;:::i;:::-;-1:-1:-1;;;23153:2:1;23113:16;;;23145:11;;;23138:40;23203:13;;23225:76;23203:13;23287:2;23279:11;;23272:4;23260:17;;23225:76;:::i;:::-;23321:17;23340:2;23317:26;;22537:812;-1:-1:-1;;;;22537:812:1:o;23354:127::-;23415:10;23410:3;23406:20;23403:1;23396:31;23446:4;23443:1;23436:15;23470:4;23467:1;23460:15;23486:980;23748:4;23796:3;23785:9;23781:19;23827:6;23816:9;23809:25;23853:2;23891:6;23886:2;23875:9;23871:18;23864:34;23934:3;23929:2;23918:9;23914:18;23907:31;23958:6;23993;23987:13;24024:6;24016;24009:22;24062:3;24051:9;24047:19;24040:26;;24101:2;24093:6;24089:15;24075:29;;24122:1;24132:195;24146:6;24143:1;24140:13;24132:195;;;24211:13;;-1:-1:-1;;;;;24207:39:1;24195:52;;24302:15;;;;24267:12;;;;24243:1;24161:9;24132:195;;;-1:-1:-1;;;;;;;24383:32:1;;;;24378:2;24363:18;;24356:60;-1:-1:-1;;;24447:3:1;24432:19;24425:35;24344:3;23486:980;-1:-1:-1;;;23486:980:1:o;24471:136::-;24510:3;24538:5;24528:39;;24547:18;;:::i;:::-;-1:-1:-1;;;24583:18:1;;24471:136::o

Swarm Source

ipfs://d90e0023bc80598a1a4545a4b0ff79b4bf0fc4c6b30733e2f6c3935b4550a60b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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