ETH Price: $1,933.34 (-4.03%)
 

More Info

Private Name Tags

ContractCreator

TokenTracker

Opal (OPAL) ($0.0468)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve245509722026-02-27 21:31:593 hrs ago1772227919IN
Opal: OPAL Token
0 ETH0.000101292.15369816
Transfer245495062026-02-27 16:37:358 hrs ago1772210255IN
Opal: OPAL Token
0 ETH0.000058191.24411876
Transfer245494952026-02-27 16:35:238 hrs ago1772210123IN
Opal: OPAL Token
0 ETH0.000083231.21277158
Transfer245419612026-02-26 15:22:3533 hrs ago1772119355IN
Opal: OPAL Token
0 ETH0.000090021.3113206
Approve245290432026-02-24 20:06:353 days ago1771963595IN
Opal: OPAL Token
0 ETH0.000002910.06209274
Approve245212722026-02-23 18:06:474 days ago1771870007IN
Opal: OPAL Token
0 ETH0.000016850.35622918
Approve245096662026-02-22 3:17:595 days ago1771730279IN
Opal: OPAL Token
0 ETH0.000001580.03361847
Transfer245066872026-02-21 17:18:356 days ago1771694315IN
Opal: OPAL Token
0 ETH0.000081662.04648748
Transfer244923712026-02-19 17:25:118 days ago1771521911IN
Opal: OPAL Token
0 ETH0.000102842.19874106
Approve244919122026-02-19 15:52:598 days ago1771516379IN
Opal: OPAL Token
0 ETH0.000105062.2237672
Approve244919062026-02-19 15:51:478 days ago1771516307IN
Opal: OPAL Token
0 ETH0.000059612.19632195
Approve244918962026-02-19 15:49:478 days ago1771516187IN
Opal: OPAL Token
0 ETH0.000060662.23493726
Approve244918902026-02-19 15:48:358 days ago1771516115IN
Opal: OPAL Token
0 ETH0.000105552.2437652
Approve244865722026-02-18 22:00:239 days ago1771452023IN
Opal: OPAL Token
0 ETH0.000003010.06370348
Approve244856042026-02-18 18:46:119 days ago1771440371IN
Opal: OPAL Token
0 ETH0.000016460.35049595
Approve244840242026-02-18 13:29:119 days ago1771421351IN
Opal: OPAL Token
0 ETH0.000004170.08866549
Approve244785642026-02-17 19:12:3510 days ago1771355555IN
Opal: OPAL Token
0 ETH0.000105012.23282239
Approve244750632026-02-17 7:29:3510 days ago1771313375IN
Opal: OPAL Token
0 ETH0.000005170.10943677
Approve244744932026-02-17 5:34:3510 days ago1771306475IN
Opal: OPAL Token
0 ETH0.000003230.12924542
Transfer244707932026-02-16 17:11:3511 days ago1771261895IN
Opal: OPAL Token
0 ETH0.000130652.04548553
Approve244701512026-02-16 15:02:4711 days ago1771254167IN
Opal: OPAL Token
0 ETH0.00000560.11922292
Approve244695302026-02-16 12:58:1111 days ago1771246691IN
Opal: OPAL Token
0 ETH0.000004950.10534599
Approve244687342026-02-16 10:18:2311 days ago1771237103IN
Opal: OPAL Token
0 ETH0.000096062.03314282
Approve244602492026-02-15 5:56:1112 days ago1771134971IN
Opal: OPAL Token
0 ETH0.000001940.04110219
Approve244561882026-02-14 16:20:4713 days ago1771086047IN
Opal: OPAL Token
0 ETH0.000102012.16911458
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer244785642026-02-17 19:12:3510 days ago1771355555
Opal: OPAL Token
1.24667272 ETH
Transfer244785642026-02-17 19:12:3510 days ago1771355555
Opal: OPAL Token
1.24667272 ETH
Transfer244768692026-02-17 13:31:4710 days ago1771335107
Opal: OPAL Token
1.24667272 ETH
Transfer244768692026-02-17 13:31:4710 days ago1771335107
Opal: OPAL Token
1.24667272 ETH
Transfer244768682026-02-17 13:31:3510 days ago1771335095
Opal: OPAL Token
1.24667272 ETH
Transfer244768682026-02-17 13:31:3510 days ago1771335095
Opal: OPAL Token
1.24667272 ETH
Transfer244768622026-02-17 13:30:2310 days ago1771335023
Opal: OPAL Token
1.24667272 ETH
Transfer244768622026-02-17 13:30:2310 days ago1771335023
Opal: OPAL Token
1.24667272 ETH
Transfer244768592026-02-17 13:29:4710 days ago1771334987
Opal: OPAL Token
1.24667272 ETH
Transfer244768592026-02-17 13:29:4710 days ago1771334987
Opal: OPAL Token
1.24667272 ETH
Transfer244768522026-02-17 13:28:2310 days ago1771334903
Opal: OPAL Token
1.24667272 ETH
Transfer244768522026-02-17 13:28:2310 days ago1771334903
Opal: OPAL Token
1.24667272 ETH
Transfer244768512026-02-17 13:28:1110 days ago1771334891
Opal: OPAL Token
1.24667272 ETH
Transfer244768512026-02-17 13:28:1110 days ago1771334891
Opal: OPAL Token
1.24667272 ETH
Transfer244068112026-02-07 18:43:3520 days ago1770489815
Opal: OPAL Token
1.1651666 ETH
Transfer244068112026-02-07 18:43:3520 days ago1770489815
Opal: OPAL Token
1.1651666 ETH
Transfer243916472026-02-05 15:53:3522 days ago1770306815
Opal: OPAL Token
1.2295093 ETH
Transfer243916472026-02-05 15:53:3522 days ago1770306815
Opal: OPAL Token
1.2295093 ETH
Transfer243565642026-01-31 18:11:4727 days ago1769883107
Opal: OPAL Token
1.69326339 ETH
Transfer243565642026-01-31 18:11:4727 days ago1769883107
Opal: OPAL Token
1.69326339 ETH
Transfer243210022026-01-26 19:10:3532 days ago1769454635
Opal: OPAL Token
1.25863414 ETH
Transfer243210022026-01-26 19:10:3532 days ago1769454635
Opal: OPAL Token
1.25863414 ETH
Transfer242352082026-01-14 20:03:1144 days ago1768420991
Opal: OPAL Token
1.19997039 ETH
Transfer242352082026-01-14 20:03:1144 days ago1768420991
Opal: OPAL Token
1.19997039 ETH
Transfer241827562026-01-07 12:19:1151 days ago1767788351
Opal: OPAL Token
1.20630748 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Opal

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-09-30
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.30;

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    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 returns (string memory) {
        return _name;
    }

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

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

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

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

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

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

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

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

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

        emit Transfer(from, to, value);
    }

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

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

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

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

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

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

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

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

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

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

interface IUniswapV2Router {
    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;
}

