false
true
0

Contract Address Details

0x14822E54193075F78eC0c214f0F893096D53806F

Token
F*** Eric Wall (FEW)
Creator
0xf66acd–081fed at 0x84b4c0–f71193
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
321 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26063068
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
FEW




Optimization enabled
false
Compiler version
v0.8.19+commit.7dd6d404




EVM Version
default




Verified at
2023-08-11T20:57:59.208160Z

Contract source code

// File: ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.8.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;
    }
}

// File: Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: FEW.sol

/*
 * SPDX-License-Identifier: MIT
 *
 * @title F*** Eric Wall - PulseChain Arch-Villain Eric Wall
 *
 * Total supply -> 1,000,000,000,000
 * No new tokens can be minted ever.
 * 90% supply in LP and LP tokens burnt!!!!
 * 0.1% of any trade or transfer is burnt forever
 * 0.1% of any trade or transfer is for growth
 */
pragma solidity ^0.8.19;





contract FEW is Context, IERC20, IERC20Metadata, ReentrancyGuard {
    address public deployer;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _balances;
    string private _name = "F*** Eric Wall";
    string private _symbol = "FEW";
    uint256 private _totalSupply = 1_000_000_000_000_000_000_000_000_000_000;
    uint256 private constant _BIPS = 10000;
    uint256 public _maxWalletToken = _totalSupply;
    mapping(address => bool) private _excludedFromAntiWhale;
    uint256 private constant FEE_BIPS = 10;
    uint256 private constant NO_OF_FEES = 2;

    event MaxWalletTokenUpdated(uint256 newMaxWalletToken);
    event AntiWhaleExclusionChanged(address account, bool excluded);
    event Received(address, uint);

    modifier onlyDeployer() {
        _checkDeployer();
        _;
    }

    constructor() {
        require(msg.sender != address(0), "Deployer Zero!");
        deployer = msg.sender;
        _excludedFromAntiWhale[deployer] = true;
        _balances[deployer] += _totalSupply;
        emit Transfer(address(0), deployer, _totalSupply);
    }

    receive() external payable {
        emit Received(msg.sender, msg.value);
    }

    fallback() external payable {
        emit Received(msg.sender, msg.value);
    }

    function _checkDeployer() internal view virtual {
        require(deployer == msg.sender, "Unauthorized");
    }

    function name() external view returns (string memory) {
        return _name;
    }

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

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

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

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

    function transfer(address to, uint256 amount) external returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) external returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "Low Allowance");
        _approve(owner, spender, currentAllowance - subtractedValue);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) private {
        if (_skipWhaleCheck(from, to)) {
            require(
                _balances[to] + amount <= _maxWalletToken,
                "Whale Not Allowed"
            );
        }

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "Balance Low");

        uint256 fee;
        uint256 netAmount;
        if (from != deployer && to != deployer) {
            (fee, netAmount) = _calculateFees(amount);
            _balances[from] = fromBalance - amount;
            _balances[to] += netAmount;
            emit Transfer(from, to, netAmount);

            _balances[deployer] += fee;
            emit Transfer(from, deployer, fee);

            _balances[address(0)] += fee;
            emit Transfer(from, address(0), fee);
        } else {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
            emit Transfer(from, to, amount);
        }
    }

    function _calculateFees(
        uint256 amount
    ) private pure returns (uint256 fee, uint256 netAmount) {
        fee = (amount * FEE_BIPS) / _BIPS;
        netAmount = amount - NO_OF_FEES * fee;
        return (fee, netAmount);
    }

    function _skipWhaleCheck(
        address from,
        address to
    ) internal view returns (bool) {
        return (from != deployer &&
            to != deployer &&
            !_excludedFromAntiWhale[to]);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) private {
        uint256 currentAllowance = _allowances[owner][spender];
        if (currentAllowance != type(uint256).max) {
            _approve(owner, spender, currentAllowance - amount);
        }
    }

    function _checkAllowance(
        uint256 currentAllowance
    ) internal pure returns (bool) {
        return (currentAllowance != type(uint256).max);
    }

    function withdraw() external payable nonReentrant {
        uint256 amount = address(this).balance;
        require(amount > 0, "Zero Balance");

        (bool sent, ) = deployer.call{value: amount}("");
        require(sent, "Send Failed");
    }

    function reclaimToken(IERC20 token) external onlyDeployer {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(deployer, balance);
    }

    function setMaxWalletToken(uint256 maxWalletToken) external onlyDeployer {
        require(maxWalletToken <= _totalSupply, "Too High!");
        _maxWalletToken = maxWalletToken;
        emit MaxWalletTokenUpdated(maxWalletToken);
    }

    function excludeFromAntiWhale(address account) external onlyDeployer {
        _excludedFromAntiWhale[account] = true;
        emit AntiWhaleExclusionChanged(account, true);
    }

    function includeInAntiWhale(address account) external onlyDeployer {
        _excludedFromAntiWhale[account] = false;
        emit AntiWhaleExclusionChanged(account, false);
    }

    function burn(uint256 amount) external {
        _balances[msg.sender] = _balances[msg.sender] - amount;
        emit Transfer(msg.sender, address(0), amount);
    }
}
        

