Contract 0xb7819A8714fCa85239E4b881291819A79Aa703E4

Contract Overview

Balance:
0 AVAX

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x84e9a13241db2fbd98df7a8355e192a9d238f572870e9b1e014c57e4fac67c8eStake105965352022-06-10 16:51:17110 days 18 hrs ago0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.002426923 26.5
0x54751a773706b639cdb708c16bfd75b513cb58c21e2797c1dd0bb74f223a0405Stake105964412022-06-10 16:47:05110 days 18 hrs ago0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.00258344401 27.3719209
0xa5a48d4a4eea2bb6247574adcc81e2ee2f1e927911e754c157845e6e3f84da61Stake105885452022-06-10 10:45:52111 days 14 mins ago0x2489b8c7e72763e993437efaee8792b2ba2be69d IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.00261778674 26.94
0x0762149ef907c91fe5ebbc3925de42ba528c073d31066689fcd8f60d634bd0fcStake105695962022-06-09 20:07:40111 days 14 hrs ago0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.00557628366 26.94
0xda33fba44b5311a739258864b31782ef13196814448189b2663a110c40031c20Stake105693762022-06-09 19:56:31111 days 15 hrs ago0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.002499533 26.5
0x738261c036fa26eb95c27641f6dad965123e1d0def6aef42ffb2c294617b624bStake104209592022-06-05 15:48:21115 days 19 hrs ago0x6d62709a3b3947a8a3232f95da6f0656c225edce IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.00228835 25
0x424ee9ac0926f1407b46676340a233aaa501dfcb16ce40a7ea2119eacd1e4cd1Stake104209532022-06-05 15:47:52115 days 19 hrs ago0x6d62709a3b3947a8a3232f95da6f0656c225edce IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.002359275 25
0x58451c1aa07183f2a14566f76ca3f5b18752e6ed72b2adfaab32115d196d7e66Stake104209472022-06-05 15:47:21115 days 19 hrs ago0x6d62709a3b3947a8a3232f95da6f0656c225edce IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005174725 25
0x140345204992ea09c50ae5635b853c64e0abee5c8926a7b1680c238638013113Claim My Funds103937292022-06-04 17:08:58116 days 17 hrs ago0x7116faa3314eabc11c3cb70ee32b26d413da70b0 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.001816632 27.425
0xf08563f11036e8b14faf3697b921dca0acf5306041286fc8e764bbcdeefee397Stake103936682022-06-04 17:06:40116 days 17 hrs ago0x7116faa3314eabc11c3cb70ee32b26d413da70b0 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.0054842545 26.5
0x48339218415015b6d5545d62ea610ba7955ceb54631ddd8276a358297e492e8bStake103860662022-06-04 11:08:34116 days 23 hrs ago0xe2de2929650887b1c17a33737c6dd0591e4b6ebc IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.00250933265 27.425
0xb340906ab8ab0a56e438175df926f7070901c62498ab1146c32a8f60363ffec5Stake103783732022-06-04 5:11:01117 days 5 hrs ago0x1e3ee16d15638efe4729d0a704c9668648677ad8 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005632513124 27.213232025
0xd31d8539ed9271aab72ad02efa76ed83228b453ac7fce4cb0717b39ac39ce6e3Stake103783712022-06-04 5:10:50117 days 5 hrs ago0x8be94576cd5fc156a157eabf05d9f3c89ea3da3d IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005646680798 27.2816825
0x3d5ee3b327e21bbe37afafa5d15006e2d242b3c3625543ca05549bc722eec4d9Stake103783702022-06-04 5:10:48117 days 5 hrs ago0x33144b99eb3002bd9150e1a3ab06612b28b6fe73 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005646680798 27.2816825
0x0ab5a88275ca02f68acd600c3d2bf9653f7ab0049afa01e2f555dfc83f997e20Stake103783692022-06-04 5:10:46117 days 5 hrs ago0x864d19b27f6b724086fcd05cf37df2c85aca41fd IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005646680798 27.2816825
0xb03827d50f23c0c7947c3db359d383fd0e53c7c2b71f82812c2a529e7dcfe96dStake103783672022-06-04 5:10:42117 days 5 hrs ago0x33fca7a95754e9919173be30d14fb74e35932298 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005646680798 27.2816825
0x47f073b6ac22b5d27bf9cd44c75988ef4a751f002c7620449ad7df73b359222aStake103783662022-06-04 5:10:40117 days 5 hrs ago0xa6c3f5a37c13f5763bb08df659a8e8e6336eb61e IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005646680798 27.2816825
0x75a436fa592f018b8dfed62a8b8bfc23d9393656b0f847de13eb79352aca204cStake103783632022-06-04 5:10:32117 days 5 hrs ago0x19884aec2e463c06f08c3f380568d1a531d3293b IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005676344225 27.425
0x90a525f38d7f090901cc6384ea7e07f4830bd141791c5eec952a4f11deb3a73dStake103631682022-06-03 18:15:43117 days 16 hrs ago0xcc91feaaf9df139304316162b7005e9f773d3df0 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.002454787412 26.825346
0x346e527647ccce11c46a44bf8799b23ea60eaaa3e301300ad8688433fd0fc3e1Stake103630762022-06-03 18:12:00117 days 16 hrs ago0xcc91feaaf9df139304316162b7005e9f773d3df0 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.002789214797 29.563365
0x85e7119a57e07b7ad9135d417360798e0a44cf43efcecaa17499b70d7b046008Stake103629312022-06-03 18:07:31117 days 16 hrs ago0xcc91feaaf9df139304316162b7005e9f773d3df0 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.02023200175 97.75
0xa690684f524719f2691dd093b7e4c6c4626ee271a1de5165a3cd1a802f69c244Stake103595262022-06-03 15:55:36117 days 19 hrs ago0xc9bfff2757931e030873905c0556eacb0a3b254d IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.0054852085 26.5
0xc9880499dd10be93b778db43e5d4c27203ce8c06f7e7d8a1ab60304bcd3c9ed3Stake103588912022-06-03 15:29:32117 days 19 hrs ago0xdd53cfa385792d1bf0730330ed0ae8c20d161bc4 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.005676344225 27.425
0x85451af4aed176fbf9641e9bdb1093296320c8aa3deed40fb229d9fa808de70aStake103570812022-06-03 14:10:53117 days 20 hrs ago0x66f35d4247ddf1e73e0563f97705eb00a03bd129 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.0054845725 26.5
0x7eaa3a993916ab505a45c1c15e81c65fbd5ef6b484ef0bfca59d56ba62823ac9Stake103504892022-06-03 9:40:31118 days 1 hr ago0x57fb45bb8f69a436b11b22a4cf425fb438ac8d84 IN 0xb7819a8714fca85239e4b881291819a79aa703e40 AVAX0.0025008315 26.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x84e9a13241db2fbd98df7a8355e192a9d238f572870e9b1e014c57e4fac67c8e105965352022-06-10 16:51:17110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x84e9a13241db2fbd98df7a8355e192a9d238f572870e9b1e014c57e4fac67c8e105965352022-06-10 16:51:17110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x84e9a13241db2fbd98df7a8355e192a9d238f572870e9b1e014c57e4fac67c8e105965352022-06-10 16:51:17110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x84e9a13241db2fbd98df7a8355e192a9d238f572870e9b1e014c57e4fac67c8e105965352022-06-10 16:51:17110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x54751a773706b639cdb708c16bfd75b513cb58c21e2797c1dd0bb74f223a0405105964412022-06-10 16:47:05110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x54751a773706b639cdb708c16bfd75b513cb58c21e2797c1dd0bb74f223a0405105964412022-06-10 16:47:05110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x54751a773706b639cdb708c16bfd75b513cb58c21e2797c1dd0bb74f223a0405105964412022-06-10 16:47:05110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x54751a773706b639cdb708c16bfd75b513cb58c21e2797c1dd0bb74f223a0405105964412022-06-10 16:47:05110 days 18 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x377ef95dce27771637b00a85b3bb86ea343a1db4c22bc014bd81f957a5e7cb84105886342022-06-10 10:50:59111 days 9 mins ago 0xb9e4f16dc6db591488ea73bc390dfbfdbf15f3d20xb7819a8714fca85239e4b881291819a79aa703e40 AVAX
0xa5a48d4a4eea2bb6247574adcc81e2ee2f1e927911e754c157845e6e3f84da61105885452022-06-10 10:45:52111 days 14 mins ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0xa5a48d4a4eea2bb6247574adcc81e2ee2f1e927911e754c157845e6e3f84da61105885452022-06-10 10:45:52111 days 14 mins ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0xa5a48d4a4eea2bb6247574adcc81e2ee2f1e927911e754c157845e6e3f84da61105885452022-06-10 10:45:52111 days 14 mins ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0xa5a48d4a4eea2bb6247574adcc81e2ee2f1e927911e754c157845e6e3f84da61105885452022-06-10 10:45:52111 days 14 mins ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x22f85d58cbef7fb8b46a724f290382ef459ba35a15d6276b79e1660744c3ae08105700962022-06-09 20:32:40111 days 14 hrs ago 0x4e14ea1cfbe4015f31c7f989f2e3a48fa65860970xb7819a8714fca85239e4b881291819a79aa703e40 AVAX
0x83535cd83f6cac01fdf453c3399387a2358983ed322d970ec5d867d59fdfa3b1105700842022-06-09 20:32:11111 days 14 hrs ago 0x4e14ea1cfbe4015f31c7f989f2e3a48fa65860970xb7819a8714fca85239e4b881291819a79aa703e40 AVAX
0x2b17b68a67e8d74029509c0925d46ecc8a237858f4c4cce8b3f7e21d121884f3105697242022-06-09 20:14:01111 days 14 hrs ago 0x4e14ea1cfbe4015f31c7f989f2e3a48fa65860970xb7819a8714fca85239e4b881291819a79aa703e40 AVAX
0x0762149ef907c91fe5ebbc3925de42ba528c073d31066689fcd8f60d634bd0fc105695962022-06-09 20:07:40111 days 14 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x0762149ef907c91fe5ebbc3925de42ba528c073d31066689fcd8f60d634bd0fc105695962022-06-09 20:07:40111 days 14 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x0762149ef907c91fe5ebbc3925de42ba528c073d31066689fcd8f60d634bd0fc105695962022-06-09 20:07:40111 days 14 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0x0762149ef907c91fe5ebbc3925de42ba528c073d31066689fcd8f60d634bd0fc105695962022-06-09 20:07:40111 days 14 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0xa7ddc95868bfaed92aa32a13b153498c18ae0ed255cdc6deb3e0a955a8d34ddc105693862022-06-09 19:57:12111 days 15 hrs ago 0x4e14ea1cfbe4015f31c7f989f2e3a48fa65860970xb7819a8714fca85239e4b881291819a79aa703e40 AVAX
0xda33fba44b5311a739258864b31782ef13196814448189b2663a110c40031c20105693762022-06-09 19:56:31111 days 15 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0xda33fba44b5311a739258864b31782ef13196814448189b2663a110c40031c20105693762022-06-09 19:56:31111 days 15 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0xda33fba44b5311a739258864b31782ef13196814448189b2663a110c40031c20105693762022-06-09 19:56:31111 days 15 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
0xda33fba44b5311a739258864b31782ef13196814448189b2663a110c40031c20105693762022-06-09 19:56:31111 days 15 hrs ago 0xb7819a8714fca85239e4b881291819a79aa703e40x0708f10f657b16abe18954361e96a641b217648b0 AVAX
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xb85C2C46B429836507AdE94b03f1E1dc06c3aC39