contract Opal is Ownable, ERC20 {
    IUniswapV2Router public immutable swapRouter;

    address public constant ZERO_ADDRESS = address(0);

    address public immutable swapPair;
    address public taxWallet;

    bool public feesEnabled;
    bool private inSwapProcess;
    bool public isActivated;

    uint256 public activationBlock;
    uint256 public activationTime;

    uint256 private lastSwapBlock;

    // Basis points constants (1 basis point = 0.01%)
    uint256 public constant BASIS_POINTS = 10000;  // 100% = 10000 basis points
    uint256 public constant MAX_TOTAL_FEE_BPS = 2500; // 25%

    uint256 public tokensForSwap;
    uint256 public buyTaxBps;  // Buy tax in basis points
    uint256 public sellTaxBps; // Sell tax in basis points

    mapping(address => bool) public excludedFromFees;
    mapping(address => bool) public marketPairs;

    event Activation();
    event TaxWalletUpdated(address newWallet, address oldWallet);
    event FeesStatusChanged(bool status);
    event TokensForSwapUpdated(uint256 newValue, uint256 oldValue);
    event BuyTaxUpdated(uint256 newValueBps, uint256 oldValueBps);
    event SellTaxUpdated(uint256 newValueBps, uint256 oldValueBps);
    event ExcludedFromFees(address account, bool isExcluded);
    event MarketPairStatusUpdated(address pair, bool value);

    error AlreadyActivated();
    error InvalidAddress();
    error AmountTooSmall();
    error AmountTooLarge();
    error FeeTooHigh();
    error TaxCanOnlyDecrease();
    error PairAlreadySet();
    error NotActivated();

    modifier lockSwapProcess() {
        inSwapProcess = true;
        _;
        inSwapProcess = false;
    }

    constructor() Ownable(msg.sender) ERC20("Opal", "OPAL") {
        address owner = msg.sender;
        _mint(owner, 1_000_000_000 ether);

        // Set wallet addresses
        taxWallet = 0x1e041546A65537Cb6467A8E509172E3853E70b8A;

        tokensForSwap = 50000 ether;  // 50k tokens

        feesEnabled = true;

        buyTaxBps = 499;   // 499 basis points = 4.99%
        sellTaxBps = 1000;  // 1000 basis points = 10%

        swapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(
            address(this),
            swapRouter.WETH()
        );

        SetMarketPair(swapPair, true);
        _approve(address(this), address(swapRouter), type(uint256).max);
        _excludeFromFees(address(this), true);
        _excludeFromFees(owner, true);
        _excludeFromFees(taxWallet, true);
    }

    receive() external payable {}

    function _transferOwnership(address newOwner) internal override {
        address oldOwner = owner();
        if (oldOwner != ZERO_ADDRESS) {
            _excludeFromFees(oldOwner, false);
        }
        _excludeFromFees(newOwner, true);
        super._transferOwnership(newOwner);
    }

    function enableTrading() external onlyOwner {
        require(!isActivated, AlreadyActivated());
        isActivated = true;
        activationBlock = block.number;
        activationTime = block.timestamp;
        emit Activation();
    }

    function updateTaxWallet(address _taxWallet) external onlyOwner {
        require(_taxWallet != ZERO_ADDRESS, InvalidAddress());
        address oldWallet = taxWallet;
        taxWallet = _taxWallet;
        emit TaxWalletUpdated(taxWallet, oldWallet);
    }

    function setFeesEnabled(bool value) external onlyOwner {
        feesEnabled = value;
        emit FeesStatusChanged(value);
    }

    function setTokensForSwap(uint256 amount) external onlyOwner {
        uint256 totalSupplyTokens = totalSupply();
        require(amount >= (totalSupplyTokens * 1) / 1000000, AmountTooSmall());
        require(amount <= (totalSupplyTokens * 5) / 1000, AmountTooLarge());
        uint256 oldValue = tokensForSwap;
        tokensForSwap = amount;
        emit TokensForSwapUpdated(amount, oldValue);
    }

    function setTaxBps(uint256 _buyTaxBps, uint256 _sellTaxBps) external onlyOwner {
        require(_buyTaxBps <= buyTaxBps, TaxCanOnlyDecrease());
        require(_sellTaxBps <= sellTaxBps, TaxCanOnlyDecrease());
        require(_buyTaxBps <= MAX_TOTAL_FEE_BPS, FeeTooHigh());
        require(_sellTaxBps <= MAX_TOTAL_FEE_BPS, FeeTooHigh());

        uint256 oldBuyTax = buyTaxBps;
        uint256 oldSellTax = sellTaxBps;
        
        buyTaxBps = _buyTaxBps;
        sellTaxBps = _sellTaxBps;
        
        emit BuyTaxUpdated(_buyTaxBps, oldBuyTax);
        emit SellTaxUpdated(_sellTaxBps, oldSellTax);
    }


    function getSellTaxPercent() external view returns (uint256) {
        return sellTaxBps;
    }

    function excludeFromFees(address[] calldata accounts, bool value) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _excludeFromFees(accounts[i], value);
        }
    }

    function setMarketPair(address pair, bool value) external onlyOwner {
        require(!marketPairs[pair], PairAlreadySet());
        SetMarketPair(pair, value);
    }

    function _update(address from, address to, uint256 amount) internal virtual override {
        require(
            isActivated || excludedFromFees[from] || excludedFromFees[to],
            NotActivated()
        );

        bool applyFee = feesEnabled &&
            !inSwapProcess &&
            !(excludedFromFees[from] || excludedFromFees[to]);

        if (applyFee) {
            uint256 feeAmount = 0;
            if (marketPairs[to] && sellTaxBps > 0) {
                // Sell tax calculation using basis points
                feeAmount = (amount * sellTaxBps) / BASIS_POINTS;
            } else if (marketPairs[from] && buyTaxBps > 0) {
                // Buy tax calculation using basis points
                feeAmount = (amount * buyTaxBps) / BASIS_POINTS;
            }

            if (feeAmount > 0) {
                amount -= feeAmount;
                super._update(from, address(this), feeAmount);
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= tokensForSwap;
        if (applyFee && !marketPairs[from] && canSwap) {
            if (block.number > lastSwapBlock && block.number > activationBlock) {
                _swapTokens(contractTokenBalance);
                lastSwapBlock = block.number;
            }
        }

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

    function _swapTokens(uint256 tokenAmount) internal virtual lockSwapProcess {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = swapRouter.WETH();

        uint256 maxSwapAmount = tokensForSwap * 20;

        if (tokenAmount > maxSwapAmount) {
            tokenAmount = maxSwapAmount;
        }

        swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            (bool success, ) = address(taxWallet).call{value: ethBalance}("");
            require(success, "ETH transfer to tax wallet failed");
        }
    }

    function _excludeFromFees(address account, bool value) internal virtual {
        excludedFromFees[account] = value;
        emit ExcludedFromFees(account, value);
    }

    function SetMarketPair(address pair, bool value) internal virtual {
        marketPairs[pair] = value;
        emit MarketPairStatusUpdated(pair, value);
    }

    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance > 0, "No tokens to swap");
        _swapTokens(contractBalance);
    }

    function rescueETH() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH to rescue");
        (bool success, ) = payable(msg.sender).call{value: balance}("");
        require(success, "ETH transfer failed");
    }

    function rescueTokens(address token) external onlyOwner {
        require(token != address(this), "Cannot rescue own tokens");
        uint256 balance = IERC20(token).balanceOf(address(this));
        require(balance > 0, "No tokens to rescue");
        IERC20(token).transfer(msg.sender, balance);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyActivated","type":"error"},{"inputs":[],"name":"AmountTooLarge","type":"error"},{"inputs":[],"name":"AmountTooSmall","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeeTooHigh","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NotActivated","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PairAlreadySet","type":"error"},{"inputs":[],"name":"TaxCanOnlyDecrease","type":"error"},{"anonymous":false,"inputs":[],"name":"Activation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValueBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValueBps","type":"uint256"}],"name":"BuyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"FeesStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"MarketPairStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValueBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValueBps","type":"uint256"}],"name":"SellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"TokensForSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_FEE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTaxBps","type":"uint256"},{"internalType":"uint256","name":"_sellTaxBps","type":"uint256"}],"name":"setTaxBps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTokensForSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxWallet","type":"address"}],"name":"updateTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561000f575f5ffd5b506040518060400160405280600481526020017f4f70616c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4f50414c00000000000000000000000000000000000000000000000000000000815250335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100ed575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100e49190611275565b60405180910390fd5b6100fc8161044360201b60201c565b50816004908161010c91906114cb565b50806005908161011c91906114cb565b5050505f33905061013f816b033b2e3c9fd0803ce80000006104bc60201b60201c565b731e041546a65537cb6467a8e509172e3853e70b8a60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550690a968163f0a57b400000600a819055506001600660146101000a81548160ff0219169083151502179055506101f3600b819055506103e8600c81905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610264573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028891906115c8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031391906115c8565b6040518363ffffffff1660e01b81526004016103309291906115f3565b6020604051808303815f875af115801561034c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037091906115c8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506103b660a051600161054160201b60201c565b6103e9306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105d260201b60201c565b6103fa3060016105ea60201b60201c565b61040b8160016105ea60201b60201c565b61043d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016105ea60201b60201c565b50611a3d565b5f61045261067b60201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461049857610497815f6105ea60201b60201c565b5b6104a98260016105ea60201b60201c565b6104b8826106a260201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361052c575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016105239190611275565b60405180910390fd5b61053d5f838361076360201b60201c565b5050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc4242182826040516105c6929190611634565b60405180910390a15050565b6105e58383836001610b0d60201b60201c565b505050565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb828260405161066f929190611634565b60405180910390a15050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600660169054906101000a900460ff16806107c45750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806108155750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61084b576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600660149054906101000a900460ff1680156108755750600660159054906101000a900460ff16155b80156109195750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806109175750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015610a48575f5f9050600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561097c57505f600c54115b156109a357612710600c54846109929190611688565b61099c91906116f6565b9050610a1e565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156109fa57505f600b54115b15610a1d57612710600b5484610a109190611688565b610a1a91906116f6565b90505b5b5f811115610a46578083610a329190611726565b9250610a45853083610cdc60201b60201c565b5b505b5f610a5830610ef860201b60201c565b90505f600a548210159050828015610ab75750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610ac05750805b15610af45760095443118015610ad7575060075443115b15610af357610aeb82610f3e60201b60201c565b436009819055505b5b610b05868686610cdc60201b60201c565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b7d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b749190611275565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bed575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610be49190611275565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610cd6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ccd9190611768565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d2c578060035f828254610d209190611781565b92505081905550610dfc565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610db6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610dad939291906117b4565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e43578060035f8282540392505081905550610e8e565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610eeb9190611768565b60405180910390a3505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6001600660156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115610f7557610f74611298565b5b604051908082528060200260200182016040528015610fa35781602001602082028036833780820191505090505b50905030815f81518110610fba57610fb96117e9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561103f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106391906115c8565b81600181518110611077576110766117e9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600a546110c19190611688565b9050808311156110cf578092505b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b8152600401611112959493929190611906565b5f604051808303815f87803b158015611129575f5ffd5b505af115801561113b573d5f5f3e3d5ffd5b505050505f4790505f811115611216575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111919061198b565b5f6040518083038185875af1925050503d805f81146111cb576040519150601f19603f3d011682016040523d82523d5f602084013e6111d0565b606091505b5050905080611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90611a1f565b60405180910390fd5b505b5050505f600660156101000a81548160ff02191690831515021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61125f82611236565b9050919050565b61126f81611255565b82525050565b5f6020820190506112885f830184611266565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061130957607f821691505b60208210810361131c5761131b6112c5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261137e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611343565b6113888683611343565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6113cc6113c76113c2846113a0565b6113a9565b6113a0565b9050919050565b5f819050919050565b6113e5836113b2565b6113f96113f1826113d3565b84845461134f565b825550505050565b5f5f905090565b611410611401565b61141b8184846113dc565b505050565b5b8181101561143e576114335f82611408565b600181019050611421565b5050565b601f8211156114835761145481611322565b61145d84611334565b8101602085101561146c578190505b61148061147885611334565b830182611420565b50505b505050565b5f82821c905092915050565b5f6114a35f1984600802611488565b1980831691505092915050565b5f6114bb8383611494565b9150826002028217905092915050565b6114d48261128e565b67ffffffffffffffff8111156114ed576114ec611298565b5b6114f782546112f2565b611502828285611442565b5f60209050601f831160018114611533575f8415611521578287015190505b61152b85826114b0565b865550611592565b601f19841661154186611322565b5f5b8281101561156857848901518255600182019150602085019450602081019050611543565b868310156115855784890151611581601f891682611494565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b6115a781611255565b81146115b1575f5ffd5b50565b5f815190506115c28161159e565b92915050565b5f602082840312156115dd576115dc61159a565b5b5f6115ea848285016115b4565b91505092915050565b5f6040820190506116065f830185611266565b6116136020830184611266565b9392505050565b5f8115159050919050565b61162e8161161a565b82525050565b5f6040820190506116475f830185611266565b6116546020830184611625565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611692826113a0565b915061169d836113a0565b92508282026116ab816113a0565b915082820484148315176116c2576116c161165b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611700826113a0565b915061170b836113a0565b92508261171b5761171a6116c9565b5b828204905092915050565b5f611730826113a0565b915061173b836113a0565b92508282039050818111156117535761175261165b565b5b92915050565b611762816113a0565b82525050565b5f60208201905061177b5f830184611759565b92915050565b5f61178b826113a0565b9150611796836113a0565b92508282019050808211156117ae576117ad61165b565b5b92915050565b5f6060820190506117c75f830186611266565b6117d46020830185611759565b6117e16040830184611759565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61183961183461182f84611816565b6113a9565b6113a0565b9050919050565b6118498161181f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61188181611255565b82525050565b5f6118928383611878565b60208301905092915050565b5f602082019050919050565b5f6118b48261184f565b6118be8185611859565b93506118c983611869565b805f5b838110156118f95781516118e08882611887565b97506118eb8361189e565b9250506001810190506118cc565b5085935050505092915050565b5f60a0820190506119195f830188611759565b6119266020830187611840565b818103604083015261193881866118aa565b90506119476060830185611266565b6119546080830184611759565b9695505050505050565b5f81905092915050565b50565b5f6119765f8361195e565b915061198182611968565b5f82019050919050565b5f6119958261196b565b9150819050919050565b5f82825260208201905092915050565b7f455448207472616e7366657220746f207461782077616c6c6574206661696c655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f611a0960218361199f565b9150611a14826119af565b604082019050919050565b5f6020820190508181035f830152611a36816119fd565b9050919050565b60805160a05161315f611a6c5f395f610c2a01525f818161141601528181611856015261194f015261315f5ff3fe608060405260043610610227575f3560e01c80638da5cb5b11610122578063c16dd4a4116100aa578063da4493f61161006e578063da4493f614610798578063dbe66ca0146107c2578063dd62ed3e146107fe578063e1f1c4a71461083a578063f2fde38b146108645761022e565b8063c16dd4a4146106c8578063c31c9c07146106f0578063c473413a1461071a578063cc04812314610744578063cffd129c1461076e5761022e565b8063a64e4f8a116100f1578063a64e4f8a146105d6578063a901dd9214610600578063a9059cbb14610628578063ad29ffde14610664578063b4b11b951461068c5761022e565b80638da5cb5b1461053257806395d89b411461055c578063a0496f6f14610586578063a49a910f146105ae5761022e565b8063313ce567116101b057806370a082311161017457806370a0823114610478578063715018a6146104b457806374c9f603146104ca57806380faa3d2146104f25780638a8c523c1461051c5761022e565b8063313ce567146103ba578063431a9caa146103e45780634a8c1fb41461040e57806351bc3c8514610438578063538ba4f91461044e5761022e565b80631ecd7d6e116101f75780631ecd7d6e146102ea57806320800a001461031457806323b872dd1461032a57806326991cc8146103665780632dc0562d146103905761022e565b8062ae3bf81461023257806306fdde031461025a578063095ea7b31461028457806318160ddd146102c05761022e565b3661022e57005b5f5ffd5b34801561023d575f5ffd5b50610258600480360381019061025391906124f5565b61088c565b005b348015610265575f5ffd5b5061026e610a3f565b60405161027b9190612590565b60405180910390f35b34801561028f575f5ffd5b506102aa60048036038101906102a591906125e3565b610acf565b6040516102b7919061263b565b60405180910390f35b3480156102cb575f5ffd5b506102d4610af1565b6040516102e19190612663565b60405180910390f35b3480156102f5575f5ffd5b506102fe610afa565b60405161030b9190612663565b60405180910390f35b34801561031f575f5ffd5b50610328610b00565b005b348015610335575f5ffd5b50610350600480360381019061034b919061267c565b610bfa565b60405161035d919061263b565b60405180910390f35b348015610371575f5ffd5b5061037a610c28565b60405161038791906126db565b60405180910390f35b34801561039b575f5ffd5b506103a4610c4c565b6040516103b191906126db565b60405180910390f35b3480156103c5575f5ffd5b506103ce610c71565b6040516103db919061270f565b60405180910390f35b3480156103ef575f5ffd5b506103f8610c79565b6040516104059190612663565b60405180910390f35b348015610419575f5ffd5b50610422610c7f565b60405161042f919061263b565b60405180910390f35b348015610443575f5ffd5b5061044c610c92565b005b348015610459575f5ffd5b50610462610cf4565b60405161046f91906126db565b60405180910390f35b348015610483575f5ffd5b5061049e600480360381019061049991906124f5565b610cf8565b6040516104ab9190612663565b60405180910390f35b3480156104bf575f5ffd5b506104c8610d3e565b005b3480156104d5575f5ffd5b506104f060048036038101906104eb91906124f5565b610d51565b005b3480156104fd575f5ffd5b50610506610e81565b6040516105139190612663565b60405180910390f35b348015610527575f5ffd5b50610530610e87565b005b34801561053d575f5ffd5b50610546610f2d565b60405161055391906126db565b60405180910390f35b348015610567575f5ffd5b50610570610f54565b60405161057d9190612590565b60405180910390f35b348015610591575f5ffd5b506105ac60048036038101906105a79190612728565b610fe4565b005b3480156105b9575f5ffd5b506105d460048036038101906105cf9190612766565b61116e565b005b3480156105e1575f5ffd5b506105ea611273565b6040516105f7919061263b565b60405180910390f35b34801561060b575f5ffd5b50610626600480360381019061062191906127bb565b611286565b005b348015610633575f5ffd5b5061064e600480360381019061064991906125e3565b6112e2565b60405161065b919061263b565b60405180910390f35b34801561066f575f5ffd5b5061068a60048036038101906106859190612847565b611304565b005b348015610697575f5ffd5b506106b260048036038101906106ad91906124f5565b611360565b6040516106bf919061263b565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e991906128a4565b61137d565b005b3480156106fb575f5ffd5b50610704611414565b604051610711919061293d565b60405180910390f35b348015610725575f5ffd5b5061072e611438565b60405161073b9190612663565b60405180910390f35b34801561074f575f5ffd5b5061075861143e565b6040516107659190612663565b60405180910390f35b348015610779575f5ffd5b50610782611447565b60405161078f9190612663565b60405180910390f35b3480156107a3575f5ffd5b506107ac61144d565b6040516107b99190612663565b60405180910390f35b3480156107cd575f5ffd5b506107e860048036038101906107e391906124f5565b611453565b6040516107f5919061263b565b60405180910390f35b348015610809575f5ffd5b50610824600480360381019061081f9190612956565b611470565b6040516108319190612663565b60405180910390f35b348015610845575f5ffd5b5061084e6114f2565b60405161085b9190612663565b60405180910390f35b34801561086f575f5ffd5b5061088a600480360381019061088591906124f5565b6114f8565b005b61089461157c565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f9906129de565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161093c91906126db565b602060405180830381865afa158015610957573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097b9190612a10565b90505f81116109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b690612a85565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016109fa929190612aa3565b6020604051808303815f875af1158015610a16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612ade565b505050565b606060048054610a4e90612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612b36565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b5f5f610ad9611603565b9050610ae681858561160a565b600191505092915050565b5f600354905090565b600a5481565b610b0861157c565b5f4790505f8111610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590612bb0565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1682604051610b7390612bfb565b5f6040518083038185875af1925050503d805f8114610bad576040519150601f19603f3d011682016040523d82523d5f602084013e610bb2565b606091505b5050905080610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90612c59565b60405180910390fd5b5050565b5f5f610c04611603565b9050610c1185828561161c565b610c1c8585856116ae565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6109c481565b600660169054906101000a900460ff1681565b610c9a61157c565b5f610ca430610cf8565b90505f8111610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612cc1565b60405180910390fd5b610cf18161179e565b50565b5f81565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d4661157c565b610d4f5f611ad2565b565b610d5961157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dbe576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610e75929190612cdf565b60405180910390a15050565b60075481565b610e8f61157c565b600660169054906101000a900460ff1615610ed6576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600660166101000a81548160ff02191690831515021790555043600781905550426008819055507f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba60405160405180910390a1565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f6390612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8f90612b36565b8015610fda5780601f10610fb157610100808354040283529160200191610fda565b820191905f5260205f20905b815481529060010190602001808311610fbd57829003601f168201915b5050505050905090565b610fec61157c565b600b54821115611028576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54811115611064576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48211156110a0576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48111156110dc576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600b5490505f600c54905083600b8190555082600c819055507fc3bfe6f433383f40fbda60ed9bf4df2023072e6d6a23295d627bfe9b7e5a103f8483604051611127929190612d06565b60405180910390a17f427381ae39e3e0c23654f2096a20e4cb23872fdae94928f0155964803335d1028382604051611160929190612d06565b60405180910390a150505050565b61117661157c565b5f61117f610af1565b9050620f42406001826111929190612d5a565b61119c9190612dc8565b8210156111d5576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86005826111e59190612d5a565b6111ef9190612dc8565b821115611228576040517f0625040100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a54905082600a819055507f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c958382604051611266929190612d06565b60405180910390a1505050565b600660149054906101000a900460ff1681565b61128e61157c565b80600660146101000a81548160ff0219169083151502179055507fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a0816040516112d7919061263b565b60405180910390a150565b5f5f6112ec611603565b90506112f98185856116ae565b600191505092915050565b61130c61157c565b5f5f90505b8383905081101561135a5761134d84848381811061133257611331612df8565b5b905060200201602081019061134791906124f5565b83611b33565b8080600101915050611311565b50505050565b600e602052805f5260405f205f915054906101000a900460ff1681565b61138561157c565b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611406576040517f027106be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114108282611bc4565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5481565b5f600c54905090565b600c5481565b60085481565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61271081565b61150061157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611570575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161156791906126db565b60405180910390fd5b61157981611ad2565b50565b611584611603565b73ffffffffffffffffffffffffffffffffffffffff166115a2610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611601576115c5611603565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115f891906126db565b60405180910390fd5b565b5f33905090565b6116178383836001611c55565b505050565b5f6116278484611470565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116a85781811015611699578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161169093929190612e25565b60405180910390fd5b6116a784848484035f611c55565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361171e575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161171591906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361178e575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161178591906126db565b60405180910390fd5b611799838383611e24565b505050565b6001600660156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156117d5576117d4612e5a565b5b6040519080825280602002602001820160405280156118035781602001602082028036833780820191505090505b50905030815f8151811061181a57611819612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e19190612e9b565b816001815181106118f5576118f4612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600a5461193f9190612d5a565b90508083111561194d578092505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b81526004016119ae959493929190612fb6565b5f604051808303815f87803b1580156119c5575f5ffd5b505af11580156119d7573d5f5f3e3d5ffd5b505050505f4790505f811115611ab2575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611a2d90612bfb565b5f6040518083038185875af1925050503d805f8114611a67576040519150601f19603f3d011682016040523d82523d5f602084013e611a6c565b606091505b5050905080611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa79061307e565b60405180910390fd5b505b5050505f600660156101000a81548160ff02191690831515021790555050565b5f611adb610f2d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b1b57611b1a815f611b33565b5b611b26826001611b33565b611b2f826121b6565b5050565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb8282604051611bb892919061309c565b60405180910390a15050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424218282604051611c4992919061309c565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611cc5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611cbc91906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d35575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d2c91906126db565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e1e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e159190612663565b60405180910390a35b50505050565b600660169054906101000a900460ff1680611e855750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ed65750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f0c576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600660149054906101000a900460ff168015611f365750600660159054906101000a900460ff16155b8015611fda5750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611fd85750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015612103575f5f9050600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561203d57505f600c54115b1561206457612710600c54846120539190612d5a565b61205d9190612dc8565b90506120df565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120bb57505f600b54115b156120de57612710600b54846120d19190612d5a565b6120db9190612dc8565b90505b5b5f8111156121015780836120f391906130c3565b9250612100853083612277565b5b505b5f61210d30610cf8565b90505f600a54821015905082801561216c5750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156121755750805b156121a3576009544311801561218c575060075443115b156121a25761219a8261179e565b436009819055505b5b6121ae868686612277565b505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7578060035f8282546122bb91906130f6565b92505081905550612397565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612351578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161234893929190612e25565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123de578060035f8282540392505081905550612429565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124869190612663565b60405180910390a3505050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124c48261249b565b9050919050565b6124d4816124ba565b81146124de575f5ffd5b50565b5f813590506124ef816124cb565b92915050565b5f6020828403121561250a57612509612493565b5b5f612517848285016124e1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61256282612520565b61256c818561252a565b935061257c81856020860161253a565b61258581612548565b840191505092915050565b5f6020820190508181035f8301526125a88184612558565b905092915050565b5f819050919050565b6125c2816125b0565b81146125cc575f5ffd5b50565b5f813590506125dd816125b9565b92915050565b5f5f604083850312156125f9576125f8612493565b5b5f612606858286016124e1565b9250506020612617858286016125cf565b9150509250929050565b5f8115159050919050565b61263581612621565b82525050565b5f60208201905061264e5f83018461262c565b92915050565b61265d816125b0565b82525050565b5f6020820190506126765f830184612654565b92915050565b5f5f5f6060848603121561269357612692612493565b5b5f6126a0868287016124e1565b93505060206126b1868287016124e1565b92505060406126c2868287016125cf565b9150509250925092565b6126d5816124ba565b82525050565b5f6020820190506126ee5f8301846126cc565b92915050565b5f60ff82169050919050565b612709816126f4565b82525050565b5f6020820190506127225f830184612700565b92915050565b5f5f6040838503121561273e5761273d612493565b5b5f61274b858286016125cf565b925050602061275c858286016125cf565b9150509250929050565b5f6020828403121561277b5761277a612493565b5b5f612788848285016125cf565b91505092915050565b61279a81612621565b81146127a4575f5ffd5b50565b5f813590506127b581612791565b92915050565b5f602082840312156127d0576127cf612493565b5b5f6127dd848285016127a7565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112612807576128066127e6565b5b8235905067ffffffffffffffff811115612824576128236127ea565b5b6020830191508360208202830111156128405761283f6127ee565b5b9250929050565b5f5f5f6040848603121561285e5761285d612493565b5b5f84013567ffffffffffffffff81111561287b5761287a612497565b5b612887868287016127f2565b9350935050602061289a868287016127a7565b9150509250925092565b5f5f604083850312156128ba576128b9612493565b5b5f6128c7858286016124e1565b92505060206128d8858286016127a7565b9150509250929050565b5f819050919050565b5f6129056129006128fb8461249b565b6128e2565b61249b565b9050919050565b5f612916826128eb565b9050919050565b5f6129278261290c565b9050919050565b6129378161291d565b82525050565b5f6020820190506129505f83018461292e565b92915050565b5f5f6040838503121561296c5761296b612493565b5b5f612979858286016124e1565b925050602061298a858286016124e1565b9150509250929050565b7f43616e6e6f7420726573637565206f776e20746f6b656e7300000000000000005f82015250565b5f6129c860188361252a565b91506129d382612994565b602082019050919050565b5f6020820190508181035f8301526129f5816129bc565b9050919050565b5f81519050612a0a816125b9565b92915050565b5f60208284031215612a2557612a24612493565b5b5f612a32848285016129fc565b91505092915050565b7f4e6f20746f6b656e7320746f20726573637565000000000000000000000000005f82015250565b5f612a6f60138361252a565b9150612a7a82612a3b565b602082019050919050565b5f6020820190508181035f830152612a9c81612a63565b9050919050565b5f604082019050612ab65f8301856126cc565b612ac36020830184612654565b9392505050565b5f81519050612ad881612791565b92915050565b5f60208284031215612af357612af2612493565b5b5f612b0084828501612aca565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b4d57607f821691505b602082108103612b6057612b5f612b09565b5b50919050565b7f4e6f2045544820746f20726573637565000000000000000000000000000000005f82015250565b5f612b9a60108361252a565b9150612ba582612b66565b602082019050919050565b5f6020820190508181035f830152612bc781612b8e565b9050919050565b5f81905092915050565b50565b5f612be65f83612bce565b9150612bf182612bd8565b5f82019050919050565b5f612c0582612bdb565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f612c4360138361252a565b9150612c4e82612c0f565b602082019050919050565b5f6020820190508181035f830152612c7081612c37565b9050919050565b7f4e6f20746f6b656e7320746f20737761700000000000000000000000000000005f82015250565b5f612cab60118361252a565b9150612cb682612c77565b602082019050919050565b5f6020820190508181035f830152612cd881612c9f565b9050919050565b5f604082019050612cf25f8301856126cc565b612cff60208301846126cc565b9392505050565b5f604082019050612d195f830185612654565b612d266020830184612654565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d64826125b0565b9150612d6f836125b0565b9250828202612d7d816125b0565b91508282048414831517612d9457612d93612d2d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612dd2826125b0565b9150612ddd836125b0565b925082612ded57612dec612d9b565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f606082019050612e385f8301866126cc565b612e456020830185612654565b612e526040830184612654565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e95816124cb565b92915050565b5f60208284031215612eb057612eaf612493565b5b5f612ebd84828501612e87565b91505092915050565b5f819050919050565b5f612ee9612ee4612edf84612ec6565b6128e2565b6125b0565b9050919050565b612ef981612ecf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f31816124ba565b82525050565b5f612f428383612f28565b60208301905092915050565b5f602082019050919050565b5f612f6482612eff565b612f6e8185612f09565b9350612f7983612f19565b805f5b83811015612fa9578151612f908882612f37565b9750612f9b83612f4e565b925050600181019050612f7c565b5085935050505092915050565b5f60a082019050612fc95f830188612654565b612fd66020830187612ef0565b8181036040830152612fe88186612f5a565b9050612ff760608301856126cc565b6130046080830184612654565b9695505050505050565b7f455448207472616e7366657220746f207461782077616c6c6574206661696c655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61306860218361252a565b91506130738261300e565b604082019050919050565b5f6020820190508181035f8301526130958161305c565b9050919050565b5f6040820190506130af5f8301856126cc565b6130bc602083018461262c565b9392505050565b5f6130cd826125b0565b91506130d8836125b0565b92508282039050818111156130f0576130ef612d2d565b5b92915050565b5f613100826125b0565b915061310b836125b0565b925082820190508082111561312357613122612d2d565b5b9291505056fea2646970667358221220d971d5d260bc61637b40b6f6a6d0488bb39a2d38ae3518ee20302efe221c027064736f6c634300081e0033

Deployed Bytecode

0x608060405260043610610227575f3560e01c80638da5cb5b11610122578063c16dd4a4116100aa578063da4493f61161006e578063da4493f614610798578063dbe66ca0146107c2578063dd62ed3e146107fe578063e1f1c4a71461083a578063f2fde38b146108645761022e565b8063c16dd4a4146106c8578063c31c9c07146106f0578063c473413a1461071a578063cc04812314610744578063cffd129c1461076e5761022e565b8063a64e4f8a116100f1578063a64e4f8a146105d6578063a901dd9214610600578063a9059cbb14610628578063ad29ffde14610664578063b4b11b951461068c5761022e565b80638da5cb5b1461053257806395d89b411461055c578063a0496f6f14610586578063a49a910f146105ae5761022e565b8063313ce567116101b057806370a082311161017457806370a0823114610478578063715018a6146104b457806374c9f603146104ca57806380faa3d2146104f25780638a8c523c1461051c5761022e565b8063313ce567146103ba578063431a9caa146103e45780634a8c1fb41461040e57806351bc3c8514610438578063538ba4f91461044e5761022e565b80631ecd7d6e116101f75780631ecd7d6e146102ea57806320800a001461031457806323b872dd1461032a57806326991cc8146103665780632dc0562d146103905761022e565b8062ae3bf81461023257806306fdde031461025a578063095ea7b31461028457806318160ddd146102c05761022e565b3661022e57005b5f5ffd5b34801561023d575f5ffd5b50610258600480360381019061025391906124f5565b61088c565b005b348015610265575f5ffd5b5061026e610a3f565b60405161027b9190612590565b60405180910390f35b34801561028f575f5ffd5b506102aa60048036038101906102a591906125e3565b610acf565b6040516102b7919061263b565b60405180910390f35b3480156102cb575f5ffd5b506102d4610af1565b6040516102e19190612663565b60405180910390f35b3480156102f5575f5ffd5b506102fe610afa565b60405161030b9190612663565b60405180910390f35b34801561031f575f5ffd5b50610328610b00565b005b348015610335575f5ffd5b50610350600480360381019061034b919061267c565b610bfa565b60405161035d919061263b565b60405180910390f35b348015610371575f5ffd5b5061037a610c28565b60405161038791906126db565b60405180910390f35b34801561039b575f5ffd5b506103a4610c4c565b6040516103b191906126db565b60405180910390f35b3480156103c5575f5ffd5b506103ce610c71565b6040516103db919061270f565b60405180910390f35b3480156103ef575f5ffd5b506103f8610c79565b6040516104059190612663565b60405180910390f35b348015610419575f5ffd5b50610422610c7f565b60405161042f919061263b565b60405180910390f35b348015610443575f5ffd5b5061044c610c92565b005b348015610459575f5ffd5b50610462610cf4565b60405161046f91906126db565b60405180910390f35b348015610483575f5ffd5b5061049e600480360381019061049991906124f5565b610cf8565b6040516104ab9190612663565b60405180910390f35b3480156104bf575f5ffd5b506104c8610d3e565b005b3480156104d5575f5ffd5b506104f060048036038101906104eb91906124f5565b610d51565b005b3480156104fd575f5ffd5b50610506610e81565b6040516105139190612663565b60405180910390f35b348015610527575f5ffd5b50610530610e87565b005b34801561053d575f5ffd5b50610546610f2d565b60405161055391906126db565b60405180910390f35b348015610567575f5ffd5b50610570610f54565b60405161057d9190612590565b60405180910390f35b348015610591575f5ffd5b506105ac60048036038101906105a79190612728565b610fe4565b005b3480156105b9575f5ffd5b506105d460048036038101906105cf9190612766565b61116e565b005b3480156105e1575f5ffd5b506105ea611273565b6040516105f7919061263b565b60405180910390f35b34801561060b575f5ffd5b50610626600480360381019061062191906127bb565b611286565b005b348015610633575f5ffd5b5061064e600480360381019061064991906125e3565b6112e2565b60405161065b919061263b565b60405180910390f35b34801561066f575f5ffd5b5061068a60048036038101906106859190612847565b611304565b005b348015610697575f5ffd5b506106b260048036038101906106ad91906124f5565b611360565b6040516106bf919061263b565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e991906128a4565b61137d565b005b3480156106fb575f5ffd5b50610704611414565b604051610711919061293d565b60405180910390f35b348015610725575f5ffd5b5061072e611438565b60405161073b9190612663565b60405180910390f35b34801561074f575f5ffd5b5061075861143e565b6040516107659190612663565b60405180910390f35b348015610779575f5ffd5b50610782611447565b60405161078f9190612663565b60405180910390f35b3480156107a3575f5ffd5b506107ac61144d565b6040516107b99190612663565b60405180910390f35b3480156107cd575f5ffd5b506107e860048036038101906107e391906124f5565b611453565b6040516107f5919061263b565b60405180910390f35b348015610809575f5ffd5b50610824600480360381019061081f9190612956565b611470565b6040516108319190612663565b60405180910390f35b348015610845575f5ffd5b5061084e6114f2565b60405161085b9190612663565b60405180910390f35b34801561086f575f5ffd5b5061088a600480360381019061088591906124f5565b6114f8565b005b61089461157c565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f9906129de565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161093c91906126db565b602060405180830381865afa158015610957573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097b9190612a10565b90505f81116109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b690612a85565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016109fa929190612aa3565b6020604051808303815f875af1158015610a16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612ade565b505050565b606060048054610a4e90612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612b36565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b5f5f610ad9611603565b9050610ae681858561160a565b600191505092915050565b5f600354905090565b600a5481565b610b0861157c565b5f4790505f8111610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590612bb0565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1682604051610b7390612bfb565b5f6040518083038185875af1925050503d805f8114610bad576040519150601f19603f3d011682016040523d82523d5f602084013e610bb2565b606091505b5050905080610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90612c59565b60405180910390fd5b5050565b5f5f610c04611603565b9050610c1185828561161c565b610c1c8585856116ae565b60019150509392505050565b7f0000000000000000000000005bcebcee72f13004f1d00d7da7bf22b082f93f7081565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6109c481565b600660169054906101000a900460ff1681565b610c9a61157c565b5f610ca430610cf8565b90505f8111610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612cc1565b60405180910390fd5b610cf18161179e565b50565b5f81565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d4661157c565b610d4f5f611ad2565b565b610d5961157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dbe576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610e75929190612cdf565b60405180910390a15050565b60075481565b610e8f61157c565b600660169054906101000a900460ff1615610ed6576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600660166101000a81548160ff02191690831515021790555043600781905550426008819055507f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba60405160405180910390a1565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f6390612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8f90612b36565b8015610fda5780601f10610fb157610100808354040283529160200191610fda565b820191905f5260205f20905b815481529060010190602001808311610fbd57829003601f168201915b5050505050905090565b610fec61157c565b600b54821115611028576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54811115611064576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48211156110a0576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48111156110dc576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600b5490505f600c54905083600b8190555082600c819055507fc3bfe6f433383f40fbda60ed9bf4df2023072e6d6a23295d627bfe9b7e5a103f8483604051611127929190612d06565b60405180910390a17f427381ae39e3e0c23654f2096a20e4cb23872fdae94928f0155964803335d1028382604051611160929190612d06565b60405180910390a150505050565b61117661157c565b5f61117f610af1565b9050620f42406001826111929190612d5a565b61119c9190612dc8565b8210156111d5576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86005826111e59190612d5a565b6111ef9190612dc8565b821115611228576040517f0625040100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a54905082600a819055507f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c958382604051611266929190612d06565b60405180910390a1505050565b600660149054906101000a900460ff1681565b61128e61157c565b80600660146101000a81548160ff0219169083151502179055507fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a0816040516112d7919061263b565b60405180910390a150565b5f5f6112ec611603565b90506112f98185856116ae565b600191505092915050565b61130c61157c565b5f5f90505b8383905081101561135a5761134d84848381811061133257611331612df8565b5b905060200201602081019061134791906124f5565b83611b33565b8080600101915050611311565b50505050565b600e602052805f5260405f205f915054906101000a900460ff1681565b61138561157c565b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611406576040517f027106be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114108282611bc4565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b5481565b5f600c54905090565b600c5481565b60085481565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61271081565b61150061157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611570575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161156791906126db565b60405180910390fd5b61157981611ad2565b50565b611584611603565b73ffffffffffffffffffffffffffffffffffffffff166115a2610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611601576115c5611603565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115f891906126db565b60405180910390fd5b565b5f33905090565b6116178383836001611c55565b505050565b5f6116278484611470565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116a85781811015611699578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161169093929190612e25565b60405180910390fd5b6116a784848484035f611c55565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361171e575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161171591906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361178e575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161178591906126db565b60405180910390fd5b611799838383611e24565b505050565b6001600660156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156117d5576117d4612e5a565b5b6040519080825280602002602001820160405280156118035781602001602082028036833780820191505090505b50905030815f8151811061181a57611819612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e19190612e9b565b816001815181106118f5576118f4612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600a5461193f9190612d5a565b90508083111561194d578092505b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b81526004016119ae959493929190612fb6565b5f604051808303815f87803b1580156119c5575f5ffd5b505af11580156119d7573d5f5f3e3d5ffd5b505050505f4790505f811115611ab2575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611a2d90612bfb565b5f6040518083038185875af1925050503d805f8114611a67576040519150601f19603f3d011682016040523d82523d5f602084013e611a6c565b606091505b5050905080611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa79061307e565b60405180910390fd5b505b5050505f600660156101000a81548160ff02191690831515021790555050565b5f611adb610f2d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b1b57611b1a815f611b33565b5b611b26826001611b33565b611b2f826121b6565b5050565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb8282604051611bb892919061309c565b60405180910390a15050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424218282604051611c4992919061309c565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611cc5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611cbc91906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d35575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d2c91906126db565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e1e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e159190612663565b60405180910390a35b50505050565b600660169054906101000a900460ff1680611e855750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ed65750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f0c576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600660149054906101000a900460ff168015611f365750600660159054906101000a900460ff16155b8015611fda5750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611fd85750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015612103575f5f9050600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561203d57505f600c54115b1561206457612710600c54846120539190612d5a565b61205d9190612dc8565b90506120df565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120bb57505f600b54115b156120de57612710600b54846120d19190612d5a565b6120db9190612dc8565b90505b5b5f8111156121015780836120f391906130c3565b9250612100853083612277565b5b505b5f61210d30610cf8565b90505f600a54821015905082801561216c5750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156121755750805b156121a3576009544311801561218c575060075443115b156121a25761219a8261179e565b436009819055505b5b6121ae868686612277565b505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7578060035f8282546122bb91906130f6565b92505081905550612397565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612351578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161234893929190612e25565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123de578060035f8282540392505081905550612429565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124869190612663565b60405180910390a3505050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124c48261249b565b9050919050565b6124d4816124ba565b81146124de575f5ffd5b50565b5f813590506124ef816124cb565b92915050565b5f6020828403121561250a57612509612493565b5b5f612517848285016124e1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61256282612520565b61256c818561252a565b935061257c81856020860161253a565b61258581612548565b840191505092915050565b5f6020820190508181035f8301526125a88184612558565b905092915050565b5f819050919050565b6125c2816125b0565b81146125cc575f5ffd5b50565b5f813590506125dd816125b9565b92915050565b5f5f604083850312156125f9576125f8612493565b5b5f612606858286016124e1565b9250506020612617858286016125cf565b9150509250929050565b5f8115159050919050565b61263581612621565b82525050565b5f60208201905061264e5f83018461262c565b92915050565b61265d816125b0565b82525050565b5f6020820190506126765f830184612654565b92915050565b5f5f5f6060848603121561269357612692612493565b5b5f6126a0868287016124e1565b93505060206126b1868287016124e1565b92505060406126c2868287016125cf565b9150509250925092565b6126d5816124ba565b82525050565b5f6020820190506126ee5f8301846126cc565b92915050565b5f60ff82169050919050565b612709816126f4565b82525050565b5f6020820190506127225f830184612700565b92915050565b5f5f6040838503121561273e5761273d612493565b5b5f61274b858286016125cf565b925050602061275c858286016125cf565b9150509250929050565b5f6020828403121561277b5761277a612493565b5b5f612788848285016125cf565b91505092915050565b61279a81612621565b81146127a4575f5ffd5b50565b5f813590506127b581612791565b92915050565b5f602082840312156127d0576127cf612493565b5b5f6127dd848285016127a7565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112612807576128066127e6565b5b8235905067ffffffffffffffff811115612824576128236127ea565b5b6020830191508360208202830111156128405761283f6127ee565b5b9250929050565b5f5f5f6040848603121561285e5761285d612493565b5b5f84013567ffffffffffffffff81111561287b5761287a612497565b5b612887868287016127f2565b9350935050602061289a868287016127a7565b9150509250925092565b5f5f604083850312156128ba576128b9612493565b5b5f6128c7858286016124e1565b92505060206128d8858286016127a7565b9150509250929050565b5f819050919050565b5f6129056129006128fb8461249b565b6128e2565b61249b565b9050919050565b5f612916826128eb565b9050919050565b5f6129278261290c565b9050919050565b6129378161291d565b82525050565b5f6020820190506129505f83018461292e565b92915050565b5f5f6040838503121561296c5761296b612493565b5b5f612979858286016124e1565b925050602061298a858286016124e1565b9150509250929050565b7f43616e6e6f7420726573637565206f776e20746f6b656e7300000000000000005f82015250565b5f6129c860188361252a565b91506129d382612994565b602082019050919050565b5f6020820190508181035f8301526129f5816129bc565b9050919050565b5f81519050612a0a816125b9565b92915050565b5f60208284031215612a2557612a24612493565b5b5f612a32848285016129fc565b91505092915050565b7f4e6f20746f6b656e7320746f20726573637565000000000000000000000000005f82015250565b5f612a6f60138361252a565b9150612a7a82612a3b565b602082019050919050565b5f6020820190508181035f830152612a9c81612a63565b9050919050565b5f604082019050612ab65f8301856126cc565b612ac36020830184612654565b9392505050565b5f81519050612ad881612791565b92915050565b5f60208284031215612af357612af2612493565b5b5f612b0084828501612aca565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b4d57607f821691505b602082108103612b6057612b5f612b09565b5b50919050565b7f4e6f2045544820746f20726573637565000000000000000000000000000000005f82015250565b5f612b9a60108361252a565b9150612ba582612b66565b602082019050919050565b5f6020820190508181035f830152612bc781612b8e565b9050919050565b5f81905092915050565b50565b5f612be65f83612bce565b9150612bf182612bd8565b5f82019050919050565b5f612c0582612bdb565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f612c4360138361252a565b9150612c4e82612c0f565b602082019050919050565b5f6020820190508181035f830152612c7081612c37565b9050919050565b7f4e6f20746f6b656e7320746f20737761700000000000000000000000000000005f82015250565b5f612cab60118361252a565b9150612cb682612c77565b602082019050919050565b5f6020820190508181035f830152612cd881612c9f565b9050919050565b5f604082019050612cf25f8301856126cc565b612cff60208301846126cc565b9392505050565b5f604082019050612d195f830185612654565b612d266020830184612654565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d64826125b0565b9150612d6f836125b0565b9250828202612d7d816125b0565b91508282048414831517612d9457612d93612d2d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612dd2826125b0565b9150612ddd836125b0565b925082612ded57612dec612d9b565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f606082019050612e385f8301866126cc565b612e456020830185612654565b612e526040830184612654565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e95816124cb565b92915050565b5f60208284031215612eb057612eaf612493565b5b5f612ebd84828501612e87565b91505092915050565b5f819050919050565b5f612ee9612ee4612edf84612ec6565b6128e2565b6125b0565b9050919050565b612ef981612ecf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f31816124ba565b82525050565b5f612f428383612f28565b60208301905092915050565b5f602082019050919050565b5f612f6482612eff565b612f6e8185612f09565b9350612f7983612f19565b805f5b83811015612fa9578151612f908882612f37565b9750612f9b83612f4e565b925050600181019050612f7c565b5085935050505092915050565b5f60a082019050612fc95f830188612654565b612fd66020830187612ef0565b8181036040830152612fe88186612f5a565b9050612ff760608301856126cc565b6130046080830184612654565b9695505050505050565b7f455448207472616e7366657220746f207461782077616c6c6574206661696c655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61306860218361252a565b91506130738261300e565b604082019050919050565b5f6020820190508181035f8301526130958161305c565b9050919050565b5f6040820190506130af5f8301856126cc565b6130bc602083018461262c565b9392505050565b5f6130cd826125b0565b91506130d8836125b0565b92508282039050818111156130f0576130ef612d2d565b5b92915050565b5f613100826125b0565b915061310b836125b0565b925082820190508082111561312357613122612d2d565b5b9291505056fea2646970667358221220d971d5d260bc61637b40b6f6a6d0488bb39a2d38ae3518ee20302efe221c027064736f6c634300081e0033