Contract ABI

[{"type":"constructor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxWalletToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deployer","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromAntiWhale","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInAntiWhale","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reclaimToken","inputs":[{"type":"address","name":"token","internalType":"contract IERC20"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxWalletToken","inputs":[{"type":"uint256","name":"maxWalletToken","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"withdraw","inputs":[]},{"type":"event","name":"AntiWhaleExclusionChanged","inputs":[{"type":"address","name":"account","indexed":false},{"type":"bool","name":"excluded","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","indexed":true},{"type":"address","name":"spender","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"MaxWalletTokenUpdated","inputs":[{"type":"uint256","name":"newMaxWalletToken","indexed":false}],"anonymous":false},{"type":"event","name":"Received","inputs":[{"type":"address","name":"","indexed":false},{"type":"uint256","name":"","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","indexed":true},{"type":"address","name":"to","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"receive"},{"type":"fallback"}]
              

Contract Creation Code

0x60806040526040518060400160405280600e81526020017f462a2a2a20457269632057616c6c000000000000000000000000000000000000815250600490816200004a919062000574565b506040518060400160405280600381526020017f46455700000000000000000000000000000000000000000000000000000000008152506005908162000091919062000574565b506c0c9f2c9cd04674edea40000000600655600654600755348015620000b657600080fd5b506001600081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160362000131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012890620006bc565b60405180910390fd5b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060065460036000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200026191906200070d565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620002ec919062000759565b60405180910390a362000776565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200037c57607f821691505b60208210810362000392576200039162000334565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003bd565b620004088683620003bd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004556200044f620004498462000420565b6200042a565b62000420565b9050919050565b6000819050919050565b620004718362000434565b6200048962000480826200045c565b848454620003ca565b825550505050565b600090565b620004a062000491565b620004ad81848462000466565b505050565b5b81811015620004d557620004c960008262000496565b600181019050620004b3565b5050565b601f8211156200052457620004ee8162000398565b620004f984620003ad565b8101602085101562000509578190505b620005216200051885620003ad565b830182620004b2565b50505b505050565b600082821c905092915050565b6000620005496000198460080262000529565b1980831691505092915050565b600062000564838362000536565b9150826002028217905092915050565b6200057f82620002fa565b67ffffffffffffffff8111156200059b576200059a62000305565b5b620005a7825462000363565b620005b4828285620004d9565b600060209050601f831160018114620005ec5760008415620005d7578287015190505b620005e3858262000556565b86555062000653565b601f198416620005fc8662000398565b60005b828110156200062657848901518255600182019150602085019450602081019050620005ff565b8683101562000646578489015162000642601f89168262000536565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4465706c6f796572205a65726f21000000000000000000000000000000000000600082015250565b6000620006a4600e836200065b565b9150620006b1826200066c565b602082019050919050565b60006020820190508181036000830152620006d78162000695565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200071a8262000420565b9150620007278362000420565b9250828201905080821115620007425762000741620006de565b5b92915050565b620007538162000420565b82525050565b600060208201905062000770600083018462000748565b92915050565b61222b80620007866000396000f3fe6080604052600436106101185760003560e01c80634c658048116100a0578063a457c2d711610064578063a457c2d71461040c578063a9059cbb14610449578063bf32371914610486578063d5f39488146104af578063dd62ed3e146104da57610158565b80634c6580481461032757806370a082311461035057806378109e541461038d57806391d55f41146103b857806395d89b41146103e157610158565b806323b872dd116100e757806323b872dd1461024f578063313ce5671461028c57806339509351146102b75780633ccfd60b146102f457806342966c68146102fe57610158565b806306fdde0314610193578063095ea7b3146101be57806317ffc320146101fb57806318160ddd1461022457610158565b36610158577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874333460405161014e92919061187f565b60405180910390a1005b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874333460405161018992919061187f565b60405180910390a1005b34801561019f57600080fd5b506101a8610517565b6040516101b59190611938565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e091906119b7565b6105a9565b6040516101f29190611a12565b60405180910390f35b34801561020757600080fd5b50610222600480360381019061021d9190611a6b565b6105cc565b005b34801561023057600080fd5b506102396106f7565b6040516102469190611a98565b60405180910390f35b34801561025b57600080fd5b5061027660048036038101906102719190611ab3565b610701565b6040516102839190611a12565b60405180910390f35b34801561029857600080fd5b506102a1610730565b6040516102ae9190611b22565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d991906119b7565b610739565b6040516102eb9190611a12565b60405180910390f35b6102fc6107e3565b005b34801561030a57600080fd5b5061032560048036038101906103209190611b3d565b61090d565b005b34801561033357600080fd5b5061034e60048036038101906103499190611b6a565b610a04565b005b34801561035c57600080fd5b5061037760048036038101906103729190611b6a565b610aa1565b6040516103849190611a98565b60405180910390f35b34801561039957600080fd5b506103a2610aea565b6040516103af9190611a98565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190611b3d565b610af0565b005b3480156103ed57600080fd5b506103f6610b7e565b6040516104039190611938565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e91906119b7565b610c10565b6040516104409190611a12565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906119b7565b610d03565b60405161047d9190611a12565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190611b6a565b610d26565b005b3480156104bb57600080fd5b506104c4610dc3565b6040516104d19190611b97565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190611bb2565b610de9565b60405161050e9190611a98565b60405180910390f35b60606004805461052690611c21565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611c21565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050905090565b6000806105b4610e70565b90506105c1818585610e78565b600191505092915050565b6105d4610f63565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161060f9190611b97565b602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106509190611c67565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016106af92919061187f565b6020604051808303816000875af11580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611cc0565b505050565b6000600654905090565b60008061070c610e70565b9050610719858285610ff5565b6107248585856110ba565b60019150509392505050565b60006012905090565b600080610744610e70565b90506107d8818585600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107d39190611d1c565b610e78565b600191505092915050565b6107eb611682565b600047905060008111610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90611d9c565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161087b90611ded565b60006040518083038185875af1925050503d80600081146108b8576040519150601f19603f3d011682016040523d82523d6000602084013e6108bd565b606091505b5050905080610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890611e4e565b60405180910390fd5b505061090b6116d1565b565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109589190611e6e565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109f99190611a98565b60405180910390a350565b610a0c610f63565b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6967fd9beca531ca64fc6f897b579e9ea3e2e937cf55341df2151665ba43d5ef816001604051610a96929190611ea2565b60405180910390a150565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b610af8610f63565b600654811115610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490611f17565b60405180910390fd5b806007819055507fada23ae66cc6f76e527b8479635662be4c018ffeaac7392934330179340ad37481604051610b739190611a98565b60405180910390a150565b606060058054610b8d90611c21565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb990611c21565b8015610c065780601f10610bdb57610100808354040283529160200191610c06565b820191906000526020600020905b815481529060010190602001808311610be957829003601f168201915b5050505050905090565b600080610c1b610e70565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd890611f83565b60405180910390fd5b610cf782868684610cf29190611e6e565b610e78565b60019250505092915050565b600080610d0e610e70565b9050610d1b8185856110ba565b600191505092915050565b610d2e610f63565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6967fd9beca531ca64fc6f897b579e9ea3e2e937cf55341df2151665ba43d5ef816000604051610db8929190611ea2565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f569190611a98565b60405180910390a3505050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90611fef565b60405180910390fd5b565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110b4576110b3848484846110ae9190611e6e565b610e78565b5b50505050565b6110c483836116db565b156111595760075481600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111179190611d1c565b1115611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061205b565b60405180910390fd5b5b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906120c7565b60405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561128f5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561156f5761129d846117e7565b809250819350505083836112b19190611e6e565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113439190611d1c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113a79190611a98565b60405180910390a38160036000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114209190611d1c565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a69190611a98565b60405180910390a381600360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114fd9190611d1c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115629190611a98565b60405180910390a361167a565b838361157b9190611e6e565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461160d9190611d1c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516116719190611a98565b60405180910390a35b505050505050565b6002600054036116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90612133565b60405180910390fd5b6002600081905550565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117895750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117df5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080612710600a846117fa9190612153565b61180491906121c4565b91508160026118139190612153565b8361181e9190611e6e565b9050915091565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061185082611825565b9050919050565b61186081611845565b82525050565b6000819050919050565b61187981611866565b82525050565b60006040820190506118946000830185611857565b6118a16020830184611870565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118e25780820151818401526020810190506118c7565b60008484015250505050565b6000601f19601f8301169050919050565b600061190a826118a8565b61191481856118b3565b93506119248185602086016118c4565b61192d816118ee565b840191505092915050565b6000602082019050818103600083015261195281846118ff565b905092915050565b600080fd5b61196881611845565b811461197357600080fd5b50565b6000813590506119858161195f565b92915050565b61199481611866565b811461199f57600080fd5b50565b6000813590506119b18161198b565b92915050565b600080604083850312156119ce576119cd61195a565b5b60006119dc85828601611976565b92505060206119ed858286016119a2565b9150509250929050565b60008115159050919050565b611a0c816119f7565b82525050565b6000602082019050611a276000830184611a03565b92915050565b6000611a3882611845565b9050919050565b611a4881611a2d565b8114611a5357600080fd5b50565b600081359050611a6581611a3f565b92915050565b600060208284031215611a8157611a8061195a565b5b6000611a8f84828501611a56565b91505092915050565b6000602082019050611aad6000830184611870565b92915050565b600080600060608486031215611acc57611acb61195a565b5b6000611ada86828701611976565b9350506020611aeb86828701611976565b9250506040611afc868287016119a2565b9150509250925092565b600060ff82169050919050565b611b1c81611b06565b82525050565b6000602082019050611b376000830184611b13565b92915050565b600060208284031215611b5357611b5261195a565b5b6000611b61848285016119a2565b91505092915050565b600060208284031215611b8057611b7f61195a565b5b6000611b8e84828501611976565b91505092915050565b6000602082019050611bac6000830184611857565b92915050565b60008060408385031215611bc957611bc861195a565b5b6000611bd785828601611976565b9250506020611be885828601611976565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c3957607f821691505b602082108103611c4c57611c4b611bf2565b5b50919050565b600081519050611c618161198b565b92915050565b600060208284031215611c7d57611c7c61195a565b5b6000611c8b84828501611c52565b91505092915050565b611c9d816119f7565b8114611ca857600080fd5b50565b600081519050611cba81611c94565b92915050565b600060208284031215611cd657611cd561195a565b5b6000611ce484828501611cab565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d2782611866565b9150611d3283611866565b9250828201905080821115611d4a57611d49611ced565b5b92915050565b7f5a65726f2042616c616e63650000000000000000000000000000000000000000600082015250565b6000611d86600c836118b3565b9150611d9182611d50565b602082019050919050565b60006020820190508181036000830152611db581611d79565b9050919050565b600081905092915050565b50565b6000611dd7600083611dbc565b9150611de282611dc7565b600082019050919050565b6000611df882611dca565b9150819050919050565b7f53656e64204661696c6564000000000000000000000000000000000000000000600082015250565b6000611e38600b836118b3565b9150611e4382611e02565b602082019050919050565b60006020820190508181036000830152611e6781611e2b565b9050919050565b6000611e7982611866565b9150611e8483611866565b9250828203905081811115611e9c57611e9b611ced565b5b92915050565b6000604082019050611eb76000830185611857565b611ec46020830184611a03565b9392505050565b7f546f6f2048696768210000000000000000000000000000000000000000000000600082015250565b6000611f016009836118b3565b9150611f0c82611ecb565b602082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4c6f7720416c6c6f77616e636500000000000000000000000000000000000000600082015250565b6000611f6d600d836118b3565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b6000611fd9600c836118b3565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b7f5768616c65204e6f7420416c6c6f776564000000000000000000000000000000600082015250565b60006120456011836118b3565b91506120508261200f565b602082019050919050565b6000602082019050818103600083015261207481612038565b9050919050565b7f42616c616e6365204c6f77000000000000000000000000000000000000000000600082015250565b60006120b1600b836118b3565b91506120bc8261207b565b602082019050919050565b600060208201905081810360008301526120e0816120a4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061211d601f836118b3565b9150612128826120e7565b602082019050919050565b6000602082019050818103600083015261214c81612110565b9050919050565b600061215e82611866565b915061216983611866565b925082820261217781611866565b9150828204841483151761218e5761218d611ced565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006121cf82611866565b91506121da83611866565b9250826121ea576121e9612195565b5b82820490509291505056fea26469706673582212209a6e6fc68dda51ea98e9e79524362bef66a0b284fb360aa303a0efde2f4d5fdf64736f6c63430008130033

Deployed ByteCode

0x6080604052600436106101185760003560e01c80634c658048116100a0578063a457c2d711610064578063a457c2d71461040c578063a9059cbb14610449578063bf32371914610486578063d5f39488146104af578063dd62ed3e146104da57610158565b80634c6580481461032757806370a082311461035057806378109e541461038d57806391d55f41146103b857806395d89b41146103e157610158565b806323b872dd116100e757806323b872dd1461024f578063313ce5671461028c57806339509351146102b75780633ccfd60b146102f457806342966c68146102fe57610158565b806306fdde0314610193578063095ea7b3146101be57806317ffc320146101fb57806318160ddd1461022457610158565b36610158577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874333460405161014e92919061187f565b60405180910390a1005b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874333460405161018992919061187f565b60405180910390a1005b34801561019f57600080fd5b506101a8610517565b6040516101b59190611938565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e091906119b7565b6105a9565b6040516101f29190611a12565b60405180910390f35b34801561020757600080fd5b50610222600480360381019061021d9190611a6b565b6105cc565b005b34801561023057600080fd5b506102396106f7565b6040516102469190611a98565b60405180910390f35b34801561025b57600080fd5b5061027660048036038101906102719190611ab3565b610701565b6040516102839190611a12565b60405180910390f35b34801561029857600080fd5b506102a1610730565b6040516102ae9190611b22565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d991906119b7565b610739565b6040516102eb9190611a12565b60405180910390f35b6102fc6107e3565b005b34801561030a57600080fd5b5061032560048036038101906103209190611b3d565b61090d565b005b34801561033357600080fd5b5061034e60048036038101906103499190611b6a565b610a04565b005b34801561035c57600080fd5b5061037760048036038101906103729190611b6a565b610aa1565b6040516103849190611a98565b60405180910390f35b34801561039957600080fd5b506103a2610aea565b6040516103af9190611a98565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190611b3d565b610af0565b005b3480156103ed57600080fd5b506103f6610b7e565b6040516104039190611938565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e91906119b7565b610c10565b6040516104409190611a12565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906119b7565b610d03565b60405161047d9190611a12565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190611b6a565b610d26565b005b3480156104bb57600080fd5b506104c4610dc3565b6040516104d19190611b97565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190611bb2565b610de9565b60405161050e9190611a98565b60405180910390f35b60606004805461052690611c21565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611c21565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050905090565b6000806105b4610e70565b90506105c1818585610e78565b600191505092915050565b6105d4610f63565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161060f9190611b97565b602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106509190611c67565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016106af92919061187f565b6020604051808303816000875af11580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611cc0565b505050565b6000600654905090565b60008061070c610e70565b9050610719858285610ff5565b6107248585856110ba565b60019150509392505050565b60006012905090565b600080610744610e70565b90506107d8818585600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107d39190611d1c565b610e78565b600191505092915050565b6107eb611682565b600047905060008111610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90611d9c565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161087b90611ded565b60006040518083038185875af1925050503d80600081146108b8576040519150601f19603f3d011682016040523d82523d6000602084013e6108bd565b606091505b5050905080610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890611e4e565b60405180910390fd5b505061090b6116d1565b565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109589190611e6e565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109f99190611a98565b60405180910390a350565b610a0c610f63565b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6967fd9beca531ca64fc6f897b579e9ea3e2e937cf55341df2151665ba43d5ef816001604051610a96929190611ea2565b60405180910390a150565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b610af8610f63565b600654811115610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490611f17565b60405180910390fd5b806007819055507fada23ae66cc6f76e527b8479635662be4c018ffeaac7392934330179340ad37481604051610b739190611a98565b60405180910390a150565b606060058054610b8d90611c21565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb990611c21565b8015610c065780601f10610bdb57610100808354040283529160200191610c06565b820191906000526020600020905b815481529060010190602001808311610be957829003601f168201915b5050505050905090565b600080610c1b610e70565b90506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd890611f83565b60405180910390fd5b610cf782868684610cf29190611e6e565b610e78565b60019250505092915050565b600080610d0e610e70565b9050610d1b8185856110ba565b600191505092915050565b610d2e610f63565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6967fd9beca531ca64fc6f897b579e9ea3e2e937cf55341df2151665ba43d5ef816000604051610db8929190611ea2565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f569190611a98565b60405180910390a3505050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90611fef565b60405180910390fd5b565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110b4576110b3848484846110ae9190611e6e565b610e78565b5b50505050565b6110c483836116db565b156111595760075481600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111179190611d1c565b1115611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061205b565b60405180910390fd5b5b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906120c7565b60405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561128f5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561156f5761129d846117e7565b809250819350505083836112b19190611e6e565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113439190611d1c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113a79190611a98565b60405180910390a38160036000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114209190611d1c565b92505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a69190611a98565b60405180910390a381600360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114fd9190611d1c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115629190611a98565b60405180910390a361167a565b838361157b9190611e6e565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461160d9190611d1c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516116719190611a98565b60405180910390a35b505050505050565b6002600054036116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90612133565b60405180910390fd5b6002600081905550565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117895750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117df5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080612710600a846117fa9190612153565b61180491906121c4565b91508160026118139190612153565b8361181e9190611e6e565b9050915091565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061185082611825565b9050919050565b61186081611845565b82525050565b6000819050919050565b61187981611866565b82525050565b60006040820190506118946000830185611857565b6118a16020830184611870565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118e25780820151818401526020810190506118c7565b60008484015250505050565b6000601f19601f8301169050919050565b600061190a826118a8565b61191481856118b3565b93506119248185602086016118c4565b61192d816118ee565b840191505092915050565b6000602082019050818103600083015261195281846118ff565b905092915050565b600080fd5b61196881611845565b811461197357600080fd5b50565b6000813590506119858161195f565b92915050565b61199481611866565b811461199f57600080fd5b50565b6000813590506119b18161198b565b92915050565b600080604083850312156119ce576119cd61195a565b5b60006119dc85828601611976565b92505060206119ed858286016119a2565b9150509250929050565b60008115159050919050565b611a0c816119f7565b82525050565b6000602082019050611a276000830184611a03565b92915050565b6000611a3882611845565b9050919050565b611a4881611a2d565b8114611a5357600080fd5b50565b600081359050611a6581611a3f565b92915050565b600060208284031215611a8157611a8061195a565b5b6000611a8f84828501611a56565b91505092915050565b6000602082019050611aad6000830184611870565b92915050565b600080600060608486031215611acc57611acb61195a565b5b6000611ada86828701611976565b9350506020611aeb86828701611976565b9250506040611afc868287016119a2565b9150509250925092565b600060ff82169050919050565b611b1c81611b06565b82525050565b6000602082019050611b376000830184611b13565b92915050565b600060208284031215611b5357611b5261195a565b5b6000611b61848285016119a2565b91505092915050565b600060208284031215611b8057611b7f61195a565b5b6000611b8e84828501611976565b91505092915050565b6000602082019050611bac6000830184611857565b92915050565b60008060408385031215611bc957611bc861195a565b5b6000611bd785828601611976565b9250506020611be885828601611976565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c3957607f821691505b602082108103611c4c57611c4b611bf2565b5b50919050565b600081519050611c618161198b565b92915050565b600060208284031215611c7d57611c7c61195a565b5b6000611c8b84828501611c52565b91505092915050565b611c9d816119f7565b8114611ca857600080fd5b50565b600081519050611cba81611c94565b92915050565b600060208284031215611cd657611cd561195a565b5b6000611ce484828501611cab565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d2782611866565b9150611d3283611866565b9250828201905080821115611d4a57611d49611ced565b5b92915050565b7f5a65726f2042616c616e63650000000000000000000000000000000000000000600082015250565b6000611d86600c836118b3565b9150611d9182611d50565b602082019050919050565b60006020820190508181036000830152611db581611d79565b9050919050565b600081905092915050565b50565b6000611dd7600083611dbc565b9150611de282611dc7565b600082019050919050565b6000611df882611dca565b9150819050919050565b7f53656e64204661696c6564000000000000000000000000000000000000000000600082015250565b6000611e38600b836118b3565b9150611e4382611e02565b602082019050919050565b60006020820190508181036000830152611e6781611e2b565b9050919050565b6000611e7982611866565b9150611e8483611866565b9250828203905081811115611e9c57611e9b611ced565b5b92915050565b6000604082019050611eb76000830185611857565b611ec46020830184611a03565b9392505050565b7f546f6f2048696768210000000000000000000000000000000000000000000000600082015250565b6000611f016009836118b3565b9150611f0c82611ecb565b602082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4c6f7720416c6c6f77616e636500000000000000000000000000000000000000600082015250565b6000611f6d600d836118b3565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b6000611fd9600c836118b3565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b7f5768616c65204e6f7420416c6c6f776564000000000000000000000000000000600082015250565b60006120456011836118b3565b91506120508261200f565b602082019050919050565b6000602082019050818103600083015261207481612038565b9050919050565b7f42616c616e6365204c6f77000000000000000000000000000000000000000000600082015250565b60006120b1600b836118b3565b91506120bc8261207b565b602082019050919050565b600060208201905081810360008301526120e0816120a4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061211d601f836118b3565b9150612128826120e7565b602082019050919050565b6000602082019050818103600083015261214c81612110565b9050919050565b600061215e82611866565b915061216983611866565b925082820261217781611866565b9150828204841483151761218e5761218d611ced565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006121cf82611866565b91506121da83611866565b9250826121ea576121e9612195565b5b82820490509291505056fea26469706673582212209a6e6fc68dda51ea98e9e79524362bef66a0b284fb360aa303a0efde2f4d5fdf64736f6c63430008130033