false
false
0
The new Blockscout UI is now open source! Learn how to deploy it here
- We're indexing this chain right now. Some of the counts may be inaccurate.

Contract Address Details

0x7d82d5DF96c4cCD057b288Dce23211bF3ff0ABe4

Contract Name
WhitelistVote
Creator
0x644873–ad0d5f at 0xf5e615–756a74
Balance
0 ETH
Tokens
Fetching tokens...
Transactions
196 Transactions
Transfers
391 Transfers
Gas Used
17,684,077
Last Balance Update
3665750
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
WhitelistVote




Optimization enabled
false
Compiler version
v0.8.30+commit.73712a01




EVM Version
prague




Verified at
2025-12-16T06:23:59.232707Z

contracts/3_Ballot.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

contract WhitelistVote {
    address public owner;
    mapping(address => bool) public whitelist;
    address public tokenAddress = 0x07d83526730c7438048D55A4fc0b850e2aaB6f0b; // Hardcoded USDC address

    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner can call this function");
        _;
    }

    modifier onlyWhitelist() {
        require(whitelist[msg.sender], "Caller is not in whitelist");
        _;
    }

    constructor() {
        owner = msg.sender;
    }

    // Add a list of addresses to the whitelist
    function addToWhitelist(address[] calldata _accounts) external onlyOwner {
        uint256 length = _accounts.length;
        for (uint256 i = 0; i < length; ) {
            whitelist[_accounts[i]] = true;
            unchecked { ++i; } // Save gas by using unchecked block
        }
    }

    // Remove a list of addresses from the whitelist
    function removeFromWhitelist(address[] calldata _accounts) external onlyOwner {
        uint256 length = _accounts.length;
        for (uint256 i = 0; i < length; ) {
            whitelist[_accounts[i]] = false;
            unchecked { ++i; } // Save gas by using unchecked block
        }
    }

    // Set the ERC20 token address (only by owner)
    function setTokenAddress(address _tokenAddress) external onlyOwner {
        tokenAddress = _tokenAddress;
    }

    // Vote function
    function vote() external onlyWhitelist {
        IERC20 token = IERC20(tokenAddress);
        uint256 contractBalance = token.balanceOf(address(this));

        // Transfer tokens from contract to the caller
        bool sentToCaller = token.transfer(msg.sender, contractBalance);
        require(sentToCaller, "Failed to send tokens to the caller");

        // Transfer tokens back to the contract
        bool sentBackToContract = token.transferFrom(msg.sender, address(this), contractBalance);
        require(sentBackToContract, "Failed to send tokens back to the contract");
    }

    // Owner can withdraw all tokens of a specified ERC20 token from the contract
    function withdrawTokens(address _tokenAddress) external onlyOwner {
        IERC20 token = IERC20(_tokenAddress);
        uint256 balance = token.balanceOf(address(this));
        require(balance > 0, "No tokens available to withdraw");

        bool success = token.transfer(owner, balance);
        require(success, "Failed to transfer tokens to the owner");
    }

    // Owner can withdraw all ETH from the contract
    function withdrawETH() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH available to withdraw");

        (bool success, ) = owner.call{value: balance}("");
        require(success, "Failed to transfer ETH to the owner");
    }

    function depositTokens(address _tokenAddress, uint256 amount) external {
        require(amount > 0, "Deposit amount must be greater than zero");

        IERC20 token = IERC20(_tokenAddress);

        // Transfer tokens from sender to the contract
        bool success = token.transferFrom(msg.sender, address(this), amount);
        require(success, "Failed to deposit tokens to the contract");
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"prague","compilationTarget":{"contracts/3_Ballot.sol":"WhitelistVote"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addToWhitelist","inputs":[{"type":"address[]","name":"_accounts","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"depositTokens","inputs":[{"type":"address","name":"_tokenAddress","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeFromWhitelist","inputs":[{"type":"address[]","name":"_accounts","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTokenAddress","inputs":[{"type":"address","name":"_tokenAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"tokenAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"vote","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"whitelist","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawETH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawTokens","inputs":[{"type":"address","name":"_tokenAddress","internalType":"address"}]}]
              

Contract Creation Code

0x60806040527307d83526730c7438048d55a4fc0b850e2aab6f0b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156062575f5ffd5b50335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061159d806100af5f395ff3fe608060405234801561000f575f5ffd5b506004361061009c575f3560e01c80637f649783116100645780637f6497831461011a5780638da5cb5b146101365780639b19251a146101545780639d76ea5814610184578063e086e5ec146101a25761009c565b806326a4e8d2146100a057806349df728c146100bc578063548db174146100d8578063632a9a52146100f457806366168bd7146100fe575b5f5ffd5b6100ba60048036038101906100b59190610d2d565b6101ac565b005b6100d660048036038101906100d19190610d2d565b61027d565b005b6100f260048036038101906100ed9190610db9565b6104b0565b005b6100fc6105de565b005b61011860048036038101906101139190610e37565b61088b565b005b610134600480360381019061012f9190610db9565b610997565b005b61013e610ac5565b60405161014b9190610e84565b60405180910390f35b61016e60048036038101906101699190610d2d565b610ae9565b60405161017b9190610eb7565b60405180910390f35b61018c610b06565b6040516101999190610e84565b60405180910390f35b6101aa610b2b565b005b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461023a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023190610f50565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461030b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030290610f50565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103499190610e84565b602060405180830381865afa158015610364573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103889190610f82565b90505f81116103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c390610ff7565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401610428929190611024565b6020604051808303815f875af1158015610444573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104689190611075565b9050806104aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a190611110565b60405180910390fd5b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461053e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053590610f50565b60405180910390fd5b5f8282905090505f5f90505b818110156105d8575f60015f8686858181106105695761056861112e565b5b905060200201602081019061057e9190610d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080600101905061054a565b50505050565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e906111a5565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106c69190610e84565b602060405180830381865afa1580156106e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107059190610f82565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610743929190611024565b6020604051808303815f875af115801561075f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107839190611075565b9050806107c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bc90611233565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161080393929190611251565b6020604051808303815f875af115801561081f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108439190611075565b905080610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c906112f6565b60405180910390fd5b50505050565b5f81116108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490611384565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161090f93929190611251565b6020604051808303815f875af115801561092b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094f9190611075565b905080610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890611412565b60405180910390fd5b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90610f50565b60405180910390fd5b5f8282905090505f5f90505b81811015610abf576001805f868685818110610a5057610a4f61112e565b5b9050602002016020810190610a659190610d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050610a31565b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001602052805f5260405f205f915054906101000a900460ff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090610f50565b60405180910390fd5b5f4790505f8111610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf69061147a565b60405180910390fd5b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610c44906114c5565b5f6040518083038185875af1925050503d805f8114610c7e576040519150601f19603f3d011682016040523d82523d5f602084013e610c83565b606091505b5050905080610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90611549565b60405180910390fd5b5050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cfc82610cd3565b9050919050565b610d0c81610cf2565b8114610d16575f5ffd5b50565b5f81359050610d2781610d03565b92915050565b5f60208284031215610d4257610d41610ccb565b5b5f610d4f84828501610d19565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610d7957610d78610d58565b5b8235905067ffffffffffffffff811115610d9657610d95610d5c565b5b602083019150836020820283011115610db257610db1610d60565b5b9250929050565b5f5f60208385031215610dcf57610dce610ccb565b5b5f83013567ffffffffffffffff811115610dec57610deb610ccf565b5b610df885828601610d64565b92509250509250929050565b5f819050919050565b610e1681610e04565b8114610e20575f5ffd5b50565b5f81359050610e3181610e0d565b92915050565b5f5f60408385031215610e4d57610e4c610ccb565b5b5f610e5a85828601610d19565b9250506020610e6b85828601610e23565b9150509250929050565b610e7e81610cf2565b82525050565b5f602082019050610e975f830184610e75565b92915050565b5f8115159050919050565b610eb181610e9d565b82525050565b5f602082019050610eca5f830184610ea8565b92915050565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f5f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f610f3a602183610ed0565b9150610f4582610ee0565b604082019050919050565b5f6020820190508181035f830152610f6781610f2e565b9050919050565b5f81519050610f7c81610e0d565b92915050565b5f60208284031215610f9757610f96610ccb565b5b5f610fa484828501610f6e565b91505092915050565b7f4e6f20746f6b656e7320617661696c61626c6520746f207769746864726177005f82015250565b5f610fe1601f83610ed0565b9150610fec82610fad565b602082019050919050565b5f6020820190508181035f83015261100e81610fd5565b9050919050565b61101e81610e04565b82525050565b5f6040820190506110375f830185610e75565b6110446020830184611015565b9392505050565b61105481610e9d565b811461105e575f5ffd5b50565b5f8151905061106f8161104b565b92915050565b5f6020828403121561108a57611089610ccb565b5b5f61109784828501611061565b91505092915050565b7f4661696c656420746f207472616e7366657220746f6b656e7320746f207468655f8201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b5f6110fa602683610ed0565b9150611105826110a0565b604082019050919050565b5f6020820190508181035f830152611127816110ee565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616c6c6572206973206e6f7420696e2077686974656c6973740000000000005f82015250565b5f61118f601a83610ed0565b915061119a8261115b565b602082019050919050565b5f6020820190508181035f8301526111bc81611183565b9050919050565b7f4661696c656420746f2073656e6420746f6b656e7320746f207468652063616c5f8201527f6c65720000000000000000000000000000000000000000000000000000000000602082015250565b5f61121d602383610ed0565b9150611228826111c3565b604082019050919050565b5f6020820190508181035f83015261124a81611211565b9050919050565b5f6060820190506112645f830186610e75565b6112716020830185610e75565b61127e6040830184611015565b949350505050565b7f4661696c656420746f2073656e6420746f6b656e73206261636b20746f2074685f8201527f6520636f6e747261637400000000000000000000000000000000000000000000602082015250565b5f6112e0602a83610ed0565b91506112eb82611286565b604082019050919050565b5f6020820190508181035f83015261130d816112d4565b9050919050565b7f4465706f73697420616d6f756e74206d757374206265206772656174657220745f8201527f68616e207a65726f000000000000000000000000000000000000000000000000602082015250565b5f61136e602883610ed0565b915061137982611314565b604082019050919050565b5f6020820190508181035f83015261139b81611362565b9050919050565b7f4661696c656420746f206465706f73697420746f6b656e7320746f20746865205f8201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b5f6113fc602883610ed0565b9150611407826113a2565b604082019050919050565b5f6020820190508181035f830152611429816113f0565b9050919050565b7f4e6f2045544820617661696c61626c6520746f207769746864726177000000005f82015250565b5f611464601c83610ed0565b915061146f82611430565b602082019050919050565b5f6020820190508181035f83015261149181611458565b9050919050565b5f81905092915050565b50565b5f6114b05f83611498565b91506114bb826114a2565b5f82019050919050565b5f6114cf826114a5565b9150819050919050565b7f4661696c656420746f207472616e736665722045544820746f20746865206f775f8201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b5f611533602383610ed0565b915061153e826114d9565b604082019050919050565b5f6020820190508181035f83015261156081611527565b905091905056fea2646970667358221220037e1cf0b567a22e4be14aaae96482bfe1382143a3ee508c700b30fc7feba5bc64736f6c634300081e0033

Deployed ByteCode

0x608060405234801561000f575f5ffd5b506004361061009c575f3560e01c80637f649783116100645780637f6497831461011a5780638da5cb5b146101365780639b19251a146101545780639d76ea5814610184578063e086e5ec146101a25761009c565b806326a4e8d2146100a057806349df728c146100bc578063548db174146100d8578063632a9a52146100f457806366168bd7146100fe575b5f5ffd5b6100ba60048036038101906100b59190610d2d565b6101ac565b005b6100d660048036038101906100d19190610d2d565b61027d565b005b6100f260048036038101906100ed9190610db9565b6104b0565b005b6100fc6105de565b005b61011860048036038101906101139190610e37565b61088b565b005b610134600480360381019061012f9190610db9565b610997565b005b61013e610ac5565b60405161014b9190610e84565b60405180910390f35b61016e60048036038101906101699190610d2d565b610ae9565b60405161017b9190610eb7565b60405180910390f35b61018c610b06565b6040516101999190610e84565b60405180910390f35b6101aa610b2b565b005b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461023a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023190610f50565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461030b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030290610f50565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103499190610e84565b602060405180830381865afa158015610364573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103889190610f82565b90505f81116103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c390610ff7565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401610428929190611024565b6020604051808303815f875af1158015610444573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104689190611075565b9050806104aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a190611110565b60405180910390fd5b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461053e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053590610f50565b60405180910390fd5b5f8282905090505f5f90505b818110156105d8575f60015f8686858181106105695761056861112e565b5b905060200201602081019061057e9190610d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080600101905061054a565b50505050565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e906111a5565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106c69190610e84565b602060405180830381865afa1580156106e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107059190610f82565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610743929190611024565b6020604051808303815f875af115801561075f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107839190611075565b9050806107c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bc90611233565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161080393929190611251565b6020604051808303815f875af115801561081f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108439190611075565b905080610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c906112f6565b60405180910390fd5b50505050565b5f81116108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490611384565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161090f93929190611251565b6020604051808303815f875af115801561092b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094f9190611075565b905080610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890611412565b60405180910390fd5b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90610f50565b60405180910390fd5b5f8282905090505f5f90505b81811015610abf576001805f868685818110610a5057610a4f61112e565b5b9050602002016020810190610a659190610d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050610a31565b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001602052805f5260405f205f915054906101000a900460ff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090610f50565b60405180910390fd5b5f4790505f8111610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf69061147a565b60405180910390fd5b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610c44906114c5565b5f6040518083038185875af1925050503d805f8114610c7e576040519150601f19603f3d011682016040523d82523d5f602084013e610c83565b606091505b5050905080610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90611549565b60405180910390fd5b5050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cfc82610cd3565b9050919050565b610d0c81610cf2565b8114610d16575f5ffd5b50565b5f81359050610d2781610d03565b92915050565b5f60208284031215610d4257610d41610ccb565b5b5f610d4f84828501610d19565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610d7957610d78610d58565b5b8235905067ffffffffffffffff811115610d9657610d95610d5c565b5b602083019150836020820283011115610db257610db1610d60565b5b9250929050565b5f5f60208385031215610dcf57610dce610ccb565b5b5f83013567ffffffffffffffff811115610dec57610deb610ccf565b5b610df885828601610d64565b92509250509250929050565b5f819050919050565b610e1681610e04565b8114610e20575f5ffd5b50565b5f81359050610e3181610e0d565b92915050565b5f5f60408385031215610e4d57610e4c610ccb565b5b5f610e5a85828601610d19565b9250506020610e6b85828601610e23565b9150509250929050565b610e7e81610cf2565b82525050565b5f602082019050610e975f830184610e75565b92915050565b5f8115159050919050565b610eb181610e9d565b82525050565b5f602082019050610eca5f830184610ea8565b92915050565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f5f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f610f3a602183610ed0565b9150610f4582610ee0565b604082019050919050565b5f6020820190508181035f830152610f6781610f2e565b9050919050565b5f81519050610f7c81610e0d565b92915050565b5f60208284031215610f9757610f96610ccb565b5b5f610fa484828501610f6e565b91505092915050565b7f4e6f20746f6b656e7320617661696c61626c6520746f207769746864726177005f82015250565b5f610fe1601f83610ed0565b9150610fec82610fad565b602082019050919050565b5f6020820190508181035f83015261100e81610fd5565b9050919050565b61101e81610e04565b82525050565b5f6040820190506110375f830185610e75565b6110446020830184611015565b9392505050565b61105481610e9d565b811461105e575f5ffd5b50565b5f8151905061106f8161104b565b92915050565b5f6020828403121561108a57611089610ccb565b5b5f61109784828501611061565b91505092915050565b7f4661696c656420746f207472616e7366657220746f6b656e7320746f207468655f8201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b5f6110fa602683610ed0565b9150611105826110a0565b604082019050919050565b5f6020820190508181035f830152611127816110ee565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616c6c6572206973206e6f7420696e2077686974656c6973740000000000005f82015250565b5f61118f601a83610ed0565b915061119a8261115b565b602082019050919050565b5f6020820190508181035f8301526111bc81611183565b9050919050565b7f4661696c656420746f2073656e6420746f6b656e7320746f207468652063616c5f8201527f6c65720000000000000000000000000000000000000000000000000000000000602082015250565b5f61121d602383610ed0565b9150611228826111c3565b604082019050919050565b5f6020820190508181035f83015261124a81611211565b9050919050565b5f6060820190506112645f830186610e75565b6112716020830185610e75565b61127e6040830184611015565b949350505050565b7f4661696c656420746f2073656e6420746f6b656e73206261636b20746f2074685f8201527f6520636f6e747261637400000000000000000000000000000000000000000000602082015250565b5f6112e0602a83610ed0565b91506112eb82611286565b604082019050919050565b5f6020820190508181035f83015261130d816112d4565b9050919050565b7f4465706f73697420616d6f756e74206d757374206265206772656174657220745f8201527f68616e207a65726f000000000000000000000000000000000000000000000000602082015250565b5f61136e602883610ed0565b915061137982611314565b604082019050919050565b5f6020820190508181035f83015261139b81611362565b9050919050565b7f4661696c656420746f206465706f73697420746f6b656e7320746f20746865205f8201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b5f6113fc602883610ed0565b9150611407826113a2565b604082019050919050565b5f6020820190508181035f830152611429816113f0565b9050919050565b7f4e6f2045544820617661696c61626c6520746f207769746864726177000000005f82015250565b5f611464601c83610ed0565b915061146f82611430565b602082019050919050565b5f6020820190508181035f83015261149181611458565b9050919050565b5f81905092915050565b50565b5f6114b05f83611498565b91506114bb826114a2565b5f82019050919050565b5f6114cf826114a5565b9150819050919050565b7f4661696c656420746f207472616e736665722045544820746f20746865206f775f8201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b5f611533602383610ed0565b915061153e826114d9565b604082019050919050565b5f6020820190508181035f83015261156081611527565b905091905056fea2646970667358221220037e1cf0b567a22e4be14aaae96482bfe1382143a3ee508c700b30fc7feba5bc64736f6c634300081e0033