Contract Name:
VestingStake

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at testnet.snowtrace.io on 2022-04-07
*/

// Sources flattened with hardhat v2.8.4 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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);
}


// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


// File @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts v4.4.1 (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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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


// File @openzeppelin/contracts/utils/[email protected]

// 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 @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/VestingStake.sol

pragma solidity 0.8.9;

/// @title A vesting style staking contract with extendable linear decay
/// @author Auroter
/// @notice Allows you to lock tokens in exchange for governance tokens
/// @notice Locks can be extended or deposited into
/// @notice Maximum deposit duration is two years (104 weeks)
/// @dev Simply call stake(...) to create initial lock or extend one that already exists for the user




contract VestingStake is ReentrancyGuard, Ownable {
    using SafeERC20 for IERC20;

    // Info pertaining to staking contract
    address public stakedToken; // An ERC20 Token to be staked (i.e. Axial)
    string public name; // New asset after staking (i.e. sAxial)
    string public symbol; // New asset symbol after staking (i.e. sAXIAL)
    uint256 private interpolationGranularity = 1e18; // Note: ERC20.decimals() is for display and does not affect arithmetic!

    // Info pertaining to users
    address[] private users; // An array containing all user addresses
    mapping(address => LockVe) private locks; // A mapping of each users lock
    mapping(address => uint256) private lockedFunds; // A mapping of each users total deposited funds
    mapping(address => uint256) private deferredFunds; // A mapping of vested funds the user wishes to leave unclaimed

    // Lock structure, only one of these is allowed per user
    // A DELTA can be derived as the degree of interpolation between the start/end block:
    // Delta = (end - now) / end - start
    // This can be used to determine how much of our staked token is unlocked:
    // currentAmountLocked = startingAmountLocked - (delta * startingAmountLocked)
    struct LockVe {
        uint256 startBlockTime;
        uint256 endBlockTime;
        uint256 startingAmountLocked;
        bool initialized;
    }

    /// @notice Constructor
    /// @param _stakedToken Address of the token our users will deposit and lock in exchange for governance tokens
    /// @param _name Desired name of our governance token
    /// @param _symbol Desired symbol of our governance token
    /// @param _governance Address of wallet which will be given adminstrative access to this contract
    constructor(
        address _stakedToken,
        string memory _name,
        string memory _symbol,
        address _governance
    ) {
        transferOwnership(_governance);
        stakedToken = _stakedToken;
        name = _name;
        symbol = _symbol;
    }

    /// @notice Emitted when a user stakes for the first time
    /// @param user Address of the user who staked
    /// @param amount Quantity of tokens staked
    /// @param duration Length in seconds of stake
    event userStaked(address indexed user, uint256 amount, uint256 duration);

    /// @notice Emitted when a user extends and/or deposits into their existing stake
    /// @param user Address of the user who staked
    /// @param amount New total quantity of tokens in stake
    /// @param duration New total length of stake
    event userExtended(address indexed user, uint256 amount, uint256 duration);

    /// @notice Emitted when a user claims outstanding vested balance
    /// @param user Address of the user who claimed
    /// @param amount Quantity of tokens claimed
    event userClaimed(address indexed user, uint256 amount);

    /// @notice Calculate the number of vested tokens a user has not claimed
    /// @param _userAddr Address of any user to view the number of vested tokens they have not yet claimed
    /// @return Quantity of tokens which have vested but are unclaimed by the specified user
    function getUnclaimed(address _userAddr) public view returns (uint256) {
        uint256 totalFundsDeposited = lockedFunds[_userAddr] + deferredFunds[_userAddr];
        uint256 currentBalance = getBalance(_userAddr);
        uint256 fundsToClaim = totalFundsDeposited - currentBalance;
        return fundsToClaim;
    }

    /// @notice Calculate the number of tokens a user still has locked
    /// @param _userAddr Address of any user to view the number of tokens they still have locked
    /// @return Quantity of tokens the user has locked
    function getBalance(address _userAddr) public view returns (uint256) {
        LockVe memory usersLock = locks[_userAddr];

        uint256 currentTimestamp = block.timestamp;
        uint256 balance = 0;

        if (usersLock.endBlockTime > currentTimestamp) {
            uint256 granularDelta = ((usersLock.endBlockTime - currentTimestamp) * interpolationGranularity) / (usersLock.endBlockTime - usersLock.startBlockTime);
            balance += (usersLock.startingAmountLocked * granularDelta) / interpolationGranularity;
        }
        return balance;
    }

    /// @notice This is an overload for getPower so that users can see the 'token' in their wallets
    function balanceOf(address _account) external view returns (uint256) {
        return getPower(_account);
    }

    /// @notice Calculate the number of governance tokens currently allocated to a user by this contract
    /// @param _userAddr Address of any user to view the number of governance tokens currently awarded to them
    /// @return Quantity of governance tokens allocated to the user
    function getPower(address _userAddr) public view returns (uint256) {
        LockVe memory usersLock = locks[_userAddr];

        uint256 currentTimestamp = block.timestamp;
        uint256 power = 0;

        if (usersLock.endBlockTime > currentTimestamp) {
            // let delta = elapsed / totalLocktinme
            // let startingPower = duration / 2 years
            // let power = delta * startingPower
            uint256 startingAmountAwarded = ((usersLock.endBlockTime - usersLock.startBlockTime) * usersLock.startingAmountLocked) / 104 weeks;
            uint256 granularDelta = ((usersLock.endBlockTime - currentTimestamp) * interpolationGranularity) / (usersLock.endBlockTime - usersLock.startBlockTime);
            power += (startingAmountAwarded * granularDelta) / interpolationGranularity;
        }
        return power;
    }

    /// @notice Retrieve a list of all users who have ever staked
    /// @return An array of addresses of all users who have ever staked
    function getAllUsers() public view returns (address[] memory) {
        return users;
    }

    /// @notice Check if a user has ever created a Lock in this contract
    /// @param _userAddr Address of any user to check
    /// @dev This may be used by the web application to determine if the UI says "Create Lock" or "Add to Lock"
    /// @return True if the user has ever created a lock
    function isUserLocked(address _userAddr) public view returns (bool) {
        LockVe memory usersLock = locks[_userAddr];
        return usersLock.initialized;
    }

    /// @notice View a users Lock
    /// @param _userAddr Address of any user to view all Locks they have ever created
    /// @dev This may be used by the web application for graphical illustration purposes
    /// @return Users Lock in the format of the LockVe struct
    function getLock(address _userAddr) public view returns (LockVe memory) {
        return locks[_userAddr];
    }

    /// @notice Allow owner to reclaim tokens not matching the deposit token
    /// @notice Some users may have accidentally sent these to the contract
    /// @param _token Address of the non-deposit token
    /// @dev Always ensure the _token is legitimate before calling this
    /// @dev A bad token can mimic safetransfer or balanceof with a nocive function
    function ownerRemoveNonDepositToken(address _token) public nonReentrant onlyOwner {
        require(_token != stakedToken, "!invalid");
        uint256 balanceOfToken = IERC20(_token).balanceOf(address(this));
        require(balanceOfToken > 0, "!balance");
        IERC20(_token).safeTransfer(owner(), balanceOfToken);
    }

    /// @notice Transfers vested tokens back to their original owner
    /// @notice It is up to the user to invoke this manually
    /// @dev This will need to be called by the web application via a button or some other means
    function claimMyFunds() external nonReentrant {
        address userAddr = msg.sender;
        uint256 totalFundsDeposited = lockedFunds[userAddr] + deferredFunds[userAddr];
        uint256 currentBalance = getBalance(userAddr);
        uint256 fundsToClaim = totalFundsDeposited - currentBalance;

        IERC20(stakedToken).safeTransfer(userAddr, fundsToClaim);

        lockedFunds[userAddr] = currentBalance;
        deferredFunds[userAddr] = 0;

        emit userClaimed(userAddr, fundsToClaim);
    }

    /// @notice Create/extend the duration of the invoking users lock and/or deposit additional tokens into it
    /// @param _duration Number of seconds the invoking user will extend their lock for
    /// @param _amount Number of additional tokens to deposit into the lock
    /// @param _deferUnclaimed If True, leaves any unclaimed vested balance in the staking contract
    function stake(uint256 _duration, uint256 _amount, bool _deferUnclaimed) public nonReentrant {
        require(_duration > 0 || _amount > 0, "null");

        // Retrieve lock the user may have already created
        address userAddr = msg.sender;
        LockVe memory usersLock = locks[userAddr];

        uint256 oldDurationRemaining = 0;

        // Keep track of new user or pre-existing lockout period
        if (!usersLock.initialized) {
            users.push(userAddr);
        } else if (block.timestamp < usersLock.endBlockTime) {
            oldDurationRemaining = usersLock.endBlockTime - block.timestamp;
        }

        require (oldDurationRemaining + _duration <= 104 weeks, ">2 years");

        // Receive the users tokens
        require(IERC20(stakedToken).balanceOf(userAddr) >= _amount, "!balance");
        require(IERC20(stakedToken).allowance(userAddr, address(this)) >= _amount, "!approved");
        IERC20(stakedToken).safeTransferFrom(userAddr,  address(this), _amount);

        // Account for balance / unclaimed funds
        uint256 totalFundsDeposited = lockedFunds[userAddr];
        uint256 oldBalance = getBalance(userAddr);
        uint256 fundsUnclaimed = totalFundsDeposited - oldBalance;
        if (!_deferUnclaimed) {
            fundsUnclaimed += deferredFunds[userAddr];
            IERC20(stakedToken).safeTransfer(userAddr, fundsUnclaimed);
            deferredFunds[userAddr] = 0;
            emit userClaimed(userAddr, fundsUnclaimed);
        } else {
            deferredFunds[userAddr] += fundsUnclaimed;
        }
        uint256 newTotalDeposit = oldBalance + _amount;

        // Update balance
        lockedFunds[userAddr] = newTotalDeposit;

        // Fill out updated LockVe struct
        LockVe memory newLock;
        newLock.startBlockTime = block.timestamp;
        newLock.endBlockTime = newLock.startBlockTime + _duration + oldDurationRemaining;
        newLock.startingAmountLocked = newTotalDeposit;
        newLock.initialized = true;
        locks[userAddr] = newLock;

        // Events
        if (oldDurationRemaining == 0) {
            emit userStaked(userAddr, newTotalDeposit, newLock.endBlockTime - newLock.startBlockTime);
        } else {
            emit userExtended(userAddr, newTotalDeposit, newLock.endBlockTime - newLock.startBlockTime);
        }
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stakedToken","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"userClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"userExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"userStaked","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMyFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllUsers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getLock","outputs":[{"components":[{"internalType":"uint256","name":"startBlockTime","type":"uint256"},{"internalType":"uint256","name":"endBlockTime","type":"uint256"},{"internalType":"uint256","name":"startingAmountLocked","type":"uint256"},{"internalType":"bool","name":"initialized","type":"bool"}],"internalType":"struct VestingStake.LockVe","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"isUserLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"ownerRemoveNonDepositToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_deferUnclaimed","type":"bool"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670de0b6b3a76400006005553480156200001d57600080fd5b506040516200198e3803806200198e833981016040819052620000409162000363565b60016000556200005033620000ac565b6200005b81620000fe565b600280546001600160a01b0319166001600160a01b03861617905582516200008b906003906020860190620001d3565b508151620000a1906004906020850190620001d3565b505050505062000430565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001546001600160a01b031633146200015e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620001c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000155565b620001d081620000ac565b50565b828054620001e190620003f3565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b80516001600160a01b03811681146200029157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002be57600080fd5b81516001600160401b0380821115620002db57620002db62000296565b604051601f8301601f19908116603f0116810190828211818310171562000306576200030662000296565b816040528381526020925086838588010111156200032357600080fd5b600091505b8382101562000347578582018301518183018401529082019062000328565b83821115620003595760008385830101525b9695505050505050565b600080600080608085870312156200037a57600080fd5b620003858562000279565b60208601519094506001600160401b0380821115620003a357600080fd5b620003b188838901620002ac565b94506040870151915080821115620003c857600080fd5b50620003d787828801620002ac565b925050620003e86060860162000279565b905092959194509250565b600181811c908216806200040857607f821691505b602082108114156200042a57634e487b7160e01b600052602260045260246000fd5b50919050565b61154e80620004406000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063e2842d7911610066578063e2842d7914610295578063e313a113146102aa578063f2fde38b146102b2578063f8b2cb4f146102c557600080fd5b8063715018a61461024d5780638da5cb5b1461025557806395d89b411461027a578063cc7a262e1461028257600080fd5b8063561b2463116100d3578063561b2463146101cc5780635dd9147c146101df5780636b9db4e6146101f257806370a082311461023a57600080fd5b806306fdde0314610105578063204552b01461012357806330d00505146101385780633ab1ced1146101ab575b600080fd5b61010d6102d8565b60405161011a91906112a9565b60405180910390f35b6101366101313660046112dc565b610366565b005b61019b6101463660046112dc565b6001600160a01b031660009081526007602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161515606090910181905290565b604051901515815260200161011a565b6101be6101b93660046112dc565b6104f0565b60405190815260200161011a565b6101366101da366004611313565b610543565b6101be6101ed3660046112dc565b610ac5565b6102056102003660046112dc565b610bc1565b60405161011a919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b6101be6102483660046112dc565b610c41565b610136610c52565b6001546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b61010d610c88565b600254610262906001600160a01b031681565b61029d610c95565b60405161011a919061134c565b610136610cf7565b6101366102c03660046112dc565b610de0565b6101be6102d33660046112dc565b610e7b565b600380546102e590611399565b80601f016020809104026020016040519081016040528092919081815260200182805461031190611399565b801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b505050505081565b600260005414156103925760405162461bcd60e51b8152600401610389906113d4565b60405180910390fd5b60026000556001546001600160a01b031633146103c15760405162461bcd60e51b81526004016103899061140b565b6002546001600160a01b038281169116141561040a5760405162461bcd60e51b8152602060048201526008602482015267085a5b9d985b1a5960c21b6044820152606401610389565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561044c57600080fd5b505afa158015610460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104849190611440565b9050600081116104c15760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b6044820152606401610389565b6104e76104d66001546001600160a01b031690565b6001600160a01b0384169083610f40565b50506001600055565b6001600160a01b0381166000908152600960209081526040808320546008909252822054829161051f9161146f565b9050600061052c84610e7b565b9050600061053a8284611487565b95945050505050565b600260005414156105665760405162461bcd60e51b8152600401610389906113d4565b6002600055821515806105795750600082115b6105ae5760405162461bcd60e51b8152600401610389906020808252600490820152631b9d5b1b60e21b604082015260600190565b3360008181526007602090815260408083208151608081018352815481526001820154938101939093526002810154918301919091526003015460ff1615156060820181905290919061064b57600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b03851617905561066a565b816020015142101561066a574282602001516106679190611487565b90505b6303bfc400610679878361146f565b11156106b25760405162461bcd60e51b81526020600482015260086024820152673e3220796561727360c01b6044820152606401610389565b6002546040516370a0823160e01b81526001600160a01b038581166004830152879216906370a082319060240160206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190611440565b10156107685760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b6044820152606401610389565b600254604051636eb1769f60e11b81526001600160a01b0385811660048301523060248301528792169063dd62ed3e9060440160206040518083038186803b1580156107b357600080fd5b505afa1580156107c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107eb9190611440565b10156108255760405162461bcd60e51b815260206004820152600960248201526808585c1c1c9bdd995960ba1b6044820152606401610389565b60025461083d906001600160a01b0316843088610fa8565b6001600160a01b0383166000908152600860205260408120549061086085610e7b565b9050600061086e8284611487565b90508661090c576001600160a01b038616600090815260096020526040902054610898908261146f565b6002549091506108b2906001600160a01b03168783610f40565b6001600160a01b03861660008181526009602052604080822091909155517ffcbf8b246b3ac6aa7e8002686cf3d119427dd6d829425af7accd635930643edb906108ff9084815260200190565b60405180910390a261093a565b6001600160a01b0386166000908152600960205260408120805483929061093490849061146f565b90915550505b6000610946898461146f565b6001600160a01b038816600090815260086020908152604080832084905580516080810182529182018390528101829052606081019190915242808252919250908690610994908d9061146f565b61099e919061146f565b602082810191825260408084018581526001606086018181526001600160a01b038e1660009081526007909552929093208551815593519284019290925590516002830155516003909101805460ff191691151591909117905585610a5a57876001600160a01b03167f1835b101ea7447f2acc185724289ae4febae3bfcd360c35fe5e92f998d158e648383600001518460200151610a3d9190611487565b6040805192835260208301919091520160405180910390a2610ab3565b876001600160a01b03167f1283a4a0284d28123a496b22cd97a140ab9f481d8b8b2088e4d2b95fd6a2412e8383600001518460200151610a9a9190611487565b6040805192835260208301919091520160405180910390a25b50506001600055505050505050505050565b6001600160a01b038116600090815260076020908152604080832081516080810183528154815260018201549381018490526002820154928101929092526003015460ff16151560608201529042908390821015610bb95760006303bfc400846040015185600001518660200151610b3d9190611487565b610b47919061149e565b610b5191906114bd565b9050600084600001518560200151610b699190611487565b600554858760200151610b7c9190611487565b610b86919061149e565b610b9091906114bd565b600554909150610ba0828461149e565b610baa91906114bd565b610bb4908461146f565b925050505b949350505050565b610bee60405180608001604052806000815260200160008152602001600081526020016000151581525090565b506001600160a01b031660009081526007602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161515606082015290565b6000610c4c82610ac5565b92915050565b6001546001600160a01b03163314610c7c5760405162461bcd60e51b81526004016103899061140b565b610c866000610fe6565b565b600480546102e590611399565b60606006805480602002602001604051908101604052809291908181526020018280548015610ced57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ccf575b5050505050905090565b60026000541415610d1a5760405162461bcd60e51b8152600401610389906113d4565b6002600090815533808252600960209081526040808420546008909252832054919291610d47919061146f565b90506000610d5483610e7b565b90506000610d628284611487565b600254909150610d7c906001600160a01b03168583610f40565b6001600160a01b0384166000818152600860209081526040808320869055600982528083209290925590518381527ffcbf8b246b3ac6aa7e8002686cf3d119427dd6d829425af7accd635930643edb910160405180910390a2505060016000555050565b6001546001600160a01b03163314610e0a5760405162461bcd60e51b81526004016103899061140b565b6001600160a01b038116610e6f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610389565b610e7881610fe6565b50565b6001600160a01b038116600090815260076020908152604080832081516080810183528154815260018201549381018490526002820154928101929092526003015460ff16151560608201529042908390821015610bb95782516020840151600091610ee691611487565b600554848660200151610ef99190611487565b610f03919061149e565b610f0d91906114bd565b9050600554818560400151610f22919061149e565b610f2c91906114bd565b610f36908361146f565b9695505050505050565b6040516001600160a01b038316602482015260448101829052610fa390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611038565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610fe09085906323b872dd60e01b90608401610f6c565b50505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061108d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661110a9092919063ffffffff16565b805190915015610fa357808060200190518101906110ab91906114df565b610fa35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610389565b60606111198484600085611123565b90505b9392505050565b6060824710156111845760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610389565b6001600160a01b0385163b6111db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610389565b600080866001600160a01b031685876040516111f791906114fc565b60006040518083038185875af1925050503d8060008114611234576040519150601f19603f3d011682016040523d82523d6000602084013e611239565b606091505b5091509150610bb48282866060831561125357508161111c565b8251156112635782518084602001fd5b8160405162461bcd60e51b815260040161038991906112a9565b60005b83811015611298578181015183820152602001611280565b83811115610fe05750506000910152565b60208152600082518060208401526112c881604085016020870161127d565b601f01601f19169190910160400192915050565b6000602082840312156112ee57600080fd5b81356001600160a01b038116811461111c57600080fd5b8015158114610e7857600080fd5b60008060006060848603121561132857600080fd5b8335925060208401359150604084013561134181611305565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561138d5783516001600160a01b031683529284019291840191600101611368565b50909695505050505050565b600181811c908216806113ad57607f821691505b602082108114156113ce57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561145257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561148257611482611459565b500190565b60008282101561149957611499611459565b500390565b60008160001904831182151516156114b8576114b8611459565b500290565b6000826114da57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156114f157600080fd5b815161111c81611305565b6000825161150e81846020870161127d565b919091019291505056fea2646970667358221220eabb7f09d46693d1897982eff356d7d749ae09d424e68c9a093607d3e7351cba64736f6c6343000809003300000000000000000000000057b8a194230ef402584130b1ed31d2c4682d7a71000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000044a4b9e2a69d86ba382a511f845cbf2e31286770000000000000000000000000000000000000000000000000000000000000000673417869616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000673415849414c0000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

22145:11102:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22358:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29370:331;;;;;;:::i;:::-;;:::i;:::-;;28428:168;;;;;;:::i;:::-;-1:-1:-1;;;;;28533:16:0;28490:4;28533:16;;;:5;:16;;;;;;;;;28507:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28428:168;;;;1121:14:1;;1114:22;1096:41;;1084:2;1069:18;28428:168:0;956:187:1;25362:326:0;;;;;;:::i;:::-;;:::i;:::-;;;1294:25:1;;;1282:2;1267:18;25362:326:0;1148:177:1;30845:2399:0;;;;;;:::i;:::-;;:::i;27016:863::-;;;;;;:::i;:::-;;:::i;28879:114::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;2046:13:1;;2028:32;;2116:4;2104:17;;;2098:24;2076:20;;;2069:54;2179:4;2167:17;;;2161:24;2139:20;;;2132:54;2256:4;2244:17;;;2238:24;2231:32;2224:40;2202:20;;;2195:70;;;;2015:3;2000:19;;1835:436;26608:113:0;;;;;;:::i;:::-;;:::i;20867:103::-;;;:::i;20216:87::-;20289:6;;-1:-1:-1;;;;;20289:6:0;20216:87;;;-1:-1:-1;;;;;2440:32:1;;;2422:51;;2410:2;2395:18;20216:87:0;2276:203:1;22424:20:0;;;:::i;22281:26::-;;;;;-1:-1:-1;;;;;22281:26:0;;;28027:93;;;:::i;:::-;;;;;;;:::i;29939:519::-;;;:::i;21125:201::-;;;;;;:::i;:::-;;:::i;25922:577::-;;;;;;:::i;:::-;;:::i;22358:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29370:331::-;17304:1;17902:7;;:19;;17894:63;;;;-1:-1:-1;;;17894:63:0;;;;;;;:::i;:::-;;;;;;;;;17304:1;18035:7;:18;20289:6;;-1:-1:-1;;;;;20289:6:0;19016:10;20436:23:::1;20428:68;;;;-1:-1:-1::0;;;20428:68:0::1;;;;;;;:::i;:::-;29481:11:::2;::::0;-1:-1:-1;;;;;29471:21:0;;::::2;29481:11:::0;::::2;29471:21;;29463:42;;;::::0;-1:-1:-1;;;29463:42:0;;4455:2:1;29463:42:0::2;::::0;::::2;4437:21:1::0;4494:1;4474:18;;;4467:29;-1:-1:-1;;;4512:18:1;;;4505:38;4560:18;;29463:42:0::2;4253:331:1::0;29463:42:0::2;29541:39;::::0;-1:-1:-1;;;29541:39:0;;29574:4:::2;29541:39;::::0;::::2;2422:51:1::0;29516:22:0::2;::::0;-1:-1:-1;;;;;29541:24:0;::::2;::::0;::::2;::::0;2395:18:1;;29541:39:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29516:64;;29616:1;29599:14;:18;29591:39;;;::::0;-1:-1:-1;;;29591:39:0;;4980:2:1;29591:39:0::2;::::0;::::2;4962:21:1::0;5019:1;4999:18;;;4992:29;-1:-1:-1;;;5037:18:1;;;5030:38;5085:18;;29591:39:0::2;4778:331:1::0;29591:39:0::2;29641:52;29669:7;20289:6:::0;;-1:-1:-1;;;;;20289:6:0;;20216:87;29669:7:::2;-1:-1:-1::0;;;;;29641:27:0;::::2;::::0;29678:14;29641:27:::2;:52::i;:::-;-1:-1:-1::0;;17260:1:0;18214:7;:22;29370:331::o;25362:326::-;-1:-1:-1;;;;;25499:24:0;;25424:7;25499:24;;;:13;:24;;;;;;;;;25474:11;:22;;;;;;25424:7;;25474:49;;;:::i;:::-;25444:79;;25534:22;25559:21;25570:9;25559:10;:21::i;:::-;25534:46;-1:-1:-1;25591:20:0;25614:36;25534:46;25614:19;:36;:::i;:::-;25591:59;25362:326;-1:-1:-1;;;;;25362:326:0:o;30845:2399::-;17304:1;17902:7;;:19;;17894:63;;;;-1:-1:-1;;;17894:63:0;;;;;;;:::i;:::-;17304:1;18035:7;:18;30957:13;;;;:28:::1;;;30984:1;30974:7;:11;30957:28;30949:45;;;;-1:-1:-1::0;;;30949:45:0::1;;;;;;5711:2:1::0;5693:21;;;5750:1;5730:18;;;5723:29;-1:-1:-1;;;5783:2:1;5768:18;;5761:34;5827:2;5812:18;;5509:327;30949:45:0::1;31086:10;31067:16;31133:15:::0;;;:5:::1;:15;::::0;;;;;;;31107:41;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;;::::0;::::1;;;;::::0;;;;;;;;31067:16;31272:217:::1;;31315:5;:20:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;31315:20:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;31315:20:0::1;-1:-1:-1::0;;;;;31315:20:0;::::1;;::::0;;31272:217:::1;;;31375:9;:22;;;31357:15;:40;31353:136;;;31462:15;31437:9;:22;;;:40;;;;:::i;:::-;31414:63;;31353:136;31546:9;31510:32;31533:9:::0;31510:20;:32:::1;:::i;:::-;:45;;31501:67;;;::::0;-1:-1:-1;;;31501:67:0;;6043:2:1;31501:67:0::1;::::0;::::1;6025:21:1::0;6082:1;6062:18;;;6055:29;-1:-1:-1;;;6100:18:1;;;6093:38;6148:18;;31501:67:0::1;5841:331:1::0;31501:67:0::1;31633:11;::::0;31626:39:::1;::::0;-1:-1:-1;;;31626:39:0;;-1:-1:-1;;;;;2440:32:1;;;31626:39:0::1;::::0;::::1;2422:51:1::0;31669:7:0;;31633:11:::1;::::0;31626:29:::1;::::0;2395:18:1;;31626:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;31618:71;;;::::0;-1:-1:-1;;;31618:71:0;;4980:2:1;31618:71:0::1;::::0;::::1;4962:21:1::0;5019:1;4999:18;;;4992:29;-1:-1:-1;;;5037:18:1;;;5030:38;5085:18;;31618:71:0::1;4778:331:1::0;31618:71:0::1;31715:11;::::0;31708:54:::1;::::0;-1:-1:-1;;;31708:54:0;;-1:-1:-1;;;;;6407:15:1;;;31708:54:0::1;::::0;::::1;6389:34:1::0;31756:4:0::1;6439:18:1::0;;;6432:43;31766:7:0;;31715:11:::1;::::0;31708:29:::1;::::0;6324:18:1;;31708:54:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;31700:87;;;::::0;-1:-1:-1;;;31700:87:0;;6688:2:1;31700:87:0::1;::::0;::::1;6670:21:1::0;6727:1;6707:18;;;6700:29;-1:-1:-1;;;6745:18:1;;;6738:39;6794:18;;31700:87:0::1;6486:332:1::0;31700:87:0::1;31805:11;::::0;31798:71:::1;::::0;-1:-1:-1;;;;;31805:11:0::1;31835:8:::0;31854:4:::1;31861:7:::0;31798:36:::1;:71::i;:::-;-1:-1:-1::0;;;;;31962:21:0;::::1;31932:27;31962:21:::0;;;:11:::1;:21;::::0;;;;;;32015:20:::1;31974:8:::0;32015:10:::1;:20::i;:::-;31994:41:::0;-1:-1:-1;32046:22:0::1;32071:32;31994:41:::0;32071:19;:32:::1;:::i;:::-;32046:57;;32119:15;32114:336;;-1:-1:-1::0;;;;;32169:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;32151:41:::1;::::0;;::::1;:::i;:::-;32214:11;::::0;32151:41;;-1:-1:-1;32207:58:0::1;::::0;-1:-1:-1;;;;;32214:11:0::1;32240:8:::0;32151:41;32207:32:::1;:58::i;:::-;-1:-1:-1::0;;;;;32280:23:0;::::1;32306:1;32280:23:::0;;;:13:::1;:23;::::0;;;;;:27;;;;32327:37;::::1;::::0;::::1;::::0;32349:14;1294:25:1;;1282:2;1267:18;;1148:177;32327:37:0::1;;;;;;;;32114:336;;;-1:-1:-1::0;;;;;32397:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;:41;;32424:14;;32397:23;:41:::1;::::0;32424:14;;32397:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;32114:336:0::1;32460:23;32486:20;32499:7:::0;32486:10;:20:::1;:::i;:::-;-1:-1:-1::0;;;;;32546:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:39;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;32698:15:0::1;32673:40:::0;;;32546:39;;-1:-1:-1;;32784:20:0;;32747:34:::1;::::0;32772:9;;32747:34:::1;:::i;:::-;:57;;;;:::i;:::-;32724:20;::::0;;::::1;:80:::0;;;32815:28:::1;::::0;;::::1;:46:::0;;;32894:4:::1;32872:19;::::0;::::1;:26:::0;;;-1:-1:-1;;;;;32909:15:0;::::1;-1:-1:-1::0;32909:15:0;;;:5:::1;:15:::0;;;;;;;:25;;;;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;32909:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32970;32966:271:::1;;33028:8;-1:-1:-1::0;;;;;33017:84:0::1;;33038:15;33078:7;:22;;;33055:7;:20;;;:45;;;;:::i;:::-;33017:84;::::0;;6997:25:1;;;7053:2;7038:18;;7031:34;;;;6970:18;33017:84:0::1;;;;;;;32966:271;;;33152:8;-1:-1:-1::0;;;;;33139:86:0::1;;33162:15;33202:7;:22;;;33179:7;:20;;;:45;;;;:::i;:::-;33139:86;::::0;;6997:25:1;;;7053:2;7038:18;;7031:34;;;;6970:18;33139:86:0::1;;;;;;;32966:271;-1:-1:-1::0;;17260:1:0;18214:7;:22;-1:-1:-1;;;;;;;;;30845:2399:0:o;27016:863::-;-1:-1:-1;;;;;27120:16:0;;27074:7;27120:16;;;:5;:16;;;;;;;;27094:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27176:15;;27074:7;;27236:41;-1:-1:-1;27232:617:0;;;27452:29;27573:9;27539;:30;;;27511:9;:24;;;27486:9;:22;;;:49;;;;:::i;:::-;27485:84;;;;:::i;:::-;27484:98;;;;:::i;:::-;27452:130;;27597:21;27722:9;:24;;;27697:9;:22;;;:49;;;;:::i;:::-;27668:24;;27648:16;27623:9;:22;;;:41;;;;:::i;:::-;27622:70;;;;:::i;:::-;27621:126;;;;:::i;:::-;27813:24;;27597:150;;-1:-1:-1;27772:37:0;27597:150;27772:21;:37;:::i;:::-;27771:66;;;;:::i;:::-;27762:75;;;;:::i;:::-;;;27279:570;;27232:617;27866:5;27016:863;-1:-1:-1;;;;27016:863:0:o;28879:114::-;28936:13;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28936:13:0;-1:-1:-1;;;;;;28969:16:0;;;;;:5;:16;;;;;;;;;28962:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28879:114::o;26608:113::-;26668:7;26695:18;26704:8;26695;:18::i;:::-;26688:25;26608:113;-1:-1:-1;;26608:113:0:o;20867:103::-;20289:6;;-1:-1:-1;;;;;20289:6:0;19016:10;20436:23;20428:68;;;;-1:-1:-1;;;20428:68:0;;;;;;;:::i;:::-;20932:30:::1;20959:1;20932:18;:30::i;:::-;20867:103::o:0;22424:20::-;;;;;;;:::i;28027:93::-;28071:16;28107:5;28100:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28100:12:0;;;;;;;;;;;;;;;;;;;;;;;28027:93;:::o;29939:519::-;17304:1;17902:7;;:19;;17894:63;;;;-1:-1:-1;;;17894:63:0;;;;;;;:::i;:::-;17304:1;18035:7;:18;;;30015:10:::1;30090:23:::0;;;:13:::1;:23;::::0;;;;;;;;30066:11:::1;:21:::0;;;;;;30015:10;;18035:7;30066:47:::1;::::0;30090:23;30066:47:::1;:::i;:::-;30036:77;;30124:22;30149:20;30160:8;30149:10;:20::i;:::-;30124:45:::0;-1:-1:-1;30180:20:0::1;30203:36;30124:45:::0;30203:19;:36:::1;:::i;:::-;30259:11;::::0;30180:59;;-1:-1:-1;30252:56:0::1;::::0;-1:-1:-1;;;;;30259:11:0::1;30285:8:::0;30180:59;30252:32:::1;:56::i;:::-;-1:-1:-1::0;;;;;30321:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:38;;;30370:13:::1;:23:::0;;;;;:27;;;;30415:35;;1294:25:1;;;30415:35:0::1;::::0;1267:18:1;30415:35:0::1;;;;;;;-1:-1:-1::0;;17260:1:0;18214:7;:22;-1:-1:-1;;29939:519:0:o;21125:201::-;20289:6;;-1:-1:-1;;;;;20289:6:0;19016:10;20436:23;20428:68;;;;-1:-1:-1;;;20428:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21214:22:0;::::1;21206:73;;;::::0;-1:-1:-1;;;21206:73:0;;7673:2:1;21206:73:0::1;::::0;::::1;7655:21:1::0;7712:2;7692:18;;;7685:30;7751:34;7731:18;;;7724:62;-1:-1:-1;;;7802:18:1;;;7795:36;7848:19;;21206:73:0::1;7471:402:1::0;21206:73:0::1;21290:28;21309:8;21290:18;:28::i;:::-;21125:201:::0;:::o;25922:577::-;-1:-1:-1;;;;;26028:16:0;;25982:7;26028:16;;;:5;:16;;;;;;;;26002:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26084:15;;25982:7;;26146:41;-1:-1:-1;26142:325:0;;;26329:24;;26304:22;;;;26204:21;;26304:49;;;:::i;:::-;26275:24;;26255:16;26230:9;:22;;;:41;;;;:::i;:::-;26229:70;;;;:::i;:::-;26228:126;;;;:::i;:::-;26204:150;;26431:24;;26414:13;26381:9;:30;;;:46;;;;:::i;:::-;26380:75;;;;:::i;:::-;26369:86;;;;:::i;:::-;;26484:7;-1:-1:-1;;;;;;25922:577:0:o;12190:211::-;12334:58;;-1:-1:-1;;;;;8070:32:1;;12334:58:0;;;8052:51:1;8119:18;;;8112:34;;;12307:86:0;;12327:5;;-1:-1:-1;;;12357:23:0;8025:18:1;;12334:58:0;;;;-1:-1:-1;;12334:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12334:58:0;-1:-1:-1;;;;;;12334:58:0;;;;;;;;;;12307:19;:86::i;:::-;12190:211;;;:::o;12409:248::-;12580:68;;-1:-1:-1;;;;;8415:15:1;;;12580:68:0;;;8397:34:1;8467:15;;8447:18;;;8440:43;8499:18;;;8492:34;;;12553:96:0;;12573:5;;-1:-1:-1;;;12603:27:0;8332:18:1;;12580:68:0;8157:375:1;12553:96:0;12409:248;;;;:::o;21486:191::-;21579:6;;;-1:-1:-1;;;;;21596:17:0;;;-1:-1:-1;;;;;;21596:17:0;;;;;;;21629:40;;21579:6;;;21596:17;21579:6;;21629:40;;21560:16;;21629:40;21549:128;21486:191;:::o;14763:716::-;15187:23;15213:69;15241:4;15213:69;;;;;;;;;;;;;;;;;15221:5;-1:-1:-1;;;;;15213:27:0;;;:69;;;;;:::i;:::-;15297:17;;15187:95;;-1:-1:-1;15297:21:0;15293:179;;15394:10;15383:30;;;;;;;;;;;;:::i;:::-;15375:85;;;;-1:-1:-1;;;15375:85:0;;8989:2:1;15375:85:0;;;8971:21:1;9028:2;9008:18;;;9001:30;9067:34;9047:18;;;9040:62;-1:-1:-1;;;9118:18:1;;;9111:40;9168:19;;15375:85:0;8787:406:1;6964:229:0;7101:12;7133:52;7155:6;7163:4;7169:1;7172:12;7133:21;:52::i;:::-;7126:59;;6964:229;;;;;;:::o;8084:510::-;8254:12;8312:5;8287:21;:30;;8279:81;;;;-1:-1:-1;;;8279:81:0;;9400:2:1;8279:81:0;;;9382:21:1;9439:2;9419:18;;;9412:30;9478:34;9458:18;;;9451:62;-1:-1:-1;;;9529:18:1;;;9522:36;9575:19;;8279:81:0;9198:402:1;8279:81:0;-1:-1:-1;;;;;4514:19:0;;;8371:60;;;;-1:-1:-1;;;8371:60:0;;9807:2:1;8371:60:0;;;9789:21:1;9846:2;9826:18;;;9819:30;9885:31;9865:18;;;9858:59;9934:18;;8371:60:0;9605:353:1;8371:60:0;8445:12;8459:23;8486:6;-1:-1:-1;;;;;8486:11:0;8505:5;8512:4;8486:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8444:73;;;;8535:51;8552:7;8561:10;8573:12;10920;10949:7;10945:530;;;-1:-1:-1;10980:10:0;10973:17;;10945:530;11094:17;;:21;11090:374;;11292:10;11286:17;11353:15;11340:10;11336:2;11332:19;11325:44;11090:374;11435:12;11428:20;;-1:-1:-1;;;11428:20:0;;;;;;;;:::i;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:286::-;724:6;777:2;765:9;756:7;752:23;748:32;745:52;;;793:1;790;783:12;745:52;819:23;;-1:-1:-1;;;;;871:31:1;;861:42;;851:70;;917:1;914;907:12;1330:118;1416:5;1409:13;1402:21;1395:5;1392:32;1382:60;;1438:1;1435;1428:12;1453:377;1527:6;1535;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;1648:9;1635:23;1625:33;;1705:2;1694:9;1690:18;1677:32;1667:42;;1759:2;1748:9;1744:18;1731:32;1772:28;1794:5;1772:28;:::i;:::-;1819:5;1809:15;;;1453:377;;;;;:::o;2484:658::-;2655:2;2707:21;;;2777:13;;2680:18;;;2799:22;;;2626:4;;2655:2;2878:15;;;;2852:2;2837:18;;;2626:4;2921:195;2935:6;2932:1;2929:13;2921:195;;;3000:13;;-1:-1:-1;;;;;2996:39:1;2984:52;;3091:15;;;;3056:12;;;;3032:1;2950:9;2921:195;;;-1:-1:-1;3133:3:1;;2484:658;-1:-1:-1;;;;;;2484:658:1:o;3147:380::-;3226:1;3222:12;;;;3269;;;3290:61;;3344:4;3336:6;3332:17;3322:27;;3290:61;3397:2;3389:6;3386:14;3366:18;3363:38;3360:161;;;3443:10;3438:3;3434:20;3431:1;3424:31;3478:4;3475:1;3468:15;3506:4;3503:1;3496:15;3360:161;;3147:380;;;:::o;3532:355::-;3734:2;3716:21;;;3773:2;3753:18;;;3746:30;3812:33;3807:2;3792:18;;3785:61;3878:2;3863:18;;3532:355::o;3892:356::-;4094:2;4076:21;;;4113:18;;;4106:30;4172:34;4167:2;4152:18;;4145:62;4239:2;4224:18;;3892:356::o;4589:184::-;4659:6;4712:2;4700:9;4691:7;4687:23;4683:32;4680:52;;;4728:1;4725;4718:12;4680:52;-1:-1:-1;4751:16:1;;4589:184;-1:-1:-1;4589:184:1:o;5114:127::-;5175:10;5170:3;5166:20;5163:1;5156:31;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5246:128;5286:3;5317:1;5313:6;5310:1;5307:13;5304:39;;;5323:18;;:::i;:::-;-1:-1:-1;5359:9:1;;5246:128::o;5379:125::-;5419:4;5447:1;5444;5441:8;5438:34;;;5452:18;;:::i;:::-;-1:-1:-1;5489:9:1;;5379:125::o;7076:168::-;7116:7;7182:1;7178;7174:6;7170:14;7167:1;7164:21;7159:1;7152:9;7145:17;7141:45;7138:71;;;7189:18;;:::i;:::-;-1:-1:-1;7229:9:1;;7076:168::o;7249:217::-;7289:1;7315;7305:132;;7359:10;7354:3;7350:20;7347:1;7340:31;7394:4;7391:1;7384:15;7422:4;7419:1;7412:15;7305:132;-1:-1:-1;7451:9:1;;7249:217::o;8537:245::-;8604:6;8657:2;8645:9;8636:7;8632:23;8628:32;8625:52;;;8673:1;8670;8663:12;8625:52;8705:9;8699:16;8724:28;8746:5;8724:28;:::i;9963:274::-;10092:3;10130:6;10124:13;10146:53;10192:6;10187:3;10180:4;10172:6;10168:17;10146:53;:::i;:::-;10215:16;;;;;9963:274;-1:-1:-1;;9963:274:1:o

Swarm Source

ipfs://eabb7f09d46693d1897982eff356d7d749ae09d424e68c9a093607d3e7351cba
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading