ETH Price: $2,511.63 (+0.49%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer226598202025-06-08 12:18:4736 mins ago1749385127IN
0x11Fa1193...eBaa3a046
0 ETH0.00003320.46826142
Approve226590222025-06-08 9:37:353 hrs ago1749375455IN
0x11Fa1193...eBaa3a046
0 ETH0.000171623.63783144
Approve226586182025-06-08 8:16:354 hrs ago1749370595IN
0x11Fa1193...eBaa3a046
0 ETH0.000043810.9293862
Approve226581982025-06-08 6:51:596 hrs ago1749365519IN
0x11Fa1193...eBaa3a046
0 ETH0.000043870.93123242
Approve226558012025-06-07 22:49:5914 hrs ago1749336599IN
0x11Fa1193...eBaa3a046
0 ETH0.000067571.43421597
Approve226538352025-06-07 16:15:1120 hrs ago1749312911IN
0x11Fa1193...eBaa3a046
0 ETH0.000296616.28883317
Approve226534512025-06-07 14:58:1121 hrs ago1749308291IN
0x11Fa1193...eBaa3a046
0 ETH0.000210624.46464559
Approve226527932025-06-07 12:44:5924 hrs ago1749300299IN
0x11Fa1193...eBaa3a046
0 ETH0.000150053.18482569
Approve226521342025-06-07 10:32:1126 hrs ago1749292331IN
0x11Fa1193...eBaa3a046
0 ETH0.000086341.83251516
Approve226520172025-06-07 10:08:3526 hrs ago1749290915IN
0x11Fa1193...eBaa3a046
0 ETH0.000078161.65901161
Approve226503452025-06-07 4:33:1132 hrs ago1749270791IN
0x11Fa1193...eBaa3a046
0 ETH0.000057741.22399641
Approve226489252025-06-06 23:47:2337 hrs ago1749253643IN
0x11Fa1193...eBaa3a046
0 ETH0.000125362.66079567
Transfer226485652025-06-06 22:35:2338 hrs ago1749249323IN
0x11Fa1193...eBaa3a046
0 ETH0.0006180812.5962611
Approve226481972025-06-06 21:21:4739 hrs ago1749244907IN
0x11Fa1193...eBaa3a046
0 ETH0.000135622.87482994
Transfer226481192025-06-06 21:06:1139 hrs ago1749243971IN
0x11Fa1193...eBaa3a046
0 ETH0.000164442.48484734
Approve226480502025-06-06 20:52:1140 hrs ago1749243131IN
0x11Fa1193...eBaa3a046
0 ETH0.000135942.88527735
Approve226478902025-06-06 20:20:1140 hrs ago1749241211IN
0x11Fa1193...eBaa3a046
0 ETH0.000077571.65351849
Approve226474912025-06-06 18:59:5941 hrs ago1749236399IN
0x11Fa1193...eBaa3a046
0 ETH0.000303956.44448308
Approve226474262025-06-06 18:46:5942 hrs ago1749235619IN
0x11Fa1193...eBaa3a046
0 ETH0.00479917101.72703307
Approve226472892025-06-06 18:19:2342 hrs ago1749233963IN
0x11Fa1193...eBaa3a046
0 ETH0.000312066.61636585
Approve226469342025-06-06 17:07:5943 hrs ago1749229679IN
0x11Fa1193...eBaa3a046
0 ETH0.000267045.66042489
Approve226469272025-06-06 17:06:3543 hrs ago1749229595IN
0x11Fa1193...eBaa3a046
0 ETH0.000264225.60785309
Approve226469202025-06-06 17:05:1143 hrs ago1749229511IN
0x11Fa1193...eBaa3a046
0 ETH0.000147353.14098517
Approve226469122025-06-06 17:03:3543 hrs ago1749229415IN
0x11Fa1193...eBaa3a046
0 ETH0.000302466.41120398
Approve226467822025-06-06 16:37:3544 hrs ago1749227855IN
0x11Fa1193...eBaa3a046
0 ETH0.000246335.22808618
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer226590232025-06-08 9:37:473 hrs ago1749375467
0x11Fa1193...eBaa3a046
0.16051888 ETH
Transfer226590232025-06-08 9:37:473 hrs ago1749375467
0x11Fa1193...eBaa3a046
0.16538308 ETH
Transfer226590232025-06-08 9:37:473 hrs ago1749375467
0x11Fa1193...eBaa3a046
0.16051888 ETH
Transfer226590232025-06-08 9:37:473 hrs ago1749375467
0x11Fa1193...eBaa3a046
0.48642085 ETH
Transfer226539242025-06-07 16:32:5920 hrs ago1749313979
0x11Fa1193...eBaa3a046
0.1484169 ETH
Transfer226539242025-06-07 16:32:5920 hrs ago1749313979
0x11Fa1193...eBaa3a046
0.15291438 ETH
Transfer226539242025-06-07 16:32:5920 hrs ago1749313979
0x11Fa1193...eBaa3a046
0.1484169 ETH
Transfer226539242025-06-07 16:32:5920 hrs ago1749313979
0x11Fa1193...eBaa3a046
0.4497482 ETH
Transfer226533912025-06-07 14:45:4722 hrs ago1749307547
0x11Fa1193...eBaa3a046
0.16248814 ETH
Transfer226533912025-06-07 14:45:4722 hrs ago1749307547
0x11Fa1193...eBaa3a046
0.16741203 ETH
Transfer226533912025-06-07 14:45:4722 hrs ago1749307547
0x11Fa1193...eBaa3a046
0.16248814 ETH
Transfer226533912025-06-07 14:45:4722 hrs ago1749307547
0x11Fa1193...eBaa3a046
0.49238832 ETH
Transfer226518802025-06-07 9:41:1127 hrs ago1749289271
0x11Fa1193...eBaa3a046
0.16654961 ETH
Transfer226518802025-06-07 9:41:1127 hrs ago1749289271
0x11Fa1193...eBaa3a046
0.17159657 ETH
Transfer226518802025-06-07 9:41:1127 hrs ago1749289271
0x11Fa1193...eBaa3a046
0.16654961 ETH
Transfer226518802025-06-07 9:41:1127 hrs ago1749289271
0x11Fa1193...eBaa3a046
0.50469579 ETH
Transfer226489212025-06-06 23:46:3537 hrs ago1749253595
0x11Fa1193...eBaa3a046
0.18379405 ETH
Transfer226489212025-06-06 23:46:3537 hrs ago1749253595
0x11Fa1193...eBaa3a046
0.18936357 ETH
Transfer226489212025-06-06 23:46:3537 hrs ago1749253595
0x11Fa1193...eBaa3a046
0.18379405 ETH
Transfer226489212025-06-06 23:46:3537 hrs ago1749253595
0x11Fa1193...eBaa3a046
0.55695168 ETH
Transfer226484042025-06-06 22:03:1138 hrs ago1749247391
0x11Fa1193...eBaa3a046
0.15891437 ETH
Transfer226484042025-06-06 22:03:1138 hrs ago1749247391
0x11Fa1193...eBaa3a046
0.16372996 ETH
Transfer226484042025-06-06 22:03:1138 hrs ago1749247391
0x11Fa1193...eBaa3a046
0.15891437 ETH
Transfer226484042025-06-06 22:03:1138 hrs ago1749247391
0x11Fa1193...eBaa3a046
0.4815587 ETH
Transfer226482182025-06-06 21:25:5939 hrs ago1749245159
0x11Fa1193...eBaa3a046
0.163664 ETH
View All Internal 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:
NKP

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : nkp.sol
/**
 *Submitted for verification at Etherscan.io on 2024-09-18
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;
pragma experimental ABIEncoderV2;

import "@openzeppelin/contracts/security/ReentrancyGuard.sol";


abstract contract Ownable {
    address private _owner;

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

library SafeERC20 {
    function safeTransfer(address token, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: INTERNAL TRANSFER_FAILED');
    }
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external;
}

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

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

    function WETH() external pure returns (address);

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

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

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

interface IWhitelistManager {                  
    function isWhitelisted(address) external view returns (bool);
}

contract NKP is Ownable, ReentrancyGuard {
    string private constant _name = unicode"NonKyotoProtocol"; //
    string private constant _symbol = unicode"NKP"; //
    uint256 private constant _totalSupply = 1_000_000_000 * 1e18; //
    uint256 private constant MAX_SWAP_SLIPPAGE_PCT = 20;
    uint256 private constant MIN_LIQUIDITY_ETH = 10 ether; 

    uint256 public maxTransactionAmount = 100_000 * 1e18; //
    uint256 public maxWallet = 100_000 * 1e18;  //
    uint256 public swapTokensAtAmount =  500_000 * 1e18; //

    address private revWallet = 0xC39E0B56ae2341484100024234263814dC8953D6; //
    address private treasuryWallet = 0xA492d6AdB1B2E7395B0731567cA29fCf9252232E; //
    address private teamWallet = 0xce66d115571B844291DB1f292aBd2eEf1a21e11a; //
    address private seedWallet = 0x4db17f9b1253776747c5Ae65E6BCBA7bfA083749; //
    address private bizDevWallet = 0x62b3C685957A44A79D5E0BDDe6Eeab9Ef5bD6e7f; //
    address private marketingWallet = 0xcfb7D34a36ab927e6BD30CC91D11Ce3C7A8Eb439; //
    address private partnershipWallet = 0x77A9e5a39F85009FC27175740B7dBE4334CD6c23; //
    address private ecosystemWallet = 0x8cC99e883a43913C155FEafc04C6a0a229342b42; //

    address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; //

    uint8 public buyTotalFees = 50;
    uint8 public sellTotalFees = 50;

    uint8 public revFee = 33;
    uint8 public treasuryFee = 34;
    uint8 public bizDevFee = 33;

    bool private swapping;
    bool public limitsInEffect = true;
    bool private launched;

    IWhitelistManager public whitelistManager;
    uint256 public launchTimestamp; 
    uint256 private constant WHITELIST_DURATION = 15 minutes;


    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 teamETH, uint256 revETH, uint256 TreasuryETH);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public immutable uniswapV2Pair;

    constructor() {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), WETH);
        automatedMarketMakerPairs[uniswapV2Pair] = true;

        setExcludedFromFees(owner(), true);
        setExcludedFromFees(address(0xdead), true);
        setExcludedFromFees(revWallet, true);

        setExcludedFromMaxTransaction(owner(), true);
        setExcludedFromMaxTransaction(address(uniswapV2Router), true);
        setExcludedFromMaxTransaction(address(0xdead), true);
        setExcludedFromMaxTransaction(address(uniswapV2Pair), true);
        setExcludedFromMaxTransaction(revWallet, true);

        // Treasury -> %15
        setExcludedFromFees(treasuryWallet, true);
        setExcludedFromMaxTransaction(treasuryWallet, true);
        _balances[treasuryWallet] = 150_000_000 * 1e18;
        emit Transfer(address(0), treasuryWallet, _balances[treasuryWallet]);

        // Partnership -> %10
        setExcludedFromFees(partnershipWallet, true);
        setExcludedFromMaxTransaction(partnershipWallet, true);
        _balances[partnershipWallet] = 100_000_000 * 1e18;
        emit Transfer(address(0), partnershipWallet, _balances[partnershipWallet]);

        // Marketing -> %10
        setExcludedFromFees(marketingWallet, true);
        setExcludedFromMaxTransaction(marketingWallet, true);
        _balances[marketingWallet] = 100_000_000 * 1e18;
        emit Transfer(address(0), marketingWallet, _balances[marketingWallet]);

        // Ecosystem -> %5
        setExcludedFromFees(ecosystemWallet, true);
        setExcludedFromMaxTransaction(ecosystemWallet, true);
        _balances[ecosystemWallet] = 50_000_000 * 1e18;
        emit Transfer(address(0), ecosystemWallet, _balances[ecosystemWallet]);

        // Team -> %20
        setExcludedFromFees(teamWallet, true);
        setExcludedFromMaxTransaction(teamWallet, true);
        _balances[teamWallet] = 200_000_000 * 1e18;
        emit Transfer(address(0), teamWallet, _balances[teamWallet]);

        // Seed -> %5
        setExcludedFromFees(seedWallet, true);
        setExcludedFromMaxTransaction(seedWallet, true);
        _balances[seedWallet] = 50_000_000 * 1e18;
        emit Transfer(address(0), seedWallet, _balances[seedWallet]);

        // BizDev -> %0
        setExcludedFromFees(bizDevWallet, true);
        setExcludedFromMaxTransaction(bizDevWallet, true);
        _balances[bizDevWallet] = 0 * 1e18;
        emit Transfer(address(0), bizDevWallet, _balances[bizDevWallet]);

        // LP -> 35%
        setExcludedFromFees(address(this), true);
        setExcludedFromMaxTransaction(address(this), true);
        _balances[address(this)] = 350_000_000 * 1e18;
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
    }

    receive() external payable {}

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

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

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
        uint256 currentAllowance = _allowances[sender][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, msg.sender, currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function setWhitelistManager(address mgr) external onlyOwner {
        require(address(whitelistManager) == address(0),
            "WhitelistManager already set");
        whitelistManager = IWhitelistManager(mgr);
    }

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

        if (!launched && (from != owner() && from != address(this) && to != owner())) {
            revert("Trading not enabled");
        }

        if(launched && block.timestamp <= launchTimestamp + WHITELIST_DURATION && address(whitelistManager)!=address(0)){
            if(automatedMarketMakerPairs[from])  require(whitelistManager.isWhitelisted(to),"Buyer not whitelisted");
            else if(automatedMarketMakerPairs[to]) require(whitelistManager.isWhitelisted(from),"Seller not whitelisted");
        }

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTx");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount,"Sell transfer amount exceeds the maxTx");
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

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

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 1000;
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 1000;
            }

            if (fees > 0) {
                unchecked {
                    amount = amount - fees;
                    _balances[from] -= fees;
                    _balances[address(this)] += fees;
                }
                emit Transfer(from, address(this), fees);
            }
        }
        unchecked {
            _balances[from] -= amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

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

    function setDistributionFees(uint8 _RevFee, uint8 _TreasuryFee, uint8 _BizDevFee) external onlyOwner {
        revFee = _RevFee;
        treasuryFee = _TreasuryFee;
        bizDevFee = _BizDevFee;
        require((revFee + treasuryFee + bizDevFee) == 100, "Distribution have to be equal to 100%");
    }

    function setFees(uint8 _buyTotalFees, uint8 _sellTotalFees) external onlyOwner {
        require(_buyTotalFees <= 50, "Buy fees must be less than or equal to 5%");
        require(_sellTotalFees <= 50, "Sell fees must be less than or equal to 5%");
        buyTotalFees = _buyTotalFees;
        sellTotalFees = _sellTotalFees;
    }

    function setExcludedFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function setExcludedFromMaxTransaction(address account, bool excluded) public onlyOwner {
        _isExcludedMaxTransactionAmount[account] = excluded;
    }

    function airdropWallets(address[] memory addresses, uint256[] memory amounts) external onlyOwner {
        require(!launched, "Already launched");
        require(addresses.length == amounts.length, "Arrays length mismatch");
        for (uint256 i = 0; i < addresses.length; i++) {
            require(_balances[msg.sender] >= amounts[i], "ERC20: transfer amount exceeds balance");
            _balances[addresses[i]] += amounts[i];
            _balances[msg.sender] -= amounts[i];
            emit Transfer(msg.sender, addresses[i], amounts[i]);
        }
    }

    function openTrade() external onlyOwner {
        require(!launched, "Already launched");
        require(address(whitelistManager) != address(0), "WL not set");
        launched = true;
        launchTimestamp = block.timestamp;  
    }

    function AddUniswapLiquidity() external payable onlyOwner {
        require(!launched, "Already launched");
        require(msg.value >= MIN_LIQUIDITY_ETH, "Liquidity: need >= 10 ETH");

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            _balances[address(this)],
            0,
            0,
            treasuryWallet,
            block.timestamp
        );
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed");
        automatedMarketMakerPairs[pair] = value;
    }

    function setSwapAtAmount(uint256 newSwapAmount) external onlyOwner {
        require(newSwapAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% of the supply");
        require(newSwapAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% of the supply");
        swapTokensAtAmount = newSwapAmount;
    }

    function setMaxTxnAmount(uint256 newMaxTx) external onlyOwner {
        require(newMaxTx >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set max transaction lower than 0.1%");
        maxTransactionAmount = newMaxTx * (10**18);
    }

    function setMaxWalletAmount(uint256 newMaxWallet) external onlyOwner {
        require(newMaxWallet >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set max wallet lower than 0.1%");
        maxWallet = newMaxWallet * (10**18);
    }

    function updateRevWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        revWallet = newAddress;
    }

    function updateTreasuryWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        treasuryWallet = newAddress;
    }

    function updateTeamWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        teamWallet = newAddress;
    }

    function excludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function withdrawStuckToken(address token, address to) external onlyOwner {
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        SafeERC20.safeTransfer(token, to, _contractBalance);
    }

    function withdrawStuckETH(address addr) external onlyOwner {
        require(addr != address(0), "Invalid address");

        (bool success, ) = addr.call{value: address(this).balance}("");
        require(success, "Withdrawal failed");
    }

    function swapBack() private nonReentrant {
        uint256 swapThreshold = swapTokensAtAmount;
        bool success;

        if (balanceOf(address(this)) > swapTokensAtAmount * 20) {
            swapThreshold = swapTokensAtAmount * 20;
        }

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

        uint256 quotedEth = uniswapV2Router.getAmountsOut(swapThreshold, path)[1];
        if (quotedEth == 0) return;                                // pool too thin

        uint256 minOut = quotedEth * (100 - MAX_SWAP_SLIPPAGE_PCT) / 100;

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(swapThreshold, minOut, path, address(this), block.timestamp);

        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            uint256 ethForRev = (ethBalance * revFee) / 100;
            uint256 ethForTeam = (ethBalance * bizDevFee) / 100;
            uint256 ethForTreasury = ethBalance - ethForRev - ethForTeam;

            (success, ) = address(teamWallet).call{value: ethForTeam}("");
            (success, ) = address(treasuryWallet).call{value: ethForTreasury}("");
            (success, ) = address(revWallet).call{value: ethForRev}("");

            emit SwapAndLiquify(swapThreshold, ethForTeam, ethForRev, ethForTreasury);
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"revETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TreasuryETH","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AddUniswapLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bizDevFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_RevFee","type":"uint8"},{"internalType":"uint8","name":"_TreasuryFee","type":"uint8"},{"internalType":"uint8","name":"_BizDevFee","type":"uint8"}],"name":"setDistributionFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"_sellTotalFees","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTx","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapAmount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mgr","type":"address"}],"name":"setWhitelistManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistManager","outputs":[{"internalType":"contract IWhitelistManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405269152d02c7e14af680000060025569152d02c7e14af68000006003556969e10de76676d080000060045573c39e0b56ae2341484100024234263814dc8953d660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a492d6adb1b2e7395b0731567ca29fcf9252232e60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ce66d115571b844291db1f292abd2eef1a21e11a60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734db17f9b1253776747c5ae65e6bcba7bfa08374960085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507362b3c685957a44a79d5e0bdde6eeab9ef5bd6e7f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cfb7d34a36ab927e6bd30cc91d11ce3c7a8eb439600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507377a9e5a39f85009fc27175740b7dbe4334cd6c23600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738cc99e883a43913c155feafc04c6a0a229342b42600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506032600c60146101000a81548160ff021916908360ff1602179055506032600c60156101000a81548160ff021916908360ff1602179055506021600c60166101000a81548160ff021916908360ff1602179055506022600c60176101000a81548160ff021916908360ff1602179055506021600c60186101000a81548160ff021916908360ff1602179055506001600c601a6101000a81548160ff02191690831515021790555034801562000381575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200044c919062001800565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26040518363ffffffff1660e01b81526004016200049c92919062001841565b6020604051808303815f875af1158015620004b9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004df919062001800565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160135f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200058b6200057d620013f960201b60201c565b60016200142060201b60201c565b620005a061dead60016200142060201b60201c565b620005d460055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b620005f6620005e8620013f960201b60201c565b6001620014f860201b60201c565b6200061d737a250d5630b4cf539739df2c5dacb4c659f2488d6001620014f860201b60201c565b6200063261dead6001620014f860201b60201c565b620006476080516001620014f860201b60201c565b6200067b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b620006af60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b620006e360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b6a7c13bc4b2c133c56000000600f5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040516200082f919062001886565b60405180910390a36200086b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b6200089f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b6a52b7d2dcc80cd2e4000000600f5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051620009eb919062001886565b60405180910390a362000a27600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b62000a5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b6a52b7d2dcc80cd2e4000000600f5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460405162000ba7919062001886565b60405180910390a362000be3600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b62000c17600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b6a295be96e64066972000000600f5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460405162000d63919062001886565b60405180910390a362000d9f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b62000dd360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b6aa56fa5b99019a5c8000000600f5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460405162000f1f919062001886565b60405180910390a362000f5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b62000f8f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b6a295be96e64066972000000600f5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051620010db919062001886565b60405180910390a36200111760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200142060201b60201c565b6200114b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620014f860201b60201c565b5f600f5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040516200128c919062001886565b60405180910390a3620012a73060016200142060201b60201c565b620012ba306001620014f860201b60201c565b6b0121836204bc2ce21e000000600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051620013a4919062001886565b60405180910390a3620013f330737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620015d060201b60201c565b62001a47565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff1662001447620013f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620014a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200149790620018ff565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff166200151f620013f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462001578576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200156f90620018ff565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016389062001993565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620016b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016a99062001a27565b60405180910390fd5b8060105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200178e919062001886565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620017ca826200179f565b9050919050565b620017dc81620017be565b8114620017e7575f80fd5b50565b5f81519050620017fa81620017d1565b92915050565b5f602082840312156200181857620018176200179b565b5b5f6200182784828501620017ea565b91505092915050565b6200183b81620017be565b82525050565b5f604082019050620018565f83018562001830565b62001865602083018462001830565b9392505050565b5f819050919050565b62001880816200186c565b82525050565b5f6020820190506200189b5f83018462001875565b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620018e7602083620018a1565b9150620018f482620018b1565b602082019050919050565b5f6020820190508181035f8301526200191881620018d9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200197b602483620018a1565b915062001988826200191f565b604082019050919050565b5f6020820190508181035f830152620019ac816200196d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f62001a0f602283620018a1565b915062001a1c82620019b3565b604082019050919050565b5f6020820190508181035f83015262001a408162001a01565b9050919050565b608051615a7f62001a675f395f81816110e50152611b5e0152615a7f5ff3fe60806040526004361061025f575f3560e01c8063715018a611610143578063bc205ad3116100b5578063d85ba06311610079578063d85ba06314610872578063dd62ed3e1461089c578063e2f45605146108d8578063e710794714610902578063f8b45b051461092a578063fb201b1d1461095457610266565b8063bc205ad3146107a4578063bcfa9287146107cc578063c8c8ebe4146107f6578063cc32d17614610820578063d201b01e1461084a57610266565b806385ecafd71161010757806385ecafd7146106885780638da5cb5b146106c457806395d89b41146106ee5780639a7a23d614610718578063a9059cbb14610740578063adfa29e51461077c57610266565b8063715018a6146105e457806374010ece146105fa578063751039fc146106225780637cb332bb14610638578063809d458d1461066057610266565b80633c090c46116101dc578063590ffdce116101a0578063590ffdce146104dc5780636402511e1461050457806365cf7c9b1461052c57806366650dae146105565780636a486a8e1461057e57806370a08231146105a857610266565b80633c090c461461041057806341a494091461043857806349bd5a5e146104605780634a62bb651461048a5780634fcd2446146104b457610266565b806323b872dd1161022357806323b872dd1461034e57806326563b401461038a57806327a14fc2146103b45780632ec64b6c146103dc578063313ce567146103e657610266565b806306fdde031461026a578063095ea7b3146102945780631694505e146102d057806318160ddd146102fa57806321d37e391461032457610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e61096a565b60405161028b9190613d96565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613e54565b6109a7565b6040516102c79190613eac565b60405180910390f35b3480156102db575f80fd5b506102e46109bd565b6040516102f19190613f20565b60405180910390f35b348015610305575f80fd5b5061030e6109d5565b60405161031b9190613f48565b60405180910390f35b34801561032f575f80fd5b506103386109e8565b6040516103459190613f7c565b60405180910390f35b348015610359575f80fd5b50610374600480360381019061036f9190613f95565b6109fb565b6040516103819190613eac565b60405180910390f35b348015610395575f80fd5b5061039e610b07565b6040516103ab9190614005565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d5919061401e565b610b2c565b005b6103e4610c34565b005b3480156103f1575f80fd5b506103fa610e40565b6040516104079190613f7c565b60405180910390f35b34801561041b575f80fd5b5061043660048036038101906104319190614073565b610e48565b005b348015610443575f80fd5b5061045e600480360381019061045991906140c3565b610f9c565b005b34801561046b575f80fd5b506104746110e3565b60405161048191906140fd565b60405180910390f35b348015610495575f80fd5b5061049e611107565b6040516104ab9190613eac565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190614116565b61111a565b005b3480156104e7575f80fd5b5061050260048036038101906104fd919061417e565b611257565b005b34801561050f575f80fd5b5061052a6004803603810190610525919061401e565b611324565b005b348015610537575f80fd5b5061054061146a565b60405161054d9190613f48565b60405180910390f35b348015610561575f80fd5b5061057c6004803603810190610577919061417e565b611470565b005b348015610589575f80fd5b5061059261153d565b60405161059f9190613f7c565b60405180910390f35b3480156105b3575f80fd5b506105ce60048036038101906105c991906140c3565b611550565b6040516105db9190613f48565b60405180910390f35b3480156105ef575f80fd5b506105f8611596565b005b348015610605575f80fd5b50610620600480360381019061061b919061401e565b61164c565b005b34801561062d575f80fd5b50610636611754565b005b348015610643575f80fd5b5061065e600480360381019061065991906140c3565b6117e5565b005b34801561066b575f80fd5b50610686600480360381019061068191906140c3565b61190b565b005b348015610693575f80fd5b506106ae60048036038101906106a991906140c3565b611a31565b6040516106bb9190613eac565b60405180910390f35b3480156106cf575f80fd5b506106d8611a83565b6040516106e591906140fd565b60405180910390f35b3480156106f9575f80fd5b50610702611aaa565b60405161070f9190613d96565b60405180910390f35b348015610723575f80fd5b5061073e6004803603810190610739919061417e565b611ae7565b005b34801561074b575f80fd5b5061076660048036038101906107619190613e54565b611c42565b6040516107739190613eac565b60405180910390f35b348015610787575f80fd5b506107a2600480360381019061079d91906140c3565b611c58565b005b3480156107af575f80fd5b506107ca60048036038101906107c591906141bc565b611d7e565b005b3480156107d7575f80fd5b506107e0611e7e565b6040516107ed9190613f7c565b60405180910390f35b348015610801575f80fd5b5061080a611e91565b6040516108179190613f48565b60405180910390f35b34801561082b575f80fd5b50610834611e97565b6040516108419190613f7c565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b91906140c3565b611eaa565b005b34801561087d575f80fd5b50610886612039565b6040516108939190613f7c565b60405180910390f35b3480156108a7575f80fd5b506108c260048036038101906108bd91906141bc565b61204c565b6040516108cf9190613f48565b60405180910390f35b3480156108e3575f80fd5b506108ec6120ce565b6040516108f99190613f48565b60405180910390f35b34801561090d575f80fd5b50610928600480360381019061092391906143fa565b6120d4565b005b348015610935575f80fd5b5061093e612427565b60405161094b9190613f48565b60405180910390f35b34801561095f575f80fd5b5061096861242d565b005b60606040518060400160405280601081526020017f4e6f6e4b796f746f50726f746f636f6c00000000000000000000000000000000815250905090565b5f6109b33384846125a5565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f6b033b2e3c9fd0803ce8000000905090565b600c60169054906101000a900460ff1681565b5f8060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610af05782811015610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad9906144e0565b60405180910390fd5b610aef85338584036125a5565b5b610afb858585612768565b60019150509392505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16610b4b611a83565b73ffffffffffffffffffffffffffffffffffffffff1614610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9890614548565b60405180910390fd5b670de0b6b3a76400006103e86001610bb76109d5565b610bc19190614593565b610bcb9190614601565b610bd59190614601565b811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906146a1565b60405180910390fd5b670de0b6b3a764000081610c2b9190614593565b60038190555050565b3373ffffffffffffffffffffffffffffffffffffffff16610c53611a83565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090614548565b60405180910390fd5b600c601b9054906101000a900460ff1615610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614709565b60405180910390fd5b678ac7230489e80000341015610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614771565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7193430600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20545f8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610dfa969594939291906147c8565b60606040518083038185885af1158015610e16573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e3b919061483b565b505050565b5f6012905090565b3373ffffffffffffffffffffffffffffffffffffffff16610e67611a83565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490614548565b60405180910390fd5b82600c60166101000a81548160ff021916908360ff16021790555081600c60176101000a81548160ff021916908360ff16021790555080600c60186101000a81548160ff021916908360ff1602179055506064600c60189054906101000a900460ff16600c60179054906101000a900460ff16600c60169054906101000a900460ff16610f4a919061488b565b610f54919061488b565b60ff1614610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e9061492f565b60405180910390fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610fbb611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614997565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c601a9054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611139611a83565b73ffffffffffffffffffffffffffffffffffffffff161461118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118690614548565b60405180910390fd5b60328260ff1611156111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614a25565b60405180910390fd5b60328160ff16111561121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490614ab3565b60405180910390fd5b81600c60146101000a81548160ff021916908360ff16021790555080600c60156101000a81548160ff021916908360ff1602179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16611276611a83565b73ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614548565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16611343611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090614548565b60405180910390fd5b620186a060016113a76109d5565b6113b19190614593565b6113bb9190614601565b8110156113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490614b41565b60405180910390fd5b6103e8600561140a6109d5565b6114149190614593565b61141e9190614601565b811115611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614bcf565b60405180910390fd5b8060048190555050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff1661148f611a83565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614548565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c60159054906101000a900460ff1681565b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff166115b5611a83565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290614548565b60405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff1661166b611a83565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890614548565b60405180910390fd5b670de0b6b3a76400006103e860016116d76109d5565b6116e19190614593565b6116eb9190614601565b6116f59190614601565b811015611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614c5d565b60405180910390fd5b670de0b6b3a76400008161174b9190614593565b60028190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611773611a83565b73ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614548565b60405180910390fd5b5f600c601a6101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16611804611a83565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf90614cc5565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1661192a611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590614cc5565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f4e4b500000000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16611b06611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5390614548565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be190614d2d565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f611c4e338484612768565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16611c77611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290614cc5565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611d9d611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90614548565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e2d91906140fd565b602060405180830381865afa158015611e48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6c9190614d4b565b9050611e7983838361364f565b505050565b600c60189054906101000a900460ff1681565b60025481565b600c60179054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611ec9611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490614dc0565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff1647604051611fb290614e0b565b5f6040518083038185875af1925050503d805f8114611fec576040519150601f19603f3d011682016040523d82523d5f602084013e611ff1565b606091505b5050905080612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614e69565b60405180910390fd5b5050565b600c60149054906101000a900460ff1681565b5f60105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60045481565b3373ffffffffffffffffffffffffffffffffffffffff166120f3611a83565b73ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090614548565b60405180910390fd5b600c601b9054906101000a900460ff1615612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614709565b60405180910390fd5b80518251146121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614ed1565b60405180910390fd5b5f5b8251811015612422578181815181106121fb576121fa614eef565b5b6020026020010151600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990614f8c565b60405180910390fd5b81818151811061229557612294614eef565b5b6020026020010151600f5f8584815181106122b3576122b2614eef565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546123029190614faa565b9250508190555081818151811061231c5761231b614eef565b5b6020026020010151600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461236f9190614fdd565b9250508190555082818151811061238957612388614eef565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8484815181106123f2576123f1614eef565b5b60200260200101516040516124079190613f48565b60405180910390a3808061241a90615010565b9150506121df565b505050565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff1661244c611a83565b73ffffffffffffffffffffffffffffffffffffffff16146124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614548565b60405180910390fd5b600c601b9054906101000a900460ff16156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990614709565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612578906150a1565b60405180910390fd5b6001600c601b6101000a81548160ff02191690831515021790555042600e81905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a9061512f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612678906151bd565b60405180910390fd5b8060105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161275b9190613f48565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd9061524b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b906152d9565b60405180910390fd5b5f8111612886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287d90615367565b60405180910390fd5b600c601b9054906101000a900460ff1615801561294d57506128a6611a83565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561290d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561294c575061291c611a83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b5b1561298d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612984906153cf565b60405180910390fd5b600c601b9054906101000a900460ff1680156129b85750610384600e546129b49190614faa565b4211155b8015612a1157505f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612c6c5760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b4257600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf836040518263ffffffff1660e01b8152600401612abf91906140fd565b602060405180830381865afa158015612ada573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612afe9190615401565b612b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3490615476565b60405180910390fd5b612c6b565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c6a57600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf846040518263ffffffff1660e01b8152600401612beb91906140fd565b602060405180830381865afa158015612c06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2a9190615401565b612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c60906154de565b60405180910390fd5b5b5b5b600c601a9054906101000a900460ff161561306257612c89611a83565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cf75750612cc7611a83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d2f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d69575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d825750600c60199054906101000a900460ff16155b156130615760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e24575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ecb57600254811115612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e659061556c565b60405180910390fd5b600354612e7a83611550565b82612e859190614faa565b1115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd906155d4565b60405180910390fd5b613060565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f68575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fb757600254811115612fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa990615662565b60405180910390fd5b61305f565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661305e5760035461301183611550565b8261301c9190614faa565b111561305d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613054906155d4565b60405180910390fd5b5b5b5b5b5b5f60045461306f30611550565b1015905080801561308d5750600c60199054906101000a900460ff16155b80156130e0575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613133575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613186575060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131c9576001600c60196101000a81548160ff0219169083151502179055506131ae61379e565b5f600c60196101000a81548160ff0219169083151502179055505b5f600c60199054906101000a900460ff1615905060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613278575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613281575f90505b5f600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015613305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fc90614f8c565b60405180910390fd5b5f821561354d5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561337357505f600c60159054906101000a900460ff1660ff16115b156133aa576103e8600c60159054906101000a900460ff1660ff16866133999190614593565b6133a39190614601565b9050613445565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561341157505f600c60149054906101000a900460ff1660ff16115b15613444576103e8600c60149054906101000a900460ff1660ff16866134379190614593565b6134419190614601565b90505b5b5f81111561354c57808503945080600f5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555080600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135439190613f48565b60405180910390a35b5b84600f5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555084600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161363e9190613f48565b60405180910390a350505050505050565b5f808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8585604051602401613683929190615680565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516136ed91906156e1565b5f604051808303815f865af19150503d805f8114613726576040519150601f19603f3d011682016040523d82523d5f602084013e61372b565b606091505b509150915081801561375857505f815114806137575750808060200190518101906137569190615401565b5b5b613797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378e90615767565b60405180910390fd5b5050505050565b6137a6613cb4565b5f60045490505f60146004546137bc9190614593565b6137c530611550565b11156137dd5760146004546137da9190614593565b91505b5f600267ffffffffffffffff8111156137f9576137f86141fe565b5b6040519080825280602002602001820160405280156138275781602001602082028036833780820191505090505b50905030815f8151811061383e5761383d614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106138a1576138a0614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85846040518363ffffffff1660e01b815260040161392b92919061583c565b5f60405180830381865afa158015613945573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061396d91906158ff565b6001815181106139805761397f614eef565b5b602002602001015190505f810361399a5750505050613caa565b5f6064601460646139ab9190614fdd565b836139b69190614593565b6139c09190614601565b9050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94786838630426040518663ffffffff1660e01b8152600401613a17959493929190615946565b5f604051808303815f87803b158015613a2e575f80fd5b505af1158015613a40573d5f803e3d5ffd5b505050505f4790505f811115613ca3575f6064600c60169054906101000a900460ff1660ff1683613a719190614593565b613a7b9190614601565b90505f6064600c60189054906101000a900460ff1660ff1684613a9e9190614593565b613aa89190614601565b90505f818385613ab89190614fdd565b613ac29190614fdd565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b0990614e0b565b5f6040518083038185875af1925050503d805f8114613b43576040519150601f19603f3d011682016040523d82523d5f602084013e613b48565b606091505b50508098505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b9390614e0b565b5f6040518083038185875af1925050503d805f8114613bcd576040519150601f19603f3d011682016040523d82523d5f602084013e613bd2565b606091505b50508098505060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613c1d90614e0b565b5f6040518083038185875af1925050503d805f8114613c57576040519150601f19603f3d011682016040523d82523d5f602084013e613c5c565b606091505b5050809850507f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f89838584604051613c97949392919061599e565b60405180910390a15050505b5050505050505b613cb2613d03565b565b600260015403613cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf090615a2b565b60405180910390fd5b6002600181905550565b60018081905550565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613d43578082015181840152602081019050613d28565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613d6882613d0c565b613d728185613d16565b9350613d82818560208601613d26565b613d8b81613d4e565b840191505092915050565b5f6020820190508181035f830152613dae8184613d5e565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613df082613dc7565b9050919050565b613e0081613de6565b8114613e0a575f80fd5b50565b5f81359050613e1b81613df7565b92915050565b5f819050919050565b613e3381613e21565b8114613e3d575f80fd5b50565b5f81359050613e4e81613e2a565b92915050565b5f8060408385031215613e6a57613e69613dbf565b5b5f613e7785828601613e0d565b9250506020613e8885828601613e40565b9150509250929050565b5f8115159050919050565b613ea681613e92565b82525050565b5f602082019050613ebf5f830184613e9d565b92915050565b5f819050919050565b5f613ee8613ee3613ede84613dc7565b613ec5565b613dc7565b9050919050565b5f613ef982613ece565b9050919050565b5f613f0a82613eef565b9050919050565b613f1a81613f00565b82525050565b5f602082019050613f335f830184613f11565b92915050565b613f4281613e21565b82525050565b5f602082019050613f5b5f830184613f39565b92915050565b5f60ff82169050919050565b613f7681613f61565b82525050565b5f602082019050613f8f5f830184613f6d565b92915050565b5f805f60608486031215613fac57613fab613dbf565b5b5f613fb986828701613e0d565b9350506020613fca86828701613e0d565b9250506040613fdb86828701613e40565b9150509250925092565b5f613fef82613eef565b9050919050565b613fff81613fe5565b82525050565b5f6020820190506140185f830184613ff6565b92915050565b5f6020828403121561403357614032613dbf565b5b5f61404084828501613e40565b91505092915050565b61405281613f61565b811461405c575f80fd5b50565b5f8135905061406d81614049565b92915050565b5f805f6060848603121561408a57614089613dbf565b5b5f6140978682870161405f565b93505060206140a88682870161405f565b92505060406140b98682870161405f565b9150509250925092565b5f602082840312156140d8576140d7613dbf565b5b5f6140e584828501613e0d565b91505092915050565b6140f781613de6565b82525050565b5f6020820190506141105f8301846140ee565b92915050565b5f806040838503121561412c5761412b613dbf565b5b5f6141398582860161405f565b925050602061414a8582860161405f565b9150509250929050565b61415d81613e92565b8114614167575f80fd5b50565b5f8135905061417881614154565b92915050565b5f806040838503121561419457614193613dbf565b5b5f6141a185828601613e0d565b92505060206141b28582860161416a565b9150509250929050565b5f80604083850312156141d2576141d1613dbf565b5b5f6141df85828601613e0d565b92505060206141f085828601613e0d565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61423482613d4e565b810181811067ffffffffffffffff82111715614253576142526141fe565b5b80604052505050565b5f614265613db6565b9050614271828261422b565b919050565b5f67ffffffffffffffff8211156142905761428f6141fe565b5b602082029050602081019050919050565b5f80fd5b5f6142b76142b284614276565b61425c565b905080838252602082019050602084028301858111156142da576142d96142a1565b5b835b8181101561430357806142ef8882613e0d565b8452602084019350506020810190506142dc565b5050509392505050565b5f82601f830112614321576143206141fa565b5b81356143318482602086016142a5565b91505092915050565b5f67ffffffffffffffff821115614354576143536141fe565b5b602082029050602081019050919050565b5f6143776143728461433a565b61425c565b9050808382526020820190506020840283018581111561439a576143996142a1565b5b835b818110156143c357806143af8882613e40565b84526020840193505060208101905061439c565b5050509392505050565b5f82601f8301126143e1576143e06141fa565b5b81356143f1848260208601614365565b91505092915050565b5f80604083850312156144105761440f613dbf565b5b5f83013567ffffffffffffffff81111561442d5761442c613dc3565b5b6144398582860161430d565b925050602083013567ffffffffffffffff81111561445a57614459613dc3565b5b614466858286016143cd565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6144ca602883613d16565b91506144d582614470565b604082019050919050565b5f6020820190508181035f8301526144f7816144be565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614532602083613d16565b915061453d826144fe565b602082019050919050565b5f6020820190508181035f83015261455f81614526565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61459d82613e21565b91506145a883613e21565b92508282026145b681613e21565b915082820484148315176145cd576145cc614566565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61460b82613e21565b915061461683613e21565b925082614626576146256145d4565b5b828204905092915050565b7f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e5f8201527f20302e3125000000000000000000000000000000000000000000000000000000602082015250565b5f61468b602583613d16565b915061469682614631565b604082019050919050565b5f6020820190508181035f8301526146b88161467f565b9050919050565b7f416c7265616479206c61756e63686564000000000000000000000000000000005f82015250565b5f6146f3601083613d16565b91506146fe826146bf565b602082019050919050565b5f6020820190508181035f830152614720816146e7565b9050919050565b7f4c69717569646974793a206e656564203e3d20313020455448000000000000005f82015250565b5f61475b601983613d16565b915061476682614727565b602082019050919050565b5f6020820190508181035f8301526147888161474f565b9050919050565b5f819050919050565b5f6147b26147ad6147a88461478f565b613ec5565b613e21565b9050919050565b6147c281614798565b82525050565b5f60c0820190506147db5f8301896140ee565b6147e86020830188613f39565b6147f560408301876147b9565b61480260608301866147b9565b61480f60808301856140ee565b61481c60a0830184613f39565b979650505050505050565b5f8151905061483581613e2a565b92915050565b5f805f6060848603121561485257614851613dbf565b5b5f61485f86828701614827565b935050602061487086828701614827565b925050604061488186828701614827565b9150509250925092565b5f61489582613f61565b91506148a083613f61565b9250828201905060ff8111156148b9576148b8614566565b5b92915050565b7f446973747269627574696f6e206861766520746f20626520657175616c20746f5f8201527f2031303025000000000000000000000000000000000000000000000000000000602082015250565b5f614919602583613d16565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f57686974656c6973744d616e6167657220616c726561647920736574000000005f82015250565b5f614981601c83613d16565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f4275792066656573206d757374206265206c657373207468616e206f722065715f8201527f75616c20746f2035250000000000000000000000000000000000000000000000602082015250565b5f614a0f602983613d16565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b7f53656c6c2066656573206d757374206265206c657373207468616e206f7220655f8201527f7175616c20746f20352500000000000000000000000000000000000000000000602082015250565b5f614a9d602a83613d16565b9150614aa882614a43565b604082019050919050565b5f6020820190508181035f830152614aca81614a91565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30303125206f662074686520737570706c790000000000000000000000602082015250565b5f614b2b603583613d16565b9150614b3682614ad1565b604082019050919050565b5f6020820190508181035f830152614b5881614b1f565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e3525206f662074686520737570706c79000000000000000000000000602082015250565b5f614bb9603483613d16565b9150614bc482614b5f565b604082019050919050565b5f6020820190508181035f830152614be681614bad565b9050919050565b7f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f7765725f8201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b5f614c47602a83613d16565b9150614c5282614bed565b604082019050919050565b5f6020820190508181035f830152614c7481614c3b565b9050919050565b7f416464726573732063616e6e6f74206265207a65726f000000000000000000005f82015250565b5f614caf601683613d16565b9150614cba82614c7b565b602082019050919050565b5f6020820190508181035f830152614cdc81614ca3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665640000000000005f82015250565b5f614d17601a83613d16565b9150614d2282614ce3565b602082019050919050565b5f6020820190508181035f830152614d4481614d0b565b9050919050565b5f60208284031215614d6057614d5f613dbf565b5b5f614d6d84828501614827565b91505092915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f614daa600f83613d16565b9150614db582614d76565b602082019050919050565b5f6020820190508181035f830152614dd781614d9e565b9050919050565b5f81905092915050565b50565b5f614df65f83614dde565b9150614e0182614de8565b5f82019050919050565b5f614e1582614deb565b9150819050919050565b7f5769746864726177616c206661696c65640000000000000000000000000000005f82015250565b5f614e53601183613d16565b9150614e5e82614e1f565b602082019050919050565b5f6020820190508181035f830152614e8081614e47565b9050919050565b7f417272617973206c656e677468206d69736d61746368000000000000000000005f82015250565b5f614ebb601683613d16565b9150614ec682614e87565b602082019050919050565b5f6020820190508181035f830152614ee881614eaf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614f76602683613d16565b9150614f8182614f1c565b604082019050919050565b5f6020820190508181035f830152614fa381614f6a565b9050919050565b5f614fb482613e21565b9150614fbf83613e21565b9250828201905080821115614fd757614fd6614566565b5b92915050565b5f614fe782613e21565b9150614ff283613e21565b925082820390508181111561500a57615009614566565b5b92915050565b5f61501a82613e21565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504c5761504b614566565b5b600182019050919050565b7f574c206e6f7420736574000000000000000000000000000000000000000000005f82015250565b5f61508b600a83613d16565b915061509682615057565b602082019050919050565b5f6020820190508181035f8301526150b88161507f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f615119602483613d16565b9150615124826150bf565b604082019050919050565b5f6020820190508181035f8301526151468161510d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151a7602283613d16565b91506151b28261514d565b604082019050919050565b5f6020820190508181035f8301526151d48161519b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615235602583613d16565b9150615240826151db565b604082019050919050565b5f6020820190508181035f83015261526281615229565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6152c3602383613d16565b91506152ce82615269565b604082019050919050565b5f6020820190508181035f8301526152f0816152b7565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f615351602983613d16565b915061535c826152f7565b604082019050919050565b5f6020820190508181035f83015261537e81615345565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f6153b9601383613d16565b91506153c482615385565b602082019050919050565b5f6020820190508181035f8301526153e6816153ad565b9050919050565b5f815190506153fb81614154565b92915050565b5f6020828403121561541657615415613dbf565b5b5f615423848285016153ed565b91505092915050565b7f4275796572206e6f742077686974656c697374656400000000000000000000005f82015250565b5f615460601583613d16565b915061546b8261542c565b602082019050919050565b5f6020820190508181035f83015261548d81615454565b9050919050565b7f53656c6c6572206e6f742077686974656c6973746564000000000000000000005f82015250565b5f6154c8601683613d16565b91506154d382615494565b602082019050919050565b5f6020820190508181035f8301526154f5816154bc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478000000000000000000000000000000000000000000000000000000602082015250565b5f615556602583613d16565b9150615561826154fc565b604082019050919050565b5f6020820190508181035f8301526155838161554a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6155be601383613d16565b91506155c98261558a565b602082019050919050565b5f6020820190508181035f8301526155eb816155b2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854780000000000000000000000000000000000000000000000000000602082015250565b5f61564c602683613d16565b9150615657826155f2565b604082019050919050565b5f6020820190508181035f83015261567981615640565b9050919050565b5f6040820190506156935f8301856140ee565b6156a06020830184613f39565b9392505050565b5f81519050919050565b5f6156bb826156a7565b6156c58185614dde565b93506156d5818560208601613d26565b80840191505092915050565b5f6156ec82846156b1565b915081905092915050565b7f5472616e7366657248656c7065723a20494e5445524e414c205452414e5346455f8201527f525f4641494c4544000000000000000000000000000000000000000000000000602082015250565b5f615751602883613d16565b915061575c826156f7565b604082019050919050565b5f6020820190508181035f83015261577e81615745565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6157b781613de6565b82525050565b5f6157c883836157ae565b60208301905092915050565b5f602082019050919050565b5f6157ea82615785565b6157f4818561578f565b93506157ff8361579f565b805f5b8381101561582f57815161581688826157bd565b9750615821836157d4565b925050600181019050615802565b5085935050505092915050565b5f60408201905061584f5f830185613f39565b818103602083015261586181846157e0565b90509392505050565b5f61587c6158778461433a565b61425c565b9050808382526020820190506020840283018581111561589f5761589e6142a1565b5b835b818110156158c857806158b48882614827565b8452602084019350506020810190506158a1565b5050509392505050565b5f82601f8301126158e6576158e56141fa565b5b81516158f684826020860161586a565b91505092915050565b5f6020828403121561591457615913613dbf565b5b5f82015167ffffffffffffffff81111561593157615930613dc3565b5b61593d848285016158d2565b91505092915050565b5f60a0820190506159595f830188613f39565b6159666020830187613f39565b818103604083015261597881866157e0565b905061598760608301856140ee565b6159946080830184613f39565b9695505050505050565b5f6080820190506159b15f830187613f39565b6159be6020830186613f39565b6159cb6040830185613f39565b6159d86060830184613f39565b95945050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f615a15601f83613d16565b9150615a20826159e1565b602082019050919050565b5f6020820190508181035f830152615a4281615a09565b905091905056fea2646970667358221220fffff52711b90460b16b8644041df97ee1af373d3c210fe58adc4e667c77f82864736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c8063715018a611610143578063bc205ad3116100b5578063d85ba06311610079578063d85ba06314610872578063dd62ed3e1461089c578063e2f45605146108d8578063e710794714610902578063f8b45b051461092a578063fb201b1d1461095457610266565b8063bc205ad3146107a4578063bcfa9287146107cc578063c8c8ebe4146107f6578063cc32d17614610820578063d201b01e1461084a57610266565b806385ecafd71161010757806385ecafd7146106885780638da5cb5b146106c457806395d89b41146106ee5780639a7a23d614610718578063a9059cbb14610740578063adfa29e51461077c57610266565b8063715018a6146105e457806374010ece146105fa578063751039fc146106225780637cb332bb14610638578063809d458d1461066057610266565b80633c090c46116101dc578063590ffdce116101a0578063590ffdce146104dc5780636402511e1461050457806365cf7c9b1461052c57806366650dae146105565780636a486a8e1461057e57806370a08231146105a857610266565b80633c090c461461041057806341a494091461043857806349bd5a5e146104605780634a62bb651461048a5780634fcd2446146104b457610266565b806323b872dd1161022357806323b872dd1461034e57806326563b401461038a57806327a14fc2146103b45780632ec64b6c146103dc578063313ce567146103e657610266565b806306fdde031461026a578063095ea7b3146102945780631694505e146102d057806318160ddd146102fa57806321d37e391461032457610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e61096a565b60405161028b9190613d96565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613e54565b6109a7565b6040516102c79190613eac565b60405180910390f35b3480156102db575f80fd5b506102e46109bd565b6040516102f19190613f20565b60405180910390f35b348015610305575f80fd5b5061030e6109d5565b60405161031b9190613f48565b60405180910390f35b34801561032f575f80fd5b506103386109e8565b6040516103459190613f7c565b60405180910390f35b348015610359575f80fd5b50610374600480360381019061036f9190613f95565b6109fb565b6040516103819190613eac565b60405180910390f35b348015610395575f80fd5b5061039e610b07565b6040516103ab9190614005565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d5919061401e565b610b2c565b005b6103e4610c34565b005b3480156103f1575f80fd5b506103fa610e40565b6040516104079190613f7c565b60405180910390f35b34801561041b575f80fd5b5061043660048036038101906104319190614073565b610e48565b005b348015610443575f80fd5b5061045e600480360381019061045991906140c3565b610f9c565b005b34801561046b575f80fd5b506104746110e3565b60405161048191906140fd565b60405180910390f35b348015610495575f80fd5b5061049e611107565b6040516104ab9190613eac565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190614116565b61111a565b005b3480156104e7575f80fd5b5061050260048036038101906104fd919061417e565b611257565b005b34801561050f575f80fd5b5061052a6004803603810190610525919061401e565b611324565b005b348015610537575f80fd5b5061054061146a565b60405161054d9190613f48565b60405180910390f35b348015610561575f80fd5b5061057c6004803603810190610577919061417e565b611470565b005b348015610589575f80fd5b5061059261153d565b60405161059f9190613f7c565b60405180910390f35b3480156105b3575f80fd5b506105ce60048036038101906105c991906140c3565b611550565b6040516105db9190613f48565b60405180910390f35b3480156105ef575f80fd5b506105f8611596565b005b348015610605575f80fd5b50610620600480360381019061061b919061401e565b61164c565b005b34801561062d575f80fd5b50610636611754565b005b348015610643575f80fd5b5061065e600480360381019061065991906140c3565b6117e5565b005b34801561066b575f80fd5b50610686600480360381019061068191906140c3565b61190b565b005b348015610693575f80fd5b506106ae60048036038101906106a991906140c3565b611a31565b6040516106bb9190613eac565b60405180910390f35b3480156106cf575f80fd5b506106d8611a83565b6040516106e591906140fd565b60405180910390f35b3480156106f9575f80fd5b50610702611aaa565b60405161070f9190613d96565b60405180910390f35b348015610723575f80fd5b5061073e6004803603810190610739919061417e565b611ae7565b005b34801561074b575f80fd5b5061076660048036038101906107619190613e54565b611c42565b6040516107739190613eac565b60405180910390f35b348015610787575f80fd5b506107a2600480360381019061079d91906140c3565b611c58565b005b3480156107af575f80fd5b506107ca60048036038101906107c591906141bc565b611d7e565b005b3480156107d7575f80fd5b506107e0611e7e565b6040516107ed9190613f7c565b60405180910390f35b348015610801575f80fd5b5061080a611e91565b6040516108179190613f48565b60405180910390f35b34801561082b575f80fd5b50610834611e97565b6040516108419190613f7c565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b91906140c3565b611eaa565b005b34801561087d575f80fd5b50610886612039565b6040516108939190613f7c565b60405180910390f35b3480156108a7575f80fd5b506108c260048036038101906108bd91906141bc565b61204c565b6040516108cf9190613f48565b60405180910390f35b3480156108e3575f80fd5b506108ec6120ce565b6040516108f99190613f48565b60405180910390f35b34801561090d575f80fd5b50610928600480360381019061092391906143fa565b6120d4565b005b348015610935575f80fd5b5061093e612427565b60405161094b9190613f48565b60405180910390f35b34801561095f575f80fd5b5061096861242d565b005b60606040518060400160405280601081526020017f4e6f6e4b796f746f50726f746f636f6c00000000000000000000000000000000815250905090565b5f6109b33384846125a5565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f6b033b2e3c9fd0803ce8000000905090565b600c60169054906101000a900460ff1681565b5f8060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610af05782811015610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad9906144e0565b60405180910390fd5b610aef85338584036125a5565b5b610afb858585612768565b60019150509392505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16610b4b611a83565b73ffffffffffffffffffffffffffffffffffffffff1614610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9890614548565b60405180910390fd5b670de0b6b3a76400006103e86001610bb76109d5565b610bc19190614593565b610bcb9190614601565b610bd59190614601565b811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906146a1565b60405180910390fd5b670de0b6b3a764000081610c2b9190614593565b60038190555050565b3373ffffffffffffffffffffffffffffffffffffffff16610c53611a83565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090614548565b60405180910390fd5b600c601b9054906101000a900460ff1615610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614709565b60405180910390fd5b678ac7230489e80000341015610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614771565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7193430600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20545f8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610dfa969594939291906147c8565b60606040518083038185885af1158015610e16573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e3b919061483b565b505050565b5f6012905090565b3373ffffffffffffffffffffffffffffffffffffffff16610e67611a83565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490614548565b60405180910390fd5b82600c60166101000a81548160ff021916908360ff16021790555081600c60176101000a81548160ff021916908360ff16021790555080600c60186101000a81548160ff021916908360ff1602179055506064600c60189054906101000a900460ff16600c60179054906101000a900460ff16600c60169054906101000a900460ff16610f4a919061488b565b610f54919061488b565b60ff1614610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e9061492f565b60405180910390fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610fbb611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614997565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000ba123e7cad737b7f8d4580d04e525724c3c80f1a81565b600c601a9054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611139611a83565b73ffffffffffffffffffffffffffffffffffffffff161461118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118690614548565b60405180910390fd5b60328260ff1611156111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614a25565b60405180910390fd5b60328160ff16111561121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490614ab3565b60405180910390fd5b81600c60146101000a81548160ff021916908360ff16021790555080600c60156101000a81548160ff021916908360ff1602179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16611276611a83565b73ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614548565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16611343611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090614548565b60405180910390fd5b620186a060016113a76109d5565b6113b19190614593565b6113bb9190614601565b8110156113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490614b41565b60405180910390fd5b6103e8600561140a6109d5565b6114149190614593565b61141e9190614601565b811115611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614bcf565b60405180910390fd5b8060048190555050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff1661148f611a83565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614548565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c60159054906101000a900460ff1681565b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff166115b5611a83565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290614548565b60405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff1661166b611a83565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890614548565b60405180910390fd5b670de0b6b3a76400006103e860016116d76109d5565b6116e19190614593565b6116eb9190614601565b6116f59190614601565b811015611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614c5d565b60405180910390fd5b670de0b6b3a76400008161174b9190614593565b60028190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611773611a83565b73ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614548565b60405180910390fd5b5f600c601a6101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16611804611a83565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf90614cc5565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1661192a611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590614cc5565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f4e4b500000000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16611b06611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5390614548565b60405180910390fd5b7f000000000000000000000000ba123e7cad737b7f8d4580d04e525724c3c80f1a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be190614d2d565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f611c4e338484612768565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16611c77611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290614cc5565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611d9d611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90614548565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e2d91906140fd565b602060405180830381865afa158015611e48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6c9190614d4b565b9050611e7983838361364f565b505050565b600c60189054906101000a900460ff1681565b60025481565b600c60179054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16611ec9611a83565b73ffffffffffffffffffffffffffffffffffffffff1614611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690614548565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490614dc0565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff1647604051611fb290614e0b565b5f6040518083038185875af1925050503d805f8114611fec576040519150601f19603f3d011682016040523d82523d5f602084013e611ff1565b606091505b5050905080612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614e69565b60405180910390fd5b5050565b600c60149054906101000a900460ff1681565b5f60105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60045481565b3373ffffffffffffffffffffffffffffffffffffffff166120f3611a83565b73ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090614548565b60405180910390fd5b600c601b9054906101000a900460ff1615612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614709565b60405180910390fd5b80518251146121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614ed1565b60405180910390fd5b5f5b8251811015612422578181815181106121fb576121fa614eef565b5b6020026020010151600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990614f8c565b60405180910390fd5b81818151811061229557612294614eef565b5b6020026020010151600f5f8584815181106122b3576122b2614eef565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546123029190614faa565b9250508190555081818151811061231c5761231b614eef565b5b6020026020010151600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461236f9190614fdd565b9250508190555082818151811061238957612388614eef565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8484815181106123f2576123f1614eef565b5b60200260200101516040516124079190613f48565b60405180910390a3808061241a90615010565b9150506121df565b505050565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff1661244c611a83565b73ffffffffffffffffffffffffffffffffffffffff16146124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614548565b60405180910390fd5b600c601b9054906101000a900460ff16156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990614709565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612578906150a1565b60405180910390fd5b6001600c601b6101000a81548160ff02191690831515021790555042600e81905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a9061512f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612678906151bd565b60405180910390fd5b8060105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161275b9190613f48565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd9061524b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b906152d9565b60405180910390fd5b5f8111612886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287d90615367565b60405180910390fd5b600c601b9054906101000a900460ff1615801561294d57506128a6611a83565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561290d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561294c575061291c611a83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b5b1561298d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612984906153cf565b60405180910390fd5b600c601b9054906101000a900460ff1680156129b85750610384600e546129b49190614faa565b4211155b8015612a1157505f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612c6c5760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b4257600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf836040518263ffffffff1660e01b8152600401612abf91906140fd565b602060405180830381865afa158015612ada573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612afe9190615401565b612b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3490615476565b60405180910390fd5b612c6b565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c6a57600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf846040518263ffffffff1660e01b8152600401612beb91906140fd565b602060405180830381865afa158015612c06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2a9190615401565b612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c60906154de565b60405180910390fd5b5b5b5b600c601a9054906101000a900460ff161561306257612c89611a83565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cf75750612cc7611a83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d2f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d69575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d825750600c60199054906101000a900460ff16155b156130615760135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e24575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ecb57600254811115612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e659061556c565b60405180910390fd5b600354612e7a83611550565b82612e859190614faa565b1115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd906155d4565b60405180910390fd5b613060565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f68575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fb757600254811115612fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa990615662565b60405180910390fd5b61305f565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661305e5760035461301183611550565b8261301c9190614faa565b111561305d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613054906155d4565b60405180910390fd5b5b5b5b5b5b5f60045461306f30611550565b1015905080801561308d5750600c60199054906101000a900460ff16155b80156130e0575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613133575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613186575060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131c9576001600c60196101000a81548160ff0219169083151502179055506131ae61379e565b5f600c60196101000a81548160ff0219169083151502179055505b5f600c60199054906101000a900460ff1615905060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613278575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613281575f90505b5f600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015613305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fc90614f8c565b60405180910390fd5b5f821561354d5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561337357505f600c60159054906101000a900460ff1660ff16115b156133aa576103e8600c60159054906101000a900460ff1660ff16866133999190614593565b6133a39190614601565b9050613445565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561341157505f600c60149054906101000a900460ff1660ff16115b15613444576103e8600c60149054906101000a900460ff1660ff16866134379190614593565b6134419190614601565b90505b5b5f81111561354c57808503945080600f5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555080600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135439190613f48565b60405180910390a35b5b84600f5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555084600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161363e9190613f48565b60405180910390a350505050505050565b5f808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8585604051602401613683929190615680565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516136ed91906156e1565b5f604051808303815f865af19150503d805f8114613726576040519150601f19603f3d011682016040523d82523d5f602084013e61372b565b606091505b509150915081801561375857505f815114806137575750808060200190518101906137569190615401565b5b5b613797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378e90615767565b60405180910390fd5b5050505050565b6137a6613cb4565b5f60045490505f60146004546137bc9190614593565b6137c530611550565b11156137dd5760146004546137da9190614593565b91505b5f600267ffffffffffffffff8111156137f9576137f86141fe565b5b6040519080825280602002602001820160405280156138275781602001602082028036833780820191505090505b50905030815f8151811061383e5761383d614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106138a1576138a0614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85846040518363ffffffff1660e01b815260040161392b92919061583c565b5f60405180830381865afa158015613945573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061396d91906158ff565b6001815181106139805761397f614eef565b5b602002602001015190505f810361399a5750505050613caa565b5f6064601460646139ab9190614fdd565b836139b69190614593565b6139c09190614601565b9050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94786838630426040518663ffffffff1660e01b8152600401613a17959493929190615946565b5f604051808303815f87803b158015613a2e575f80fd5b505af1158015613a40573d5f803e3d5ffd5b505050505f4790505f811115613ca3575f6064600c60169054906101000a900460ff1660ff1683613a719190614593565b613a7b9190614601565b90505f6064600c60189054906101000a900460ff1660ff1684613a9e9190614593565b613aa89190614601565b90505f818385613ab89190614fdd565b613ac29190614fdd565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b0990614e0b565b5f6040518083038185875af1925050503d805f8114613b43576040519150601f19603f3d011682016040523d82523d5f602084013e613b48565b606091505b50508098505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b9390614e0b565b5f6040518083038185875af1925050503d805f8114613bcd576040519150601f19603f3d011682016040523d82523d5f602084013e613bd2565b606091505b50508098505060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613c1d90614e0b565b5f6040518083038185875af1925050503d805f8114613c57576040519150601f19603f3d011682016040523d82523d5f602084013e613c5c565b606091505b5050809850507f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f89838584604051613c97949392919061599e565b60405180910390a15050505b5050505050505b613cb2613d03565b565b600260015403613cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf090615a2b565b60405180910390fd5b6002600181905550565b60018081905550565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613d43578082015181840152602081019050613d28565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613d6882613d0c565b613d728185613d16565b9350613d82818560208601613d26565b613d8b81613d4e565b840191505092915050565b5f6020820190508181035f830152613dae8184613d5e565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613df082613dc7565b9050919050565b613e0081613de6565b8114613e0a575f80fd5b50565b5f81359050613e1b81613df7565b92915050565b5f819050919050565b613e3381613e21565b8114613e3d575f80fd5b50565b5f81359050613e4e81613e2a565b92915050565b5f8060408385031215613e6a57613e69613dbf565b5b5f613e7785828601613e0d565b9250506020613e8885828601613e40565b9150509250929050565b5f8115159050919050565b613ea681613e92565b82525050565b5f602082019050613ebf5f830184613e9d565b92915050565b5f819050919050565b5f613ee8613ee3613ede84613dc7565b613ec5565b613dc7565b9050919050565b5f613ef982613ece565b9050919050565b5f613f0a82613eef565b9050919050565b613f1a81613f00565b82525050565b5f602082019050613f335f830184613f11565b92915050565b613f4281613e21565b82525050565b5f602082019050613f5b5f830184613f39565b92915050565b5f60ff82169050919050565b613f7681613f61565b82525050565b5f602082019050613f8f5f830184613f6d565b92915050565b5f805f60608486031215613fac57613fab613dbf565b5b5f613fb986828701613e0d565b9350506020613fca86828701613e0d565b9250506040613fdb86828701613e40565b9150509250925092565b5f613fef82613eef565b9050919050565b613fff81613fe5565b82525050565b5f6020820190506140185f830184613ff6565b92915050565b5f6020828403121561403357614032613dbf565b5b5f61404084828501613e40565b91505092915050565b61405281613f61565b811461405c575f80fd5b50565b5f8135905061406d81614049565b92915050565b5f805f6060848603121561408a57614089613dbf565b5b5f6140978682870161405f565b93505060206140a88682870161405f565b92505060406140b98682870161405f565b9150509250925092565b5f602082840312156140d8576140d7613dbf565b5b5f6140e584828501613e0d565b91505092915050565b6140f781613de6565b82525050565b5f6020820190506141105f8301846140ee565b92915050565b5f806040838503121561412c5761412b613dbf565b5b5f6141398582860161405f565b925050602061414a8582860161405f565b9150509250929050565b61415d81613e92565b8114614167575f80fd5b50565b5f8135905061417881614154565b92915050565b5f806040838503121561419457614193613dbf565b5b5f6141a185828601613e0d565b92505060206141b28582860161416a565b9150509250929050565b5f80604083850312156141d2576141d1613dbf565b5b5f6141df85828601613e0d565b92505060206141f085828601613e0d565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61423482613d4e565b810181811067ffffffffffffffff82111715614253576142526141fe565b5b80604052505050565b5f614265613db6565b9050614271828261422b565b919050565b5f67ffffffffffffffff8211156142905761428f6141fe565b5b602082029050602081019050919050565b5f80fd5b5f6142b76142b284614276565b61425c565b905080838252602082019050602084028301858111156142da576142d96142a1565b5b835b8181101561430357806142ef8882613e0d565b8452602084019350506020810190506142dc565b5050509392505050565b5f82601f830112614321576143206141fa565b5b81356143318482602086016142a5565b91505092915050565b5f67ffffffffffffffff821115614354576143536141fe565b5b602082029050602081019050919050565b5f6143776143728461433a565b61425c565b9050808382526020820190506020840283018581111561439a576143996142a1565b5b835b818110156143c357806143af8882613e40565b84526020840193505060208101905061439c565b5050509392505050565b5f82601f8301126143e1576143e06141fa565b5b81356143f1848260208601614365565b91505092915050565b5f80604083850312156144105761440f613dbf565b5b5f83013567ffffffffffffffff81111561442d5761442c613dc3565b5b6144398582860161430d565b925050602083013567ffffffffffffffff81111561445a57614459613dc3565b5b614466858286016143cd565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6144ca602883613d16565b91506144d582614470565b604082019050919050565b5f6020820190508181035f8301526144f7816144be565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614532602083613d16565b915061453d826144fe565b602082019050919050565b5f6020820190508181035f83015261455f81614526565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61459d82613e21565b91506145a883613e21565b92508282026145b681613e21565b915082820484148315176145cd576145cc614566565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61460b82613e21565b915061461683613e21565b925082614626576146256145d4565b5b828204905092915050565b7f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e5f8201527f20302e3125000000000000000000000000000000000000000000000000000000602082015250565b5f61468b602583613d16565b915061469682614631565b604082019050919050565b5f6020820190508181035f8301526146b88161467f565b9050919050565b7f416c7265616479206c61756e63686564000000000000000000000000000000005f82015250565b5f6146f3601083613d16565b91506146fe826146bf565b602082019050919050565b5f6020820190508181035f830152614720816146e7565b9050919050565b7f4c69717569646974793a206e656564203e3d20313020455448000000000000005f82015250565b5f61475b601983613d16565b915061476682614727565b602082019050919050565b5f6020820190508181035f8301526147888161474f565b9050919050565b5f819050919050565b5f6147b26147ad6147a88461478f565b613ec5565b613e21565b9050919050565b6147c281614798565b82525050565b5f60c0820190506147db5f8301896140ee565b6147e86020830188613f39565b6147f560408301876147b9565b61480260608301866147b9565b61480f60808301856140ee565b61481c60a0830184613f39565b979650505050505050565b5f8151905061483581613e2a565b92915050565b5f805f6060848603121561485257614851613dbf565b5b5f61485f86828701614827565b935050602061487086828701614827565b925050604061488186828701614827565b9150509250925092565b5f61489582613f61565b91506148a083613f61565b9250828201905060ff8111156148b9576148b8614566565b5b92915050565b7f446973747269627574696f6e206861766520746f20626520657175616c20746f5f8201527f2031303025000000000000000000000000000000000000000000000000000000602082015250565b5f614919602583613d16565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f57686974656c6973744d616e6167657220616c726561647920736574000000005f82015250565b5f614981601c83613d16565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f4275792066656573206d757374206265206c657373207468616e206f722065715f8201527f75616c20746f2035250000000000000000000000000000000000000000000000602082015250565b5f614a0f602983613d16565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b7f53656c6c2066656573206d757374206265206c657373207468616e206f7220655f8201527f7175616c20746f20352500000000000000000000000000000000000000000000602082015250565b5f614a9d602a83613d16565b9150614aa882614a43565b604082019050919050565b5f6020820190508181035f830152614aca81614a91565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30303125206f662074686520737570706c790000000000000000000000602082015250565b5f614b2b603583613d16565b9150614b3682614ad1565b604082019050919050565b5f6020820190508181035f830152614b5881614b1f565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e3525206f662074686520737570706c79000000000000000000000000602082015250565b5f614bb9603483613d16565b9150614bc482614b5f565b604082019050919050565b5f6020820190508181035f830152614be681614bad565b9050919050565b7f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f7765725f8201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b5f614c47602a83613d16565b9150614c5282614bed565b604082019050919050565b5f6020820190508181035f830152614c7481614c3b565b9050919050565b7f416464726573732063616e6e6f74206265207a65726f000000000000000000005f82015250565b5f614caf601683613d16565b9150614cba82614c7b565b602082019050919050565b5f6020820190508181035f830152614cdc81614ca3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665640000000000005f82015250565b5f614d17601a83613d16565b9150614d2282614ce3565b602082019050919050565b5f6020820190508181035f830152614d4481614d0b565b9050919050565b5f60208284031215614d6057614d5f613dbf565b5b5f614d6d84828501614827565b91505092915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f614daa600f83613d16565b9150614db582614d76565b602082019050919050565b5f6020820190508181035f830152614dd781614d9e565b9050919050565b5f81905092915050565b50565b5f614df65f83614dde565b9150614e0182614de8565b5f82019050919050565b5f614e1582614deb565b9150819050919050565b7f5769746864726177616c206661696c65640000000000000000000000000000005f82015250565b5f614e53601183613d16565b9150614e5e82614e1f565b602082019050919050565b5f6020820190508181035f830152614e8081614e47565b9050919050565b7f417272617973206c656e677468206d69736d61746368000000000000000000005f82015250565b5f614ebb601683613d16565b9150614ec682614e87565b602082019050919050565b5f6020820190508181035f830152614ee881614eaf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614f76602683613d16565b9150614f8182614f1c565b604082019050919050565b5f6020820190508181035f830152614fa381614f6a565b9050919050565b5f614fb482613e21565b9150614fbf83613e21565b9250828201905080821115614fd757614fd6614566565b5b92915050565b5f614fe782613e21565b9150614ff283613e21565b925082820390508181111561500a57615009614566565b5b92915050565b5f61501a82613e21565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504c5761504b614566565b5b600182019050919050565b7f574c206e6f7420736574000000000000000000000000000000000000000000005f82015250565b5f61508b600a83613d16565b915061509682615057565b602082019050919050565b5f6020820190508181035f8301526150b88161507f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f615119602483613d16565b9150615124826150bf565b604082019050919050565b5f6020820190508181035f8301526151468161510d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151a7602283613d16565b91506151b28261514d565b604082019050919050565b5f6020820190508181035f8301526151d48161519b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615235602583613d16565b9150615240826151db565b604082019050919050565b5f6020820190508181035f83015261526281615229565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6152c3602383613d16565b91506152ce82615269565b604082019050919050565b5f6020820190508181035f8301526152f0816152b7565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f615351602983613d16565b915061535c826152f7565b604082019050919050565b5f6020820190508181035f83015261537e81615345565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f6153b9601383613d16565b91506153c482615385565b602082019050919050565b5f6020820190508181035f8301526153e6816153ad565b9050919050565b5f815190506153fb81614154565b92915050565b5f6020828403121561541657615415613dbf565b5b5f615423848285016153ed565b91505092915050565b7f4275796572206e6f742077686974656c697374656400000000000000000000005f82015250565b5f615460601583613d16565b915061546b8261542c565b602082019050919050565b5f6020820190508181035f83015261548d81615454565b9050919050565b7f53656c6c6572206e6f742077686974656c6973746564000000000000000000005f82015250565b5f6154c8601683613d16565b91506154d382615494565b602082019050919050565b5f6020820190508181035f8301526154f5816154bc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478000000000000000000000000000000000000000000000000000000602082015250565b5f615556602583613d16565b9150615561826154fc565b604082019050919050565b5f6020820190508181035f8301526155838161554a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6155be601383613d16565b91506155c98261558a565b602082019050919050565b5f6020820190508181035f8301526155eb816155b2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854780000000000000000000000000000000000000000000000000000602082015250565b5f61564c602683613d16565b9150615657826155f2565b604082019050919050565b5f6020820190508181035f83015261567981615640565b9050919050565b5f6040820190506156935f8301856140ee565b6156a06020830184613f39565b9392505050565b5f81519050919050565b5f6156bb826156a7565b6156c58185614dde565b93506156d5818560208601613d26565b80840191505092915050565b5f6156ec82846156b1565b915081905092915050565b7f5472616e7366657248656c7065723a20494e5445524e414c205452414e5346455f8201527f525f4641494c4544000000000000000000000000000000000000000000000000602082015250565b5f615751602883613d16565b915061575c826156f7565b604082019050919050565b5f6020820190508181035f83015261577e81615745565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6157b781613de6565b82525050565b5f6157c883836157ae565b60208301905092915050565b5f602082019050919050565b5f6157ea82615785565b6157f4818561578f565b93506157ff8361579f565b805f5b8381101561582f57815161581688826157bd565b9750615821836157d4565b925050600181019050615802565b5085935050505092915050565b5f60408201905061584f5f830185613f39565b818103602083015261586181846157e0565b90509392505050565b5f61587c6158778461433a565b61425c565b9050808382526020820190506020840283018581111561589f5761589e6142a1565b5b835b818110156158c857806158b48882614827565b8452602084019350506020810190506158a1565b5050509392505050565b5f82601f8301126158e6576158e56141fa565b5b81516158f684826020860161586a565b91505092915050565b5f6020828403121561591457615913613dbf565b5b5f82015167ffffffffffffffff81111561593157615930613dc3565b5b61593d848285016158d2565b91505092915050565b5f60a0820190506159595f830188613f39565b6159666020830187613f39565b818103604083015261597881866157e0565b905061598760608301856140ee565b6159946080830184613f39565b9695505050505050565b5f6080820190506159b15f830187613f39565b6159be6020830186613f39565b6159cb6040830185613f39565b6159d86060830184613f39565b95945050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f615a15601f83613d16565b9150615a20826159e1565b602082019050919050565b5f6020820190508181035f830152615a4281615a09565b905091905056fea2646970667358221220fffff52711b90460b16b8644041df97ee1af373d3c210fe58adc4e667c77f82864736f6c63430008150033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.