Deployed Bytecode Sourcemap

7616:8610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15914:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2091:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2958:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2385:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8247:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15633:273;;;;;;;;;;;;;:::i;:::-;;3156:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7766:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7806:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8183:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7902:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15416:209;;;;;;;;;;;;;:::i;:::-;;7708:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2492:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6585:103;;;;;;;;;;;;;:::i;:::-;;10855:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7934:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10602:245;;;;;;;;;;;;;:::i;:::-;;6316:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2190:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11685:629;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11267:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7839:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11126:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2618:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12429:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8458:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12649:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7655:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8282:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12324:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8341:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7971:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8403:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2808:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8102:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6696:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15914:309;6275:13;:11;:13::i;:::-;16006:4:::1;15989:22;;:5;:22;;::::0;15981:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16051:15;16076:5;16069:23;;;16101:4;16069:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16051:56;;16136:1;16126:7;:11;16118:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;16179:5;16172:22;;;16195:10;16207:7;16172:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15970:253;15914:309:::0;:::o;2091:91::-;2136:13;2169:5;2162:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2091:91;:::o;2958:190::-;3031:4;3048:13;3064:12;:10;:12::i;:::-;3048:28;;3087:31;3096:5;3103:7;3112:5;3087:8;:31::i;:::-;3136:4;3129:11;;;2958:190;;;;:::o;2385:99::-;2437:7;2464:12;;2457:19;;2385:99;:::o;8247:28::-;;;;:::o;15633:273::-;6275:13;:11;:13::i;:::-;15684:15:::1;15702:21;15684:39;;15752:1;15742:7;:11;15734:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;15786:12;15812:10;15804:24;;15836:7;15804:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15785:63;;;15867:7;15859:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;15673:233;;15633:273::o:0;3156:249::-;3243:4;3260:15;3278:12;:10;:12::i;:::-;3260:30;;3301:37;3317:4;3323:7;3332:5;3301:15;:37::i;:::-;3349:26;3359:4;3365:2;3369:5;3349:9;:26::i;:::-;3393:4;3386:11;;;3156:249;;;;;:::o;7766:33::-;;;:::o;7806:24::-;;;;;;;;;;;;;:::o;2293:84::-;2342:5;2367:2;2360:9;;2293:84;:::o;8183:48::-;8227:4;8183:48;:::o;7902:23::-;;;;;;;;;;;;;:::o;15416:209::-;6275:13;:11;:13::i;:::-;15468:23:::1;15494:24;15512:4;15494:9;:24::i;:::-;15468:50;;15555:1;15537:15;:19;15529:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;15589:28;15601:15;15589:11;:28::i;:::-;15457:168;15416:209::o:0;7708:49::-;7755:1;7708:49;:::o;2492:118::-;2557:7;2584:9;:18;2594:7;2584:18;;;;;;;;;;;;;;;;2577:25;;2492:118;;;:::o;6585:103::-;6275:13;:11;:13::i;:::-;6650:30:::1;6677:1;6650:18;:30::i;:::-;6585:103::o:0;10855:263::-;6275:13;:11;:13::i;:::-;7755:1:::1;10938:26;;:10;:26;;::::0;10930:53:::1;;;;;;;;;;;;;;;;;10994:17;11014:9;;;;;;;;;;;10994:29;;11046:10;11034:9;;:22;;;;;;;;;;;;;;;;;;11072:38;11089:9;;;;;;;;;;;11100;11072:38;;;;;;;:::i;:::-;;;;;;;;10919:199;10855:263:::0;:::o;7934:30::-;;;;:::o;10602:245::-;6275:13;:11;:13::i;:::-;10666:11:::1;;;;;;;;;;;10665:12;10657:41;;;;;;;;;;;;;;;;;10723:4;10709:11;;:18;;;;;;;;;;;;;;;;;;10756:12;10738:15;:30;;;;10796:15;10779:14;:32;;;;10827:12;;;;;;;;;;10602:245::o:0;6316:87::-;6362:7;6389:6;;;;;;;;;;;6382:13;;6316:87;:::o;2190:95::-;2237:13;2270:7;2263:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2190:95;:::o;11685:629::-;6275:13;:11;:13::i;:::-;11797:9:::1;;11783:10;:23;;11775:54;;;;;;;;;;;;;;;;;11863:10;;11848:11;:25;;11840:56;;;;;;;;;;;;;;;;;8227:4;11915:10;:31;;11907:54;;;;;;;;;;;;;;;;;8227:4;11980:11;:32;;11972:55;;;;;;;;;;;;;;;;;12040:17;12060:9;;12040:29;;12080:18;12101:10;;12080:31;;12144:10;12132:9;:22;;;;12178:11;12165:10;:24;;;;12215:36;12229:10;12241:9;12215:36;;;;;;;:::i;:::-;;;;;;;;12267:39;12282:11;12295:10;12267:39;;;;;;;:::i;:::-;;;;;;;;11764:550;;11685:629:::0;;:::o;11267:410::-;6275:13;:11;:13::i;:::-;11339:25:::1;11367:13;:11;:13::i;:::-;11339:41;;11435:7;11430:1;11410:17;:21;;;;:::i;:::-;11409:33;;;;:::i;:::-;11399:6;:43;;11391:70;;;;;;;;;;;;;;;;;11516:4;11511:1;11491:17;:21;;;;:::i;:::-;11490:30;;;;:::i;:::-;11480:6;:40;;11472:67;;;;;;;;;;;;;;;;;11550:16;11569:13;;11550:32;;11609:6;11593:13;:22;;;;11631:38;11652:6;11660:8;11631:38;;;;;;;:::i;:::-;;;;;;;;11328:349;;11267:410:::0;:::o;7839:23::-;;;;;;;;;;;;;:::o;11126:133::-;6275:13;:11;:13::i;:::-;11206:5:::1;11192:11;;:19;;;;;;;;;;;;;;;;;;11227:24;11245:5;11227:24;;;;;;:::i;:::-;;;;;;;;11126:133:::0;:::o;2618:182::-;2687:4;2704:13;2720:12;:10;:12::i;:::-;2704:28;;2743:27;2753:5;2760:2;2764:5;2743:9;:27::i;:::-;2788:4;2781:11;;;2618:182;;;;:::o;12429:212::-;6275:13;:11;:13::i;:::-;12530:9:::1;12542:1;12530:13;;12525:109;12549:8;;:15;;12545:1;:19;12525:109;;;12586:36;12603:8;;12612:1;12603:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;12616:5;12586:16;:36::i;:::-;12566:3;;;;;;;12525:109;;;;12429:212:::0;;;:::o;8458:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;12649:169::-;6275:13;:11;:13::i;:::-;12737:11:::1;:17;12749:4;12737:17;;;;;;;;;;;;;;;;;;;;;;;;;12736:18;12728:45;;;;;;;;;;;;;;;;;12784:26;12798:4;12804:5;12784:13;:26::i;:::-;12649:169:::0;;:::o;7655:44::-;;;:::o;8282:24::-;;;;:::o;12324:97::-;12376:7;12403:10;;12396:17;;12324:97;:::o;8341:25::-;;;;:::o;7971:29::-;;;;:::o;8403:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;2808:142::-;2888:7;2915:11;:18;2927:5;2915:18;;;;;;;;;;;;;;;:27;2934:7;2915:27;;;;;;;;;;;;;;;;2908:34;;2808:142;;;;:::o;8102:44::-;8141:5;8102:44;:::o;6696:220::-;6275:13;:11;:13::i;:::-;6801:1:::1;6781:22;;:8;:22;;::::0;6777:93:::1;;6855:1;6827:31;;;;;;;;;;;:::i;:::-;;;;;;;;6777:93;6880:28;6899:8;6880:18;:28::i;:::-;6696:220:::0;:::o;6411:166::-;6482:12;:10;:12::i;:::-;6471:23;;:7;:5;:7::i;:::-;:23;;;6467:103;;6545:12;:10;:12::i;:::-;6518:40;;;;;;;;;;;:::i;:::-;;;;;;;;6467:103;6411:166::o;1048:98::-;1101:7;1128:10;1121:17;;1048:98;:::o;4688:130::-;4773:37;4782:5;4789:7;4798:5;4805:4;4773:8;:37::i;:::-;4688:130;;;:::o;5277:487::-;5377:24;5404:25;5414:5;5421:7;5404:9;:25::i;:::-;5377:52;;5464:17;5444:16;:37;5440:317;;5521:5;5502:16;:24;5498:132;;;5581:7;5590:16;5608:5;5554:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;5498:132;5673:57;5682:5;5689:7;5717:5;5698:16;:24;5724:5;5673:8;:57::i;:::-;5440:317;5366:398;5277:487;;;:::o;3413:308::-;3513:1;3497:18;;:4;:18;;;3493:88;;3566:1;3539:30;;;;;;;;;;;:::i;:::-;;;;;;;;3493:88;3609:1;3595:16;;:2;:16;;;3591:88;;3664:1;3635:32;;;;;;;;;;;:::i;:::-;;;;;;;;3591:88;3689:24;3697:4;3703:2;3707:5;3689:7;:24::i;:::-;3413:308;;;:::o;14249:809::-;9266:4;9250:13;;:20;;;;;;;;;;;;;;;;;;14335:21:::1;14373:1;14359:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14335:40;;14404:4;14386;14391:1;14386:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;14430:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14420:4;14425:1;14420:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;::::0;::::1;14460:21;14500:2;14484:13;;:18;;;;:::i;:::-;14460:42;;14533:13;14519:11;:27;14515:87;;;14577:13;14563:27;;14515:87;14614:10;:61;;;14690:11;14716:1;14732:4;14759;14779:15;14614:191;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14818:18;14839:21;14818:42;;14888:1;14875:10;:14;14871:180;;;14907:12;14933:9;;;;;;;;;;;14925:23;;14956:10;14925:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14906:65;;;14994:7;14986:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;14891:160;14871:180;14324:734;;;9309:5:::0;9293:13;;:21;;;;;;;;;;;;;;;;;;14249:809;:::o;10297:297::-;10372:16;10391:7;:5;:7::i;:::-;10372:26;;7755:1;10413:24;;:8;:24;;;10409:90;;10454:33;10471:8;10481:5;10454:16;:33::i;:::-;10409:90;10509:32;10526:8;10536:4;10509:16;:32::i;:::-;10552:34;10577:8;10552:24;:34::i;:::-;10361:233;10297:297;:::o;15066:172::-;15177:5;15149:16;:25;15166:7;15149:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;15198:32;15215:7;15224:5;15198:32;;;;;;;:::i;:::-;;;;;;;;15066:172;;:::o;15246:162::-;15343:5;15323:11;:17;15335:4;15323:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15364:36;15388:4;15394:5;15364:36;;;;;;;:::i;:::-;;;;;;;;15246:162;;:::o;4826:443::-;4956:1;4939:19;;:5;:19;;;4935:91;;5011:1;4982:32;;;;;;;;;;;:::i;:::-;;;;;;;;4935:91;5059:1;5040:21;;:7;:21;;;5036:92;;5113:1;5085:31;;;;;;;;;;;:::i;:::-;;;;;;;;5036:92;5168:5;5138:11;:18;5150:5;5138:18;;;;;;;;;;;;;;;:27;5157:7;5138:27;;;;;;;;;;;;;;;:35;;;;5188:9;5184:78;;;5235:7;5219:31;;5228:5;5219:31;;;5244:5;5219:31;;;;;;:::i;:::-;;;;;;;;5184:78;4826:443;;;;:::o;12826:1415::-;12944:11;;;;;;;;;;;:37;;;;12959:16;:22;12976:4;12959:22;;;;;;;;;;;;;;;;;;;;;;;;;12944:37;:61;;;;12985:16;:20;13002:2;12985:20;;;;;;;;;;;;;;;;;;;;;;;;;12944:61;12922:123;;;;;;;;;;;;;;;;;13058:13;13074:11;;;;;;;;;;;:42;;;;;13103:13;;;;;;;;;;;13102:14;13074:42;:108;;;;;13135:16;:22;13152:4;13135:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;13161:16;:20;13178:2;13161:20;;;;;;;;;;;;;;;;;;;;;;;;;13135:46;13133:49;13074:108;13058:124;;13199:8;13195:598;;;13224:17;13244:1;13224:21;;13264:11;:15;13276:2;13264:15;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;13296:1;13283:10;;:14;13264:33;13260:369;;;8141:5;13400:10;;13391:6;:19;;;;:::i;:::-;13390:36;;;;:::i;:::-;13378:48;;13260:369;;;13452:11;:17;13464:4;13452:17;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;13485:1;13473:9;;:13;13452:34;13448:181;;;8141:5;13588:9;;13579:6;:18;;;;:::i;:::-;13578:35;;;;:::i;:::-;13566:47;;13448:181;13260:369;13661:1;13649:9;:13;13645:137;;;13693:9;13683:19;;;;;:::i;:::-;;;13721:45;13735:4;13749;13756:9;13721:13;:45::i;:::-;13645:137;13209:584;13195:598;13805:28;13836:24;13854:4;13836:9;:24::i;:::-;13805:55;;13871:12;13910:13;;13886:20;:37;;13871:52;;13938:8;:30;;;;;13951:11;:17;13963:4;13951:17;;;;;;;;;;;;;;;;;;;;;;;;;13950:18;13938:30;:41;;;;;13972:7;13938:41;13934:256;;;14015:13;;14000:12;:28;:62;;;;;14047:15;;14032:12;:30;14000:62;13996:183;;;14083:33;14095:20;14083:11;:33::i;:::-;14151:12;14135:13;:28;;;;13996:183;13934:256;14202:31;14216:4;14222:2;14226:6;14202:13;:31::i;:::-;12911:1330;;;12826:1415;;;:::o;6924:191::-;6998:16;7017:6;;;;;;;;;;;6998:25;;7043:8;7034:6;;:17;;;;;;;;;;;;;;;;;;7098:8;7067:40;;7088:8;7067:40;;;;;;;;;;;;6987:128;6924:191;:::o;3729:730::-;3835:1;3819:18;;:4;:18;;;3815:369;;3870:5;3854:12;;:21;;;;;;;:::i;:::-;;;;;;;;3815:369;;;3908:19;3930:9;:15;3940:4;3930:15;;;;;;;;;;;;;;;;3908:37;;3978:5;3964:11;:19;3960:117;;;4036:4;4042:11;4055:5;4011:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;3960:117;4152:5;4138:11;:19;4120:9;:15;4130:4;4120:15;;;;;;;;;;;;;;;:37;;;;3893:291;3815:369;4214:1;4200:16;;:2;:16;;;4196:213;;4278:5;4262:12;;:21;;;;;;;;;;;4196:213;;;4377:5;4360:9;:13;4370:2;4360:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;4196:213;4441:2;4426:25;;4435:4;4426:25;;;4445:5;4426:25;;;;;;:::i;:::-;;;;;;;;3729:730;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:139::-;1545:6;1540:3;1535;1529:23;1586:1;1577:6;1572:3;1568:16;1561:27;1456:139;;;:::o;1601:102::-;1642:6;1693:2;1689:7;1684:2;1677:5;1673:14;1669:28;1659:38;;1601:102;;;:::o;1709:377::-;1797:3;1825:39;1858:5;1825:39;:::i;:::-;1880:71;1944:6;1939:3;1880:71;:::i;:::-;1873:78;;1960:65;2018:6;2013:3;2006:4;1999:5;1995:16;1960:65;:::i;:::-;2050:29;2072:6;2050:29;:::i;:::-;2045:3;2041:39;2034:46;;1801:285;1709:377;;;;:::o;2092:313::-;2205:4;2243:2;2232:9;2228:18;2220:26;;2292:9;2286:4;2282:20;2278:1;2267:9;2263:17;2256:47;2320:78;2393:4;2384:6;2320:78;:::i;:::-;2312:86;;2092:313;;;;:::o;2411:77::-;2448:7;2477:5;2466:16;;2411:77;;;:::o;2494:122::-;2567:24;2585:5;2567:24;:::i;:::-;2560:5;2557:35;2547:63;;2606:1;2603;2596:12;2547:63;2494:122;:::o;2622:139::-;2668:5;2706:6;2693:20;2684:29;;2722:33;2749:5;2722:33;:::i;:::-;2622:139;;;;:::o;2767:474::-;2835:6;2843;2892:2;2880:9;2871:7;2867:23;2863:32;2860:119;;;2898:79;;:::i;:::-;2860:119;3018:1;3043:53;3088:7;3079:6;3068:9;3064:22;3043:53;:::i;:::-;3033:63;;2989:117;3145:2;3171:53;3216:7;3207:6;3196:9;3192:22;3171:53;:::i;:::-;3161:63;;3116:118;2767:474;;;;;:::o;3247:90::-;3281:7;3324:5;3317:13;3310:21;3299:32;;3247:90;;;:::o;3343:109::-;3424:21;3439:5;3424:21;:::i;:::-;3419:3;3412:34;3343:109;;:::o;3458:210::-;3545:4;3583:2;3572:9;3568:18;3560:26;;3596:65;3658:1;3647:9;3643:17;3634:6;3596:65;:::i;:::-;3458:210;;;;:::o;3674:118::-;3761:24;3779:5;3761:24;:::i;:::-;3756:3;3749:37;3674:118;;:::o;3798:222::-;3891:4;3929:2;3918:9;3914:18;3906:26;;3942:71;4010:1;3999:9;3995:17;3986:6;3942:71;:::i;:::-;3798:222;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:118::-;4738:24;4756:5;4738:24;:::i;:::-;4733:3;4726:37;4651:118;;:::o;4775:222::-;4868:4;4906:2;4895:9;4891:18;4883:26;;4919:71;4987:1;4976:9;4972:17;4963:6;4919:71;:::i;:::-;4775:222;;;;:::o;5003:86::-;5038:7;5078:4;5071:5;5067:16;5056:27;;5003:86;;;:::o;5095:112::-;5178:22;5194:5;5178:22;:::i;:::-;5173:3;5166:35;5095:112;;:::o;5213:214::-;5302:4;5340:2;5329:9;5325:18;5317:26;;5353:67;5417:1;5406:9;5402:17;5393:6;5353:67;:::i;:::-;5213:214;;;;:::o;5433:474::-;5501:6;5509;5558:2;5546:9;5537:7;5533:23;5529:32;5526:119;;;5564:79;;:::i;:::-;5526:119;5684:1;5709:53;5754:7;5745:6;5734:9;5730:22;5709:53;:::i;:::-;5699:63;;5655:117;5811:2;5837:53;5882:7;5873:6;5862:9;5858:22;5837:53;:::i;:::-;5827:63;;5782:118;5433:474;;;;;:::o;5913:329::-;5972:6;6021:2;6009:9;6000:7;5996:23;5992:32;5989:119;;;6027:79;;:::i;:::-;5989:119;6147:1;6172:53;6217:7;6208:6;6197:9;6193:22;6172:53;:::i;:::-;6162:63;;6118:117;5913:329;;;;:::o;6248:116::-;6318:21;6333:5;6318:21;:::i;:::-;6311:5;6308:32;6298:60;;6354:1;6351;6344:12;6298:60;6248:116;:::o;6370:133::-;6413:5;6451:6;6438:20;6429:29;;6467:30;6491:5;6467:30;:::i;:::-;6370:133;;;;:::o;6509:323::-;6565:6;6614:2;6602:9;6593:7;6589:23;6585:32;6582:119;;;6620:79;;:::i;:::-;6582:119;6740:1;6765:50;6807:7;6798:6;6787:9;6783:22;6765:50;:::i;:::-;6755:60;;6711:114;6509:323;;;;:::o;6838:117::-;6947:1;6944;6937:12;6961:117;7070:1;7067;7060:12;7084:117;7193:1;7190;7183:12;7224:568;7297:8;7307:6;7357:3;7350:4;7342:6;7338:17;7334:27;7324:122;;7365:79;;:::i;:::-;7324:122;7478:6;7465:20;7455:30;;7508:18;7500:6;7497:30;7494:117;;;7530:79;;:::i;:::-;7494:117;7644:4;7636:6;7632:17;7620:29;;7698:3;7690:4;7682:6;7678:17;7668:8;7664:32;7661:41;7658:128;;;7705:79;;:::i;:::-;7658:128;7224:568;;;;;:::o;7798:698::-;7890:6;7898;7906;7955:2;7943:9;7934:7;7930:23;7926:32;7923:119;;;7961:79;;:::i;:::-;7923:119;8109:1;8098:9;8094:17;8081:31;8139:18;8131:6;8128:30;8125:117;;;8161:79;;:::i;:::-;8125:117;8274:80;8346:7;8337:6;8326:9;8322:22;8274:80;:::i;:::-;8256:98;;;;8052:312;8403:2;8429:50;8471:7;8462:6;8451:9;8447:22;8429:50;:::i;:::-;8419:60;;8374:115;7798:698;;;;;:::o;8502:468::-;8567:6;8575;8624:2;8612:9;8603:7;8599:23;8595:32;8592:119;;;8630:79;;:::i;:::-;8592:119;8750:1;8775:53;8820:7;8811:6;8800:9;8796:22;8775:53;:::i;:::-;8765:63;;8721:117;8877:2;8903:50;8945:7;8936:6;8925:9;8921:22;8903:50;:::i;:::-;8893:60;;8848:115;8502:468;;;;;:::o;8976:60::-;9004:3;9025:5;9018:12;;8976:60;;;:::o;9042:142::-;9092:9;9125:53;9143:34;9152:24;9170:5;9152:24;:::i;:::-;9143:34;:::i;:::-;9125:53;:::i;:::-;9112:66;;9042:142;;;:::o;9190:126::-;9240:9;9273:37;9304:5;9273:37;:::i;:::-;9260:50;;9190:126;;;:::o;9322:150::-;9396:9;9429:37;9460:5;9429:37;:::i;:::-;9416:50;;9322:150;;;:::o;9478:179::-;9589:61;9644:5;9589:61;:::i;:::-;9584:3;9577:74;9478:179;;:::o;9663:270::-;9780:4;9818:2;9807:9;9803:18;9795:26;;9831:95;9923:1;9912:9;9908:17;9899:6;9831:95;:::i;:::-;9663:270;;;;:::o;9939:474::-;10007:6;10015;10064:2;10052:9;10043:7;10039:23;10035:32;10032:119;;;10070:79;;:::i;:::-;10032:119;10190:1;10215:53;10260:7;10251:6;10240:9;10236:22;10215:53;:::i;:::-;10205:63;;10161:117;10317:2;10343:53;10388:7;10379:6;10368:9;10364:22;10343:53;:::i;:::-;10333:63;;10288:118;9939:474;;;;;:::o;10419:174::-;10559:26;10555:1;10547:6;10543:14;10536:50;10419:174;:::o;10599:366::-;10741:3;10762:67;10826:2;10821:3;10762:67;:::i;:::-;10755:74;;10838:93;10927:3;10838:93;:::i;:::-;10956:2;10951:3;10947:12;10940:19;;10599:366;;;:::o;10971:419::-;11137:4;11175:2;11164:9;11160:18;11152:26;;11224:9;11218:4;11214:20;11210:1;11199:9;11195:17;11188:47;11252:131;11378:4;11252:131;:::i;:::-;11244:139;;10971:419;;;:::o;11396:143::-;11453:5;11484:6;11478:13;11469:22;;11500:33;11527:5;11500:33;:::i;:::-;11396:143;;;;:::o;11545:351::-;11615:6;11664:2;11652:9;11643:7;11639:23;11635:32;11632:119;;;11670:79;;:::i;:::-;11632:119;11790:1;11815:64;11871:7;11862:6;11851:9;11847:22;11815:64;:::i;:::-;11805:74;;11761:128;11545:351;;;;:::o;11902:169::-;12042:21;12038:1;12030:6;12026:14;12019:45;11902:169;:::o;12077:366::-;12219:3;12240:67;12304:2;12299:3;12240:67;:::i;:::-;12233:74;;12316:93;12405:3;12316:93;:::i;:::-;12434:2;12429:3;12425:12;12418:19;;12077:366;;;:::o;12449:419::-;12615:4;12653:2;12642:9;12638:18;12630:26;;12702:9;12696:4;12692:20;12688:1;12677:9;12673:17;12666:47;12730:131;12856:4;12730:131;:::i;:::-;12722:139;;12449:419;;;:::o;12874:332::-;12995:4;13033:2;13022:9;13018:18;13010:26;;13046:71;13114:1;13103:9;13099:17;13090:6;13046:71;:::i;:::-;13127:72;13195:2;13184:9;13180:18;13171:6;13127:72;:::i;:::-;12874:332;;;;;:::o;13212:137::-;13266:5;13297:6;13291:13;13282:22;;13313:30;13337:5;13313:30;:::i;:::-;13212:137;;;;:::o;13355:345::-;13422:6;13471:2;13459:9;13450:7;13446:23;13442:32;13439:119;;;13477:79;;:::i;:::-;13439:119;13597:1;13622:61;13675:7;13666:6;13655:9;13651:22;13622:61;:::i;:::-;13612:71;;13568:125;13355:345;;;;:::o;13706:180::-;13754:77;13751:1;13744:88;13851:4;13848:1;13841:15;13875:4;13872:1;13865:15;13892:320;13936:6;13973:1;13967:4;13963:12;13953:22;;14020:1;14014:4;14010:12;14041:18;14031:81;;14097:4;14089:6;14085:17;14075:27;;14031:81;14159:2;14151:6;14148:14;14128:18;14125:38;14122:84;;14178:18;;:::i;:::-;14122:84;13943:269;13892:320;;;:::o;14218:166::-;14358:18;14354:1;14346:6;14342:14;14335:42;14218:166;:::o;14390:366::-;14532:3;14553:67;14617:2;14612:3;14553:67;:::i;:::-;14546:74;;14629:93;14718:3;14629:93;:::i;:::-;14747:2;14742:3;14738:12;14731:19;;14390:366;;;:::o;14762:419::-;14928:4;14966:2;14955:9;14951:18;14943:26;;15015:9;15009:4;15005:20;15001:1;14990:9;14986:17;14979:47;15043:131;15169:4;15043:131;:::i;:::-;15035:139;;14762:419;;;:::o;15187:147::-;15288:11;15325:3;15310:18;;15187:147;;;;:::o;15340:114::-;;:::o;15460:398::-;15619:3;15640:83;15721:1;15716:3;15640:83;:::i;:::-;15633:90;;15732:93;15821:3;15732:93;:::i;:::-;15850:1;15845:3;15841:11;15834:18;;15460:398;;;:::o;15864:379::-;16048:3;16070:147;16213:3;16070:147;:::i;:::-;16063:154;;16234:3;16227:10;;15864:379;;;:::o;16249:169::-;16389:21;16385:1;16377:6;16373:14;16366:45;16249:169;:::o;16424:366::-;16566:3;16587:67;16651:2;16646:3;16587:67;:::i;:::-;16580:74;;16663:93;16752:3;16663:93;:::i;:::-;16781:2;16776:3;16772:12;16765:19;;16424:366;;;:::o;16796:419::-;16962:4;17000:2;16989:9;16985:18;16977:26;;17049:9;17043:4;17039:20;17035:1;17024:9;17020:17;17013:47;17077:131;17203:4;17077:131;:::i;:::-;17069:139;;16796:419;;;:::o;17221:167::-;17361:19;17357:1;17349:6;17345:14;17338:43;17221:167;:::o;17394:366::-;17536:3;17557:67;17621:2;17616:3;17557:67;:::i;:::-;17550:74;;17633:93;17722:3;17633:93;:::i;:::-;17751:2;17746:3;17742:12;17735:19;;17394:366;;;:::o;17766:419::-;17932:4;17970:2;17959:9;17955:18;17947:26;;18019:9;18013:4;18009:20;18005:1;17994:9;17990:17;17983:47;18047:131;18173:4;18047:131;:::i;:::-;18039:139;;17766:419;;;:::o;18191:332::-;18312:4;18350:2;18339:9;18335:18;18327:26;;18363:71;18431:1;18420:9;18416:17;18407:6;18363:71;:::i;:::-;18444:72;18512:2;18501:9;18497:18;18488:6;18444:72;:::i;:::-;18191:332;;;;;:::o;18529:::-;18650:4;18688:2;18677:9;18673:18;18665:26;;18701:71;18769:1;18758:9;18754:17;18745:6;18701:71;:::i;:::-;18782:72;18850:2;18839:9;18835:18;18826:6;18782:72;:::i;:::-;18529:332;;;;;:::o;18867:180::-;18915:77;18912:1;18905:88;19012:4;19009:1;19002:15;19036:4;19033:1;19026:15;19053:410;19093:7;19116:20;19134:1;19116:20;:::i;:::-;19111:25;;19150:20;19168:1;19150:20;:::i;:::-;19145:25;;19205:1;19202;19198:9;19227:30;19245:11;19227:30;:::i;:::-;19216:41;;19406:1;19397:7;19393:15;19390:1;19387:22;19367:1;19360:9;19340:83;19317:139;;19436:18;;:::i;:::-;19317:139;19101:362;19053:410;;;;:::o;19469:180::-;19517:77;19514:1;19507:88;19614:4;19611:1;19604:15;19638:4;19635:1;19628:15;19655:185;19695:1;19712:20;19730:1;19712:20;:::i;:::-;19707:25;;19746:20;19764:1;19746:20;:::i;:::-;19741:25;;19785:1;19775:35;;19790:18;;:::i;:::-;19775:35;19832:1;19829;19825:9;19820:14;;19655:185;;;;:::o;19846:180::-;19894:77;19891:1;19884:88;19991:4;19988:1;19981:15;20015:4;20012:1;20005:15;20032:442;20181:4;20219:2;20208:9;20204:18;20196:26;;20232:71;20300:1;20289:9;20285:17;20276:6;20232:71;:::i;:::-;20313:72;20381:2;20370:9;20366:18;20357:6;20313:72;:::i;:::-;20395;20463:2;20452:9;20448:18;20439:6;20395:72;:::i;:::-;20032:442;;;;;;:::o;20480:180::-;20528:77;20525:1;20518:88;20625:4;20622:1;20615:15;20649:4;20646:1;20639:15;20666:143;20723:5;20754:6;20748:13;20739:22;;20770:33;20797:5;20770:33;:::i;:::-;20666:143;;;;:::o;20815:351::-;20885:6;20934:2;20922:9;20913:7;20909:23;20905:32;20902:119;;;20940:79;;:::i;:::-;20902:119;21060:1;21085:64;21141:7;21132:6;21121:9;21117:22;21085:64;:::i;:::-;21075:74;;21031:128;20815:351;;;;:::o;21172:85::-;21217:7;21246:5;21235:16;;21172:85;;;:::o;21263:158::-;21321:9;21354:61;21372:42;21381:32;21407:5;21381:32;:::i;:::-;21372:42;:::i;:::-;21354:61;:::i;:::-;21341:74;;21263:158;;;:::o;21427:147::-;21522:45;21561:5;21522:45;:::i;:::-;21517:3;21510:58;21427:147;;:::o;21580:114::-;21647:6;21681:5;21675:12;21665:22;;21580:114;;;:::o;21700:184::-;21799:11;21833:6;21828:3;21821:19;21873:4;21868:3;21864:14;21849:29;;21700:184;;;;:::o;21890:132::-;21957:4;21980:3;21972:11;;22010:4;22005:3;22001:14;21993:22;;21890:132;;;:::o;22028:108::-;22105:24;22123:5;22105:24;:::i;:::-;22100:3;22093:37;22028:108;;:::o;22142:179::-;22211:10;22232:46;22274:3;22266:6;22232:46;:::i;:::-;22310:4;22305:3;22301:14;22287:28;;22142:179;;;;:::o;22327:113::-;22397:4;22429;22424:3;22420:14;22412:22;;22327:113;;;:::o;22476:732::-;22595:3;22624:54;22672:5;22624:54;:::i;:::-;22694:86;22773:6;22768:3;22694:86;:::i;:::-;22687:93;;22804:56;22854:5;22804:56;:::i;:::-;22883:7;22914:1;22899:284;22924:6;22921:1;22918:13;22899:284;;;23000:6;22994:13;23027:63;23086:3;23071:13;23027:63;:::i;:::-;23020:70;;23113:60;23166:6;23113:60;:::i;:::-;23103:70;;22959:224;22946:1;22943;22939:9;22934:14;;22899:284;;;22903:14;23199:3;23192:10;;22600:608;;;22476:732;;;;:::o;23214:831::-;23477:4;23515:3;23504:9;23500:19;23492:27;;23529:71;23597:1;23586:9;23582:17;23573:6;23529:71;:::i;:::-;23610:80;23686:2;23675:9;23671:18;23662:6;23610:80;:::i;:::-;23737:9;23731:4;23727:20;23722:2;23711:9;23707:18;23700:48;23765:108;23868:4;23859:6;23765:108;:::i;:::-;23757:116;;23883:72;23951:2;23940:9;23936:18;23927:6;23883:72;:::i;:::-;23965:73;24033:3;24022:9;24018:19;24009:6;23965:73;:::i;:::-;23214:831;;;;;;;;:::o;24051:220::-;24191:34;24187:1;24179:6;24175:14;24168:58;24260:3;24255:2;24247:6;24243:15;24236:28;24051:220;:::o;24277:366::-;24419:3;24440:67;24504:2;24499:3;24440:67;:::i;:::-;24433:74;;24516:93;24605:3;24516:93;:::i;:::-;24634:2;24629:3;24625:12;24618:19;;24277:366;;;:::o;24649:419::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:131;25056:4;24930:131;:::i;:::-;24922:139;;24649:419;;;:::o;25074:320::-;25189:4;25227:2;25216:9;25212:18;25204:26;;25240:71;25308:1;25297:9;25293:17;25284:6;25240:71;:::i;:::-;25321:66;25383:2;25372:9;25368:18;25359:6;25321:66;:::i;:::-;25074:320;;;;;:::o;25400:194::-;25440:4;25460:20;25478:1;25460:20;:::i;:::-;25455:25;;25494:20;25512:1;25494:20;:::i;:::-;25489:25;;25538:1;25535;25531:9;25523:17;;25562:1;25556:4;25553:11;25550:37;;;25567:18;;:::i;:::-;25550:37;25400:194;;;;:::o;25600:191::-;25640:3;25659:20;25677:1;25659:20;:::i;:::-;25654:25;;25693:20;25711:1;25693:20;:::i;:::-;25688:25;;25736:1;25733;25729:9;25722:16;;25757:3;25754:1;25751:10;25748:36;;;25764:18;;:::i;:::-;25748:36;25600:191;;;;:::o

Swarm Source

ipfs://d971d5d260bc61637b40b6f6a6d0488bb39a2d38ae3518ee20302efe221c0270

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

OVERVIEW

Opal is a privacy-first perpetuals exchange built for traders who demand fairness. Sealed trades no one can exploit, not even the house. 100% of revenue distributed in ETH to ALL holders.

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.