Contract 0xd1B808474293BE15AAEc3b95F813d97d4C2AdFB9

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd86f7303f9256356f6b32a8371cfe68bf83989b6abb336eb95f79f518ab3985dHarvest302644212022-07-02 21:00:472 hrs 21 mins ago0x6a1527622384c4f9608734a7f899b46ae27cd1e9 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.016721192127 31.676783686
0x6e7a716772b15dd7745989108b3f9460efd46912b2755af04f6163a1694161a3Harvest302642442022-07-02 20:54:412 hrs 27 mins ago0xe2d48240481f3d85b7fca92be030239a4738fd89 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.011062419853 34.798536181
0x5ac27039b778a7cba98a50e908437f99b87e97f404cf81a6646778f058512ab3Harvest302642442022-07-02 20:54:412 hrs 27 mins ago0x6c9244d2f9febf230f7be9de2d185b330e431261 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.019770131786 36.674584861
0x8efd7077fc481ddec79559c8374d8298ab0d7af464261ca75537660515cf83cfHarvest302559792022-07-02 15:35:337 hrs 46 mins ago0x34695996ac8d05d4846a39e1406d6e0855510fe2 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.028564643174 89.854460613
0x1644acd7e46036bb095625cd42a06791ac9d6cc520dcc219e55073c93ee86ceaHarvest302559792022-07-02 15:35:337 hrs 46 mins ago0x6c9244d2f9febf230f7be9de2d185b330e431261 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.062786474769 117.080186939
0x8e50e4597b64f0bd9696bae70745a251a0ad399b616a300b215374aadf97d8ccHarvest302389902022-07-02 4:29:0118 hrs 52 mins ago0xfc63177a660ab4e06eb8144424e7345fe8165b3b IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.010596527372 33.333000016
0xd4a03cf7f460eb66e2b6646ff5c4658c82070dbafbb7f483e81e0ad227e36b8cHarvest302389902022-07-02 4:29:0118 hrs 52 mins ago0x0474e22fa791c86c91ca66bcafda7dd519b407e1 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.018143589086 33.833000018
0x5902d0bacdce4a0ceb199bc571612b1305d458d8dc38ce80317b3787bd104dbcHarvest302300392022-07-01 22:48:481 day 33 mins ago0xfc63177a660ab4e06eb8144424e7345fe8165b3b IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.010505046378 33.045232539
0x9382c232c1a212d6c52347738b89cf3cc4f64b83ca86b207bd580a3d843ea963Harvest302300392022-07-01 22:48:481 day 33 mins ago0x0474e22fa791c86c91ca66bcafda7dd519b407e1 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.01808319496 33.545232541
0xcd5ce25dc711d9aaec042e2c69c6e3aa768c8819967b2c1394895c5ac44f471cHarvest302192182022-07-01 16:10:401 day 7 hrs ago0x6f3df70adf31b32bf60e27c10fa86616f400d13c IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.009536970995 30.00000313
0x486e54335b32dc7173aa7d40dfa314dbe4ea5b98104927c79e14aee91abf830aHarvest302192182022-07-01 16:10:401 day 7 hrs ago0x0474e22fa791c86c91ca66bcafda7dd519b407e1 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.025463135202 47.482019663
0x3f19954ef1be94641b73b1800e3fb1de951582d64386a0ddac672e837b71428eHarvest302065572022-07-01 7:42:251 day 15 hrs ago0x21ba46f9e3935e565bfca9bdce884a12485bd138 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.015748680633 30.154346962
0x3e3beb591e131ed066f55e9f6c8c97ac73ea249affd062bc59f1e4df4c57af0cHarvest302065402022-07-01 7:41:511 day 15 hrs ago0x21ba46f9e3935e565bfca9bdce884a12485bd138 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.015985890706 30.12403345
0x65ab5195678576060eed5e340855d741e4eab9720dd98a454effba919d54cefaHarvest302061882022-07-01 7:27:341 day 15 hrs ago0x309c2a25e00303c764e5a81010f15a9981e9e04a IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.016218493501 30.069383856
0xe96a706257c2a36d9a1a5b873d1ca846c2407466c4e59c06124acfe00a3a1c26Harvest302061532022-07-01 7:26:241 day 15 hrs ago0xdfebfba0b08fc1999c484a54a6684dc10390275b IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.016542755204 30.67057099
0x8f7d5e6917046368d5955fa8c42c036f7411e0b489dcdf702c0acd859a656a1fHarvest302061272022-07-01 7:25:281 day 15 hrs ago0xfe308e3bdf238beaef757e380bbb3bce194a915e IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.016720581418 31.000264046
0x2e87e651ed60456863c719d16769e9aa42d91fe76dcabf0669084d31270d827cHarvest302061072022-07-01 7:24:481 day 15 hrs ago0xa2ad128d8556b1e3fbaa8f71b574ac6e64610b4e IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.016723706124 31.006057308
0x31858f4fe0e8622a54d2cd10bba2c1cc5932cae0881693023746ebbbf7116370Harvest302060742022-07-01 7:23:381 day 15 hrs ago0xa5ced73c61200023529e24e0e7a0f27c7d3d6bf2 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.016958687213 31.44171655
0x829d3a4ae6b570603723da515efa490c32425a35defe59b319f7db6307e491e4Harvest302060332022-07-01 7:22:161 day 15 hrs ago0x2b73d54f2c06d61fd2396542db689cdd4973cbb1 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.017984003427 33.000048494
0x19e2a7520a1f1c1a8c402b30449400f47f608321fbb67cbd7d5c30af42892583Harvest302059612022-07-01 7:18:001 day 16 hrs ago0x21ba46f9e3935e565bfca9bdce884a12485bd138 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.017067639004 31.000000009
0xd1aa0f781d6192602948fa951e65c5eebeafd4b7789ae96118ad40c16f120fc8Harvest302046582022-07-01 6:30:361 day 16 hrs ago0x2ee025fe053d4ad1a058ae6f0e001c7f7bf869a6 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.01707634269 32.01
0xba28ec6b0d497915f893ebf2e546511b5d111f54623a652505b3e7a9350a2998Harvest302014762022-07-01 4:32:441 day 18 hrs ago0x03828b7129d49313b2cdc966e50369b75ec79a48 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.024546777162 44.358786203
0xcc14145fa6bc56a388bfbe03556a7059a67f49626a1f46aed005bb293183b507Harvest301908732022-06-30 21:59:322 days 1 hr ago0x6a1527622384c4f9608734a7f899b46ae27cd1e9 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.017106570239 32.406847608
0x8227f25a288429546a46c1b023cf1c5d3af74ce096a91c9c7825ddb2eadbfd37Harvest301906042022-06-30 21:50:182 days 1 hr ago0x2dbfe54507f5dad4bb0ad2a9fbd87d60049edffb IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.017976151673 33.520773481
0xd726d71e0f4a494a96e79b6643764451300d8cc0c86e3e29c56c1b94f346f2c0Harvest301760262022-06-30 12:59:112 days 10 hrs ago0xad73468134c8231bcedf34eb725b5c48247156e3 IN  0xd1b808474293be15aaec3b95f813d97d4c2adfb90 MATIC0.035416350558 64.001327429
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XVMCgovernor

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-06-08
*/

// File: xvmc-contracts/libs/standard/Address.sol


pragma solidity >=0.6.12 <=0.8.0;

/**
 * @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: xvmc-contracts/libs/standard/IERC20.sol


// 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 Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: xvmc-contracts/libs/standard/SafeERC20.sol


// 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: xvmc-contracts/governor.sol



pragma solidity 0.8.0;




interface IacPool {
    function setCallFee(uint256 _callFee) external;
    function totalShares() external returns (uint256);
    function totalVotesFor(uint256 proposalID) external returns (uint256);
    function setAdmin(address _admin, address _treasury) external;
    function setTreasury(address _treasury) external;
	function addAndExtendStake(address _recipientAddr, uint256 _amount, uint256 _stakeID, uint256 _lockUpTokensInSeconds) external;
    function giftDeposit(uint256 _amount, address _toAddress, uint256 _minToServeInSecs) external;
    function harvest() external;
	function calculateHarvestXVMCRewards() external view returns (uint256);
}

interface IMasterChef {
    function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external;
    function updateEmissionRate(uint256 _gajPerBlock) external;
    function setFeeAddress(address _feeAddress) external;
    function dev(address _devaddr) external;
    function transferOwnership(address newOwner) external;
    function XVMCPerBlock() external returns (uint256);
    function totalAllocPoint() external returns (uint256);
    function updatePool(uint256 _pid) external;
    function owner() external returns (address);
	function setGovernorFee(uint256 _amount) external;
}

interface IXVMCtreasury {
    function requestWithdraw(address _token, address _receiver, uint _value) external;
}

interface IOldChef {
	function burnTokens(uint256 _amount) external;
}

interface IConsensus {
	function totalXVMCStaked() external view returns(uint256);
	function tokensCastedPerVote(uint256 _forID) external view returns(uint256);
	function isGovInvalidated(address _failedGov) external view returns(bool, bool);
}

interface IPolygonMultisig {
	function isOwner(address) external view returns(bool);
}

interface IRewardBoost {
	function updateDelayBetweenEvents(uint256 _delay) external;
	function updateGrandEventLength(uint256 _length) external;
}

    /**
     * XVMC governor is a decentralized masterchef governed by it's users
     * Works as a decentralized cryptocurrency with no third-party control
     * Effectively creating a DAO through time-deposits
     *
     * In order to earn staking rewards, users must lock up their tokens.
     * Certificates of deposit or time deposit are the biggest market in the world
     * The longer the lockup period, the higher the rewards(APY) and voting power 
     * The locked up stakers create the governance council, through which
     * the protocol can be upgraded in a decentralized manner.
     *
     * Users are utilized as oracles through on-chain voting regulating the entire system(events,
     * rewards, APYs, fees, bonuses,...)
     * The token voting is overpowered by the consensus mechanism(locked up stakers)
     *
     * It is a real DAO creating an actual decentralized finance ecosystem
     *
     * https://macncheese.finance/
    */

contract XVMCgovernor {
    using SafeERC20 for IERC20;
    
    uint256 public immutable goldenRatio = 1618; //1.618 is the golden ratio
	address public immutable oldToken = 0x6d0c966c8A09e354Df9C48b446A474CE3343D912;
    address public immutable token = 0x970ccEe657Dd831e9C37511Aa3eb5302C1Eb5EEe; //XVMC token
    
    //masterchef address
    address public immutable masterchef = 0x6ff40a8a1fe16075bD6008A48befB768BE08b4b0;
    address public immutable oldChefOwner = 0x27771BB243c37B35091b0A1e8b69C816249c2E71;
	
	//https://docs.polygon.technology/docs/faq/commit-chain-multisigs/
	address public immutable polygonMultisig = 0x355b8E02e7F5301E6fac9b7cAc1D6D9c86C0343f; 
	
    address public immutable consensusContract = 0xDDd4982e3E9e5C5C489321D2143b8a027f535112;
    address public immutable farmContract = 0xdf47e7a036A6a85F92898176b5A8B4B4b9fBF25A;
    address public immutable fibonacceningContract = 0xff5a8072565726A055690bd14924022DE020623A; //reward boost contract
    address public immutable basicContract = 0xEBD2e542F593d8E03543661BCc70ad2474e6DBad;
	
	address public immutable nftStakingContract = 0xD7bf9953d090D6Eb5fC8f6707e88Ea057beD08cB;
	address public immutable nftAllocationContract = 0x765A3045902B164dA1a7619BEc58DE64cf7Bdfe2;
    
    //Addresses for treasuryWallet and NFT wallet
    address public treasuryWallet = 0xC44D3FB20a7fA7eff7437c1C39d34A68A2046BA7;
    address public nftWallet = 0xcCb906C2233A39aA14f60d2F836EB24492D83713;
    
    //addresses for time-locked deposits(autocompounding pools)
    address public immutable acPool1 = 0xfFB71361dD8Fc3ef0831871Ec8dd51B413ed093C;
    address public immutable acPool2 = 0x9a9AEF66624C3fa77DaACcA9B51DE307FA09bd50;
    address public immutable acPool3 = 0x1F8a5D98f1e2F10e93331D27CF22eD7985EF6a12;
    address public immutable acPool4 = 0x30019481FC501aFa449781ac671103Feb0d6363C;
    address public immutable acPool5 = 0x8c96105ea574727e94d9C199c632128f1cA584cF;
    address public immutable acPool6 = 0x605c5AA14BdBf0d50a99836e7909C631cf3C8d46;
        
    //pool ID in the masterchef for respective Pool address and dummy token
    uint256 public immutable acPool1ID = 2;
    uint256 public immutable acPool2ID = 3;
    uint256 public immutable acPool3ID = 4;
    uint256 public immutable acPool4ID = 5;
    uint256 public immutable acPool5ID = 6;
    uint256 public immutable acPool6ID = 7;
	
	uint256 public immutable nftStakingPoolID = 10;
    
    mapping(address => uint256) private _rollBonus;
	
	mapping(address => address[]) public signaturesConfirmed; //for multi-sig
	mapping(address => mapping(address => bool)) public alreadySigned; //alreadySigned[owner][newGovernor]
	
	uint256 public newGovernorBlockDelay = 189000; //in blocks (roughly 5 days at beginning)
    
    uint256 public costToVote = 500000 * 1e18;  // 500K coins. All proposals are valid unless rejected. This is a minimum to prevent spam
    uint256 public delayBeforeEnforce = 3 days; //minimum number of TIME between when proposal is initiated and executed

    uint256 public maximumVoteTokens; // maximum tokens that can be voted with to prevent tyrany
    
    //fibonaccening event can be scheduled once minimum threshold of tokens have been collected
    uint256 public thresholdFibonaccening = 10000000000 * 1e18; //10B coins
    
    //delays for Fibonnaccening Events
    uint256 public immutable minDelay = 1 days; // has to be called minimum 1 day in advance
    uint256 public immutable maxDelay = 31 days; //1month.. is that good? i think yes
    
    uint256 public lastRegularReward = 33333000000000000000000; //remembers the last reward used(outside of boost)
    bool public eventFibonacceningActive = true; // prevent some functions if event is active ..threshold and durations for fibonaccening
	//NOT: IS set to active at launch as the reward boost is already active!
    
    uint256 public blocksPerSecond = 434783; // divide by a million
    uint256 public durationForCalculation= 12 hours; //period used to calculate block time
    uint256  public lastBlockHeight; //block number when counting is activated
    uint256 public recordTimeStart; //timestamp when counting is activated
    bool public countingBlocks;

	bool public isInflationStatic; // if static, inflation stays perpetually at 1.618% annually. If dynamic, it reduces by 1.618% on each reward boost
    uint256  public totalFibonacciEventsAfterGrand; //used for rebalancing inflation after Grand Fib
    
    uint256 public newGovernorRequestBlock;
    address public eligibleNewGovernor; //used for changing smart contract
    bool public changeGovernorActivated;

	bool public fibonacciDelayed; //used to delay fibonaccening events through vote
	
	uint256 public lastHarvestedTime;

	bool public setFarmRewards;

    event SetInflation(uint256 rewardPerBlock);
    event TransferOwner(address newOwner, uint256 timestamp);
    event EnforceGovernor(address _newGovernor, address indexed enforcer);
    event GiveRolloverBonus(address recipient, uint256 amount, address poolInto);
	event Harvest(address indexed sender, uint256 callFee);
	event Multisig(address signer, address newGovernor, bool sign, uint256 idToVoteFor);
    
    constructor(
		address _acPool1,
		address _acPool2,
		address _acPool3,
		address _acPool4,
		address _acPool5,
		address _acPool6) {
			_rollBonus[_acPool1] = 75;
			_rollBonus[_acPool2] = 100;
			_rollBonus[_acPool3] = 150;
			_rollBonus[_acPool4] = 250;
			_rollBonus[_acPool5] = 350;
			_rollBonus[_acPool6] = 500;
    }    

    
    /**
     * Updates circulating supply and maximum vote token variables
     */
    function updateMaximumVotetokens() external {
        maximumVoteTokens = getTotalSupply() / 10000;
    }
    

    /**
     * Calculates average block time
     * No decimals so we keep track of "100blocks" per second
	 * It will be used in the future to keep inflation static, while block production can be dynamic
	 * (bitcoin adjusts to 1 block per 10minutes, XVMC inflation is dependant on the production of blocks on Polygon which can vary)
     */
    function startCountingBlocks() external {
        require(!countingBlocks, "already counting blocks");
        countingBlocks = true;
        lastBlockHeight = block.number;
        recordTimeStart = block.timestamp;
    } 
    function calculateAverageBlockTime() external {
        require(countingBlocks && (recordTimeStart + durationForCalculation) <= block.timestamp);
        blocksPerSecond = 1000000 * (block.number - lastBlockHeight) / (block.timestamp - recordTimeStart);
        countingBlocks = false;
    }
    
    function getRollBonus(address _bonusForPool) external view returns (uint256) {
        return _rollBonus[_bonusForPool];
    }
    
    /**
     * Return total(circulating) supply.
     * Total supply = total supply of XVMC token(new) + (total supply of oldToken - supply of old token inside contract of new token) * 1000
	 * New XVMC token = 1000 * old token (can be swapped inside the token contract, contract holds old tokens)
	 * Old XVMC tokens held inside the contract of token are basically tokens that have been swapped to new token at a ratio of (1:1000)
    */
    function getTotalSupply() public view returns(uint256) {
        return (IERC20(token).totalSupply() +
					1000 * (IERC20(oldToken).totalSupply() - IERC20(oldToken).balanceOf(token)));
    }
    
    /**
     * Mass equivalent to massUpdatePools in masterchef, but only for relevant pools
    */
    function updateAllPools() external {
        IMasterChef(masterchef).updatePool(0); // XVMC-USDC and XVMC-wmatic
    	IMasterChef(masterchef).updatePool(1); 
    	IMasterChef(masterchef).updatePool(8); //meme pool 8,9
    	IMasterChef(masterchef).updatePool(9);
		IMasterChef(masterchef).updatePool(10); // NFT staking
        IMasterChef(masterchef).updatePool(acPool1ID);
    	IMasterChef(masterchef).updatePool(acPool2ID); 
    	IMasterChef(masterchef).updatePool(acPool3ID); 
    	IMasterChef(masterchef).updatePool(acPool4ID); 
    	IMasterChef(masterchef).updatePool(acPool5ID); 
    	IMasterChef(masterchef).updatePool(acPool6ID); 
    }
    
     /**
     * Rebalances farms in masterchef
     */
    function rebalanceFarms() external {
    	IMasterChef(masterchef).updatePool(0);
    	IMasterChef(masterchef).updatePool(1); 
    }
   
     /**
     * Rebalances Pools and allocates rewards in masterchef
     * Pools with higher time-lock must always pay higher rewards in relative terms
     * Eg. for 1XVMC staked in the pool 6, you should always be receiving
     * 50% more rewards compared to staking in pool 4
     * 
     * QUESTION: should we create a modifier to prevent rebalancing during inflation events?
     * Longer pools compound on their interests and earn much faster?
     * On the other hand it could also be an incentive to hop to pools with longer lockup
	 * Could also make it changeable through voting
     */
    function rebalancePools() public {
	    uint256 balancePool1 = IERC20(token).balanceOf(acPool1);
    	uint256 balancePool2 = IERC20(token).balanceOf(acPool2);
    	uint256 balancePool3 = IERC20(token).balanceOf(acPool3);
    	uint256 balancePool4 = IERC20(token).balanceOf(acPool4);
    	uint256 balancePool5 = IERC20(token).balanceOf(acPool5);
    	uint256 balancePool6 = IERC20(token).balanceOf(acPool6);
		
    	IMasterChef(masterchef).set(acPool1ID, (balancePool1 * 2 / 1e26), 0, false);
    	IMasterChef(masterchef).set(acPool2ID, (balancePool2 * 3 / 1e26), 0, false);
    	IMasterChef(masterchef).set(acPool3ID, (balancePool3 * 5 / 1e26), 0, false);
    	IMasterChef(masterchef).set(acPool4ID, (balancePool4 * 10 / 1e26), 0, false);
    	IMasterChef(masterchef).set(acPool5ID, (balancePool5 * 13 / 1e26), 0, false);
    	IMasterChef(masterchef).set(acPool6ID, (balancePool6 * 15 / 1e26), 0, false); 
    	
    	//equivalent to massUpdatePools() in masterchef, but we loop just through relevant pools
    	IMasterChef(masterchef).updatePool(acPool1ID);
    	IMasterChef(masterchef).updatePool(acPool2ID); 
    	IMasterChef(masterchef).updatePool(acPool3ID); 
    	IMasterChef(masterchef).updatePool(acPool4ID); 
    	IMasterChef(masterchef).updatePool(acPool5ID); 
    	IMasterChef(masterchef).updatePool(acPool6ID); 
    }
	
	function harvestAll() public {
		IacPool(acPool1).harvest();
		IacPool(acPool2).harvest();
		IacPool(acPool3).harvest();
		IacPool(acPool4).harvest();
		IacPool(acPool5).harvest();
		IacPool(acPool6).harvest();
	}

    /**
     * Harvests from all pools and rebalances rewards
     */
    function harvest() external {
        require(msg.sender == tx.origin, "no proxy/contracts");

        uint256 totalFee = pendingHarvestRewards();

		harvestAll();
        rebalancePools();
		
		lastHarvestedTime = block.timestamp;
	
		IERC20(token).safeTransfer(msg.sender, totalFee);

		emit Harvest(msg.sender, totalFee);
    }
	
	// Shifting the decimal on pool rebalancing and have to increase farm rewards as well
	function initiatePools() external {
		require(!setFarmRewards, "already set");
		IMasterChef(masterchef).set(0, 4000, 0, false); 
		IMasterChef(masterchef).set(1, 2000, 0, false); 
		setFarmRewards = true;
	}

	function pendingHarvestRewards() public view returns (uint256) {
		uint256 totalRewards = IacPool(acPool1).calculateHarvestXVMCRewards() + IacPool(acPool2).calculateHarvestXVMCRewards() + IacPool(acPool3).calculateHarvestXVMCRewards() +
        					IacPool(acPool4).calculateHarvestXVMCRewards() + IacPool(acPool5).calculateHarvestXVMCRewards() + IacPool(acPool6).calculateHarvestXVMCRewards();
		return totalRewards;
	}
    
    /**
     * Mechanism, where the governor gives the bonus 
     * to user for extending(re-commiting) their stake
     * tldr; sends the gift deposit, which resets the timer
     * the pool is responsible for calculating the bonus
     */
    function stakeRolloverBonus(address _toAddress, address _depositToPool, uint256 _bonusToPay, uint256 _stakeID) external {
        require(
            msg.sender == acPool1 || msg.sender == acPool2 || msg.sender == acPool3 ||
            msg.sender == acPool4 || msg.sender == acPool5 || msg.sender == acPool6);
        
        IacPool(_depositToPool).addAndExtendStake(_toAddress, _bonusToPay, _stakeID, 0);
        
        emit GiveRolloverBonus(_toAddress, _bonusToPay, _depositToPool);
    }

    /**
     * Sets inflation in Masterchef
     */
    function setInflation(uint256 rewardPerBlock) external {
        require(msg.sender == fibonacceningContract);
    	IMasterChef(masterchef).updateEmissionRate(rewardPerBlock);

        emit SetInflation(rewardPerBlock);
    }
	
	function rememberReward() external {
		require(msg.sender == fibonacceningContract);
		lastRegularReward = IMasterChef(masterchef).XVMCPerBlock();
	}
    
    
    function enforceGovernor() external {
        require(msg.sender == consensusContract);
		require(newGovernorRequestBlock + newGovernorBlockDelay < block.number, "time delay not yet passed");

		IMasterChef(masterchef).setFeeAddress(eligibleNewGovernor);
        IMasterChef(masterchef).dev(eligibleNewGovernor);
        IMasterChef(masterchef).transferOwnership(eligibleNewGovernor); //transfer masterchef ownership
		
		IERC20(token).safeTransfer(eligibleNewGovernor, IERC20(token).balanceOf(address(this))); // send collected XVMC tokens to new governor
        
		emit EnforceGovernor(eligibleNewGovernor, msg.sender);
    }
	
    function setNewGovernor(address beneficiary) external {
        require(msg.sender == consensusContract);
        newGovernorRequestBlock = block.number;
        eligibleNewGovernor = beneficiary;
        changeGovernorActivated = true;
    }
	
	function governorRejected() external {
		require(changeGovernorActivated, "not active");
		
		(bool _govInvalidated, ) = IConsensus(consensusContract).isGovInvalidated(eligibleNewGovernor);
		if(_govInvalidated) {
			changeGovernorActivated = false;
		}
	}

	function treasuryRequest(address _tokenAddr, address _recipient, uint256 _amountToSend) external {
		require(msg.sender == consensusContract);
		IXVMCtreasury(treasuryWallet).requestWithdraw(
			_tokenAddr, _recipient, _amountToSend
		);
	}
	
	function updateDurationForCalculation(uint256 _newDuration) external {
	    require(msg.sender == basicContract);
	    durationForCalculation = _newDuration;
	}
	
	function delayFibonacci(bool _arg) external {
	    require(msg.sender == consensusContract);
	    fibonacciDelayed = _arg;
	}
	
	function setActivateFibonaccening(bool _arg) external {
		require(msg.sender == fibonacceningContract);
		eventFibonacceningActive = _arg;
	}

	function setPool(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external {
	    require(msg.sender == farmContract);
	    IMasterChef(masterchef).set(_pid, _allocPoint, _depositFeeBP, _withUpdate);
	}
	
	function setThresholdFibonaccening(uint256 newThreshold) external {
	    require(msg.sender == basicContract);
	    thresholdFibonaccening = newThreshold;
	}
	
	function updateDelayBeforeEnforce(uint256 newDelay) external {
	    require(msg.sender == basicContract);
	    delayBeforeEnforce = newDelay;
	}
	
	function setCallFee(address _acPool, uint256 _newCallFee) external {
	    require(msg.sender == basicContract);
	    IacPool(_acPool).setCallFee(_newCallFee);
	}
	
	function updateCostToVote(uint256 newCostToVote) external {
	    require(msg.sender == basicContract);
	    costToVote = newCostToVote;
	}
	
	function updateRolloverBonus(address _forPool, uint256 _bonus) external {
	    require(msg.sender == basicContract);
		require(_bonus <= 1500, "15% hard limit");
	    _rollBonus[_forPool] = _bonus;
	}
	
	function burnFromOldChef(uint256 _amount) external {
		require(msg.sender == farmContract || msg.sender == fibonacceningContract);
		IOldChef(oldChefOwner).burnTokens(_amount);
	}
	
	function setGovernorTax(uint256 _amount) external {
		require(msg.sender == farmContract);
		IMasterChef(masterchef).setGovernorFee(_amount);
	}
	
	function postGrandFibIncreaseCount() external {
		require(msg.sender == fibonacceningContract);
		totalFibonacciEventsAfterGrand++;
	}
	
	function updateDelayBetweenEvents(uint256 _amount) external {
	    require(msg.sender == basicContract);
		IRewardBoost(fibonacceningContract).updateDelayBetweenEvents(_amount);
	}
	function updateGrandEventLength(uint256 _amount) external {
	    require(msg.sender == basicContract);
		IRewardBoost(fibonacceningContract).updateGrandEventLength(_amount);
	}
	    
	
    /**
     * Transfers collected fees into treasury wallet(but not XVMC...for now)
     */
    function transferCollectedFees(address _tokenContract) external {
        require(msg.sender == tx.origin);
		require(_tokenContract != token, "not XVMC!");
		
        uint256 amount = IERC20(_tokenContract).balanceOf(address(this));
        
        IERC20(_tokenContract).safeTransfer(treasuryWallet, amount);
    }
	
	
	/*
	 * newGovernorBlockDelay is the delay during which the governor proposal can be voted against
	 * As the time passes, changes should take longer to enforce(greater security)
	 * Prioritize speed and efficiency at launch. Prioritize security once established
	 * Delay increases by 2500 blocks(roughly 1.6hours) per each day after launch
	 * Delay starts at 189000 blocks(roughly 5 days)
	 * After a month, delay will be roughly 7 days (increases 2days/month)
	 * After a year, 29 days. After 2 years, 53 days,...
	 * Can be ofcourse changed by replacing governor contract
	 */
	function updateGovernorChangeDelay() external {
		newGovernorBlockDelay = 189000 + (((block.timestamp - 1654528957) / 86400) * 2500);
	}

    
    /**
     * The weak point, Polygon-ETH bridge is secured by a 5/8 multisig.
	 * Can change governing contract thru a multisig(without consensus) and 42% of weighted votes voting in favor
	 * https://docs.polygon.technology/docs/faq/commit-chain-multisigs/
     */
    function multiSigGovernorChange(address _newGovernor) external {
		uint _signatureCount = 0;
		uint _ownersLength = signaturesConfirmed[_newGovernor].length;
		require(_ownersLength >= 5, "minimum 5 signatures required");
		for(uint i=0; i< _ownersLength; i++) {//owners can change, must check if still active
			if(IPolygonMultisig(polygonMultisig).isOwner(signaturesConfirmed[_newGovernor][i])) {
				_signatureCount++;
			}
		}
        require(_signatureCount >= 5, "Minimum 5/8 signatures required");
		
		uint256 _totalStaked = IConsensus(consensusContract).totalXVMCStaked();
		uint256 _totalVotedInFavor = IConsensus(consensusContract).tokensCastedPerVote(uint256(uint160(_newGovernor)));
		
		require(_totalVotedInFavor >= (_totalStaked * 42 / 100), "Minimum 42% weighted vote required");
        
        IMasterChef(masterchef).setFeeAddress(_newGovernor);
        IMasterChef(masterchef).dev(_newGovernor);
        IMasterChef(masterchef).transferOwnership(_newGovernor);
		IERC20(token).safeTransfer(_newGovernor, IERC20(token).balanceOf(address(this)));
    }

	function signMultisig(address _newGovernor) external {
		bool _isOwner = IPolygonMultisig(polygonMultisig).isOwner(msg.sender);
		require(_isOwner, "Signer is not multisig owner");
		
		require(!alreadySigned[msg.sender][_newGovernor], "already signed");
		alreadySigned[msg.sender][_newGovernor] = true;
		signaturesConfirmed[_newGovernor].push(msg.sender); //adds vote
		
		emit Multisig(msg.sender, _newGovernor, true, uint256(uint160(_newGovernor)));
	}
	
	function unSignMultisig(address _newGovernor) external {
		require(alreadySigned[msg.sender][_newGovernor], "not signed");
		uint256 _lastIndex = signaturesConfirmed[_newGovernor].length - 1;
		uint256 _index;
		while(signaturesConfirmed[_newGovernor][_index] != msg.sender) {
			_index++;
		}
		alreadySigned[msg.sender][_newGovernor] = false;
		if(_index != _lastIndex) {
			signaturesConfirmed[_newGovernor][_index] = signaturesConfirmed[_newGovernor][_lastIndex];
		} 
		signaturesConfirmed[_newGovernor].pop();
		
		emit Multisig(msg.sender, _newGovernor, false, uint256(uint160(_newGovernor)));
	}
	
	function addressToUint256(address _address) external pure returns(uint256) {
		return(uint256(uint160(_address)));
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_acPool1","type":"address"},{"internalType":"address","name":"_acPool2","type":"address"},{"internalType":"address","name":"_acPool3","type":"address"},{"internalType":"address","name":"_acPool4","type":"address"},{"internalType":"address","name":"_acPool5","type":"address"},{"internalType":"address","name":"_acPool6","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"EnforceGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"poolInto","type":"address"}],"name":"GiveRolloverBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"callFee","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"address","name":"newGovernor","type":"address"},{"indexed":false,"internalType":"bool","name":"sign","type":"bool"},{"indexed":false,"internalType":"uint256","name":"idToVoteFor","type":"uint256"}],"name":"Multisig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"SetInflation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TransferOwner","type":"event"},{"inputs":[],"name":"acPool1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool1ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool5ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool6","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool6ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addressToUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"alreadySigned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basicContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFromOldChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculateAverageBlockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeGovernorActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"consensusContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countingBlocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBeforeEnforce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_arg","type":"bool"}],"name":"delayFibonacci","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"durationForCalculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eligibleNewGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enforceGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eventFibonacceningActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacceningContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacciDelayed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusForPool","type":"address"}],"name":"getRollBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldenRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governorRejected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initiatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInflationStatic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastHarvestedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRegularReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumVoteTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"multiSigGovernorChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newGovernorBlockDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newGovernorRequestBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAllocationContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStakingPoolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldChefOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingHarvestRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"polygonMultisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postGrandFibIncreaseCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalanceFarms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalancePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recordTimeStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rememberReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_arg","type":"bool"}],"name":"setActivateFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_acPool","type":"address"},{"internalType":"uint256","name":"_newCallFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFarmRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"setInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"setNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setThresholdFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"signMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"signaturesConfirmed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"address","name":"_depositToPool","type":"address"},{"internalType":"uint256","name":"_bonusToPay","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startCountingBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thresholdFibonaccening","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFibonacciEventsAfterGrand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"transferCollectedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amountToSend","type":"uint256"}],"name":"treasuryRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"unSignMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCostToVote","type":"uint256"}],"name":"updateCostToVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelayBeforeEnforce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateDelayBetweenEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDuration","type":"uint256"}],"name":"updateDurationForCalculation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateGovernorChangeDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateGrandEventLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateMaximumVotetokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_forPool","type":"address"},{"internalType":"uint256","name":"_bonus","type":"uint256"}],"name":"updateRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6103e06040526106526080527f6d0c966c8a09e354df9c48b446a474ce3343d91200000000000000000000000060a0527f970ccee657dd831e9c37511aa3eb5302c1eb5eee00000000000000000000000060c0527f6ff40a8a1fe16075bd6008a48befb768be08b4b000000000000000000000000060e0527f27771bb243c37b35091b0a1e8b69c816249c2e71000000000000000000000000610100527f355b8e02e7f5301e6fac9b7cac1d6d9c86c0343f000000000000000000000000610120527fddd4982e3e9e5c5c489321d2143b8a027f535112000000000000000000000000610140527fdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a000000000000000000000000610160527fff5a8072565726a055690bd14924022de020623a000000000000000000000000610180527febd2e542f593d8e03543661bcc70ad2474e6dbad0000000000000000000000006101a0527fd7bf9953d090d6eb5fc8f6707e88ea057bed08cb0000000000000000000000006101c0527f765a3045902b164da1a7619bec58de64cf7bdfe20000000000000000000000006101e052600080546001600160a01b031990811673c44d3fb20a7fa7eff7437c1c39d34a68a2046ba7179091556001805490911673ccb906c2233a39aa14f60d2f836eb24492d837131781557fffb71361dd8fc3ef0831871ec8dd51b413ed093c000000000000000000000000610200527f9a9aef66624c3fa77daacca9b51de307fa09bd50000000000000000000000000610220527f1f8a5d98f1e2f10e93331d27cf22ed7985ef6a12000000000000000000000000610240527f30019481fc501afa449781ac671103feb0d6363c000000000000000000000000610260527f8c96105ea574727e94d9c199c632128f1ca584cf000000000000000000000000610280527f605c5aa14bdbf0d50a99836e7909c631cf3c8d460000000000000000000000006102a05260026102c05260036102e052600461030052600561032081905260066103408190526007610360819052600a6103808190526202e2489093556969e10de76676d08000009091556203f48090556b204fce5e3e25026110000000600955620151806103a0526228de806103c05269070efc4d0e326fb400009055600b805460ff191690911790556206a25f600c5561a8c0600d553480156200036657600080fd5b506040516200586b3803806200586b833981016040819052620003899162000406565b6001600160a01b03958616600090815260026020526040808220604b9055958716815285812060649055938616845284842060969055918516835283832060fa90558416825282822061015e9055909216825290206101f4905562000486565b80516001600160a01b03811681146200040157600080fd5b919050565b60008060008060008060c087890312156200041f578182fd5b6200042a87620003e9565b95506200043a60208801620003e9565b94506200044a60408801620003e9565b93506200045a60608801620003e9565b92506200046a60808801620003e9565b91506200047a60a08801620003e9565b90509295509295509295565b60805160a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e05161030051610320516103405161036051610380516103a0516103c051614f256200094660003960006140dc01526000612a83015260006109a6015260008181610f0b0152818161280b01528181613aa80152613e980152600081816120470152818161276d015281816139e10152613dfa015260008181612023015281816126cf0152818161391a0152613d5c015260008181610e1b01528181612631015281816138530152613cbe01526000818161090a015281816125930152818161378c0152613c20015260008181611fd5015281816124f5015281816136c70152613b8201526000818161092e01528181611ebb0152818161360901528181614003015261416f015260008181611e480152818161354901528181613fd00152818161414801526142000152600081816112ba01528181611dd50152818161348901528181613f9d0152614291015260008181611d62015281816121b0015281816133c901528181613f6a0152614322015260008181610c8401528181611cef0152818161330901528181613f3701526143b3015260008181610cb101528181611c7c0152818161325c01528181613f0501526144440152600061285901526000610c60015260008181610cde015281816112e7015281816113210152818161149c01528181611a9201528181611f5d01528181612170015281816130b4015261450d0152600081816114dd015281816117ae01528181611b1501528181611f9e01528181612835015281816130260152818161313301526141090152600081816118b401528181611ff901528181612f730152612ff4015260008181610a0b01528181610c0001528181610d7501528181610f3e015281816119e801528181611f3001528181612c2e0152612cc301526000818161098201528181610a6d0152612aec0152600081816130680152613106015260008181610fb001528181611033015281816110b50152818161138a0152818161140f015281816117da015281816118f5015281816120900152818161210d0152818161224d015281816122ca01528181612349015281816123c801528181612447015281816124c60152818161256401528181612602015281816126a00152818161273e015281816127dc01528181612db501528181612e3101528181612eaf01528181612fb401528181613174015281816136a00152818161375d01528181613824015281816138eb015281816139b201528181613a7901528181613b5301528181613bf101528181613c8f01528181613d2d01528181613dcb01528181613e69015261453a015260008181610e9801528181611141015281816111d201528181611b84015281816128c2015281816129e301528181612f1e0152818161322f015281816132da0152818161339a0152818161345a0152818161351a015281816135da015261455e0152600081816121d401528181612895015261293c015260006118870152614f256000f3fe608060405234801561001057600080fd5b50600436106104ee5760003560e01c8063879010f41161028e578063c4e41b2211610167578063e0a8ed52116100d9578063f2fa0bb011610092578063f2fa0bb0146108d8578063f7007608146108e0578063f7bd54f7146108e8578063f95a42e9146108f0578063fb1db278146108f8578063fc0c546a14610900576104ee565b8063e0a8ed5214610887578063e0e01a611461089a578063e5f59bc1146108a2578063e9a4e6ba146108b5578063ed49d2f8146108bd578063f0929fc8146108c5576104ee565b8063d3b7c5111161012b578063d3b7c51114610841578063d487bc2414610849578063dc73559e14610851578063dda1dccd14610864578063ded6e1c91461086c578063e0676b011461087f576104ee565b8063c4e41b22146107f8578063c63c4e9b14610800578063c710303614610808578063d06482e51461081b578063d28708641461082e576104ee565b8063abc090d411610200578063b31c710a116101c4578063b31c710a146107c8578063b60f0531146107d0578063b61841e1146107d8578063b9ec7d74146107e0578063bb20d1e1146107e8578063c4c57bad146107f0576104ee565b8063abc090d414610795578063ae8853521461079d578063aec92998146107a5578063b1e37008146107b8578063b2922ec4146107c0576104ee565b80639d2252bc116102525780639d2252bc146107655780639eb0e9651461076d578063a569e89614610775578063a7708fb31461077d578063a83a33dd14610785578063aaf5ab8d1461078d576104ee565b8063879010f4146107275780638a22abb11461073a5780638ed955b914610742578063931cc2d41461074a5780639bc643a414610752576104ee565b80634ed3dded116103cb578063655ea8eb1161033d5780636f3d3542116102f65780636f3d3542146106e157806373d95bc5146106e9578063758fb955146106fc5780637668702a1461070f57806376b4c85c146107175780637943ac0b1461071f576104ee565b8063655ea8eb146106a657806366813f63146106ae5780636a0ab9a9146106b65780636ce57221146106be5780636d557c2e146106c65780636ea9e374146106d9576104ee565b80635ec232f11161038f5780635ec232f11461064a578063615cef7d146106525780636355a2bb14610665578063638598ce14610678578063640ba48d1461068057806364b8cf3d14610693576104ee565b80634ed3dded1461062257806351a41dec1461062a5780635553c956146106325780635a4972e61461063a5780635d8ee0b914610642576104ee565b8063296d77fb1161046457806334733cc91161042857806334733cc9146105f2578063368e9c6c146105fa5780633ab3feb2146106025780634626402b1461060a5780634641257d146106125780634b60ae631461061a576104ee565b8063296d77fb146105b45780632a5626f2146105bc5780632a9f51d7146105c45780632b976cf6146105cc5780632d72b864146105df576104ee565b80631cde0e4b116104b65780631cde0e4b146105565780631ecff8301461055e5780632254ea331461057157806323572fc914610586578063249558461461059957806328382258146105ac576104ee565b80630919475d146104f3578063092b4a3e14610511578063129ebc4b14610526578063136e89231461053b5780631cc9841f1461054e575b600080fd5b6104fb610908565b6040516105089190614a91565b60405180910390f35b61051961092c565b60405161050891906149c1565b61052e610950565b6040516105089190614a86565b61052e6105493660046147de565b610960565b610519610980565b6104fb6109a4565b61051961056c36600461488c565b6109c8565b61058461057f3660046148b5565b610a00565b005b6105846105943660046147c4565b610a53565b6105846105a73660046147c4565b610bf5565b610519610c5e565b610519610c82565b61052e610ca6565b610519610caf565b6105846105da36600461488c565b610cd3565b6105846105ed366004614810565b610d6a565b6104fb610e0a565b61052e610e10565b6104fb610e19565b610519610e3d565b610584610e4c565b6104fb610f03565b6104fb610f09565b6104fb610f2d565b610584610f33565b61052e611240565b61058461124e565b6105196112b8565b610584610660366004614926565b6112dc565b610584610673366004614926565b611316565b610584611350565b61058461068e366004614926565b611491565b6105846106a13660046147c4565b611547565b6105846117a3565b610519611870565b6104fb61187f565b6104fb611885565b6105846106d4366004614956565b6118a9565b610584611968565b6105846119a2565b6105846106f736600461488c565b611a87565b6104fb61070a3660046147c4565b611afa565b610584611b0a565b6104fb611b56565b610584611b5c565b6105846107353660046147c4565b611b76565b6104fb611c74565b610584611c7a565b610519611f2e565b610584610760366004614926565b611f52565b6104fb611fd3565b610519611ff7565b6104fb61201b565b6104fb612021565b6104fb612045565b61052e612069565b610584612079565b6104fb61215f565b6105846107b3366004614926565b612165565b61051961219f565b6105196121ae565b6105196121d2565b6104fb6121f6565b6105846121fc565b610584612236565b610519612833565b610519612857565b6104fb61287b565b6104fb612a81565b6105846108163660046147c4565b612aa5565b610584610829366004614926565b612f68565b61058461083c366004614926565b612fe9565b6104fb61309d565b6104fb6130a3565b61058461085f366004614926565b6130a9565b6104fb6130e3565b6104fb61087a3660046147c4565b6130e9565b610519613104565b610584610895366004614926565b613128565b610584613215565b6105846108b036600461484b565b613efa565b6104fb6140d4565b6104fb6140da565b6105846108d33660046148b5565b6140fe565b610519614146565b6104fb61416a565b61051961450b565b61052e61452f565b610519614538565b61051961455c565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601354600160a81b900460ff1681565b600460209081526000928352604080842090915290825290205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600360205281600052604060002081815481106109e457600080fd5b6000918252602090912001546001600160a01b03169150829050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a3557600080fd5b60138054911515600160a81b0260ff60a81b19909216919091179055565b6040516317aa5fb760e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632f54bf6e90610aa29033906004016149c1565b60206040518083038186803b158015610aba57600080fd5b505afa158015610ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af291906148d1565b905080610b1a5760405162461bcd60e51b8152600401610b1190614bc6565b60405180910390fd5b3360009081526004602090815260408083206001600160a01b038616845290915290205460ff1615610b5e5760405162461bcd60e51b8152600401610b1190614c60565b3360008181526004602090815260408083206001600160a01b038716808552908352818420805460ff1916600190811790915560038452828520805480830182559086529390942090920180546001600160a01b03191685179055517fe33d821ee0252a5c507075137daf759d5ec3bab8afacd3bfc12c76716926312c93610be993909287926149d5565b60405180910390a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c2a57600080fd5b436012556013805460ff60a01b196001600160a01b039093166001600160a01b03199091161791909116600160a01b179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d0857600080fd5b6040516313232c1360e11b81526001600160a01b03831690632646582690610d34908490600401614a91565b600060405180830381600087803b158015610d4e57600080fd5b505af1158015610d62573d6000803e3d6000fd5b505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d9f57600080fd5b60005460405163d7b7142360e01b81526001600160a01b039091169063d7b7142390610dd390869086908690600401614a00565b600060405180830381600087803b158015610ded57600080fd5b505af1158015610e01573d6000803e3d6000fd5b50505050505050565b60075481565b60155460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031681565b333214610e6b5760405162461bcd60e51b8152600401610b1190614bfd565b6000610e7561416a565b9050610e7f611c7a565b610e87613215565b42601455610ebf6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383614580565b336001600160a01b03167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba82604051610ef89190614a91565b60405180910390a250565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f6857600080fd5b43600554601254610f799190614e16565b10610f965760405162461bcd60e51b8152600401610b1190614c29565b6013546040516321c17f3560e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692638705fcd492610fe99291909116906004016149c1565b600060405180830381600087803b15801561100357600080fd5b505af1158015611017573d6000803e3d6000fd5b50506013546040516346c4548760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169450638d88a90e935061106b9216906004016149c1565b600060405180830381600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b505060135460405163f2fde38b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116945063f2fde38b93506110ed9216906004016149c1565b600060405180830381600087803b15801561110757600080fd5b505af115801561111b573d6000803e3d6000fd5b50506013546040516370a0823160e01b81526111f993506001600160a01b0391821692507f0000000000000000000000000000000000000000000000000000000000000000909116906370a08231906111789030906004016149c1565b60206040518083038186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c8919061493e565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190614580565b60135460405133917f5296de069a121d7d0bc5ab079d0b2aaad96d23909ae242cabb658a592247ce6291611236916001600160a01b0316906149c1565b60405180910390a2565b601054610100900460ff1681565b60105460ff16801561126f575042600d54600f5461126c9190614e16565b11155b61127857600080fd5b600f546112859042614e6d565b600e546112929043614e6d565b61129f90620f4240614e4e565b6112a99190614e2e565b600c556010805460ff19169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461131157600080fd5b600755565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461134b57600080fd5b600955565b60155460ff16156113735760405162461bcd60e51b8152600401610b1190614dc9565b604051636cb1c21160e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d9638422906113c890600090610fa09082908190600401614a9a565b600060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b5050604051636cb1c21160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063d96384229150611450906001906107d0906000908190600401614a9a565b600060405180830381600087803b15801561146a57600080fd5b505af115801561147e573d6000803e3d6000fd5b50506015805460ff191660011790555050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114c657600080fd5b60405163640ba48d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063640ba48d90611512908490600401614a91565b600060405180830381600087803b15801561152c57600080fd5b505af1158015611540573d6000803e3d6000fd5b5050505050565b3360009081526004602090815260408083206001600160a01b038516845290915290205460ff1661158a5760405162461bcd60e51b8152600401610b1190614cf6565b6001600160a01b0381166000908152600360205260408120546115af90600190614e6d565b905060005b6001600160a01b03831660009081526003602052604090208054339190839081106115ef57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161461161b578061161381614eb0565b9150506115b4565b3360009081526004602090815260408083206001600160a01b03871684529091529020805460ff191690558082146116ff576001600160a01b038316600090815260036020526040902080548390811061168557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b038681168452600390925260409092208054919092169190839081106116d057634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b038316600090815260036020526040902080548061173457634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810180546001600160a01b03191690559091019091556040517fe33d821ee0252a5c507075137daf759d5ec3bab8afacd3bfc12c76716926312c9161179691339187916001600160a01b038316906149d5565b60405180910390a1505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117d857600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561183357600080fd5b505af1158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b919061493e565b600a55565b6013546001600160a01b031681565b60125481565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118de57600080fd5b604051636cb1c21160e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d963842290611930908790879087908790600401614a9a565b600060405180830381600087803b15801561194a57600080fd5b505af115801561195e573d6000803e3d6000fd5b5050505050505050565b60105460ff161561198b5760405162461bcd60e51b8152600401610b1190614b25565b6010805460ff1916600117905543600e5542600f55565b601354600160a01b900460ff166119cb5760405162461bcd60e51b8152600401610b1190614b5c565b60135460405163050168c160e01b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263050168c192611a1e9216906004016149c1565b604080518083038186803b158015611a3557600080fd5b505afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d91906148ed565b5090508015611a84576013805460ff60a01b191690555b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611abc57600080fd5b6105dc811115611ade5760405162461bcd60e51b8152600401610b1190614dee565b6001600160a01b03909116600090815260026020526040902055565b6001600160a01b0381165b919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b3f57600080fd5b60118054906000611b4f83614eb0565b9190505550565b60115481565b612710611b6761287b565b611b719190614e2e565b600855565b333214611b8257600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415611bd45760405162461bcd60e51b8152600401610b1190614d1a565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611c039030906004016149c1565b60206040518083038186803b158015611c1b57600080fd5b505afa158015611c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c53919061493e565b600054909150611c70906001600160a01b03848116911683614580565b5050565b600c5481565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cd557600080fd5b505af1158015611ce9573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4857600080fd5b505af1158015611d5c573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dbb57600080fd5b505af1158015611dcf573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e2e57600080fd5b505af1158015611e42573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ea157600080fd5b505af1158015611eb5573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f1457600080fd5b505af1158015611f28573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f8757600080fd5b6040516326f190e960e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639bc643a490611512908490600401614a91565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601354600160a01b900460ff1681565b6040516328f582d360e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906351eb05a6906120c690600090600401614a91565b600060405180830381600087803b1580156120e057600080fd5b505af11580156120f4573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061214590600190600401614a91565b600060405180830381600087803b158015611f1457600080fd5b60095481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461219a57600080fd5b600655565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145481565b6201518061220e63629e1bbd42614e6d565b6122189190614e2e565b612224906109c4614e4e565b612231906202e248614e16565b600555565b6040516328f582d360e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906351eb05a69061228390600090600401614a91565b600060405180830381600087803b15801561229d57600080fd5b505af11580156122b1573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061230290600190600401614a91565b600060405180830381600087803b15801561231c57600080fd5b505af1158015612330573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061238190600890600401614a91565b600060405180830381600087803b15801561239b57600080fd5b505af11580156123af573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061240090600990600401614a91565b600060405180830381600087803b15801561241a57600080fd5b505af115801561242e573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061247f90600a90600401614a91565b600060405180830381600087803b15801561249957600080fd5b505af11580156124ad573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061251d907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b15801561253757600080fd5b505af115801561254b573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506125bb907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b1580156125d557600080fd5b505af11580156125e9573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612659907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b15801561267357600080fd5b505af1158015612687573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506126f7907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b15801561271157600080fd5b505af1158015612725573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612795907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b1580156127af57600080fd5b505af11580156127c3573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612145907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906128ea907f0000000000000000000000000000000000000000000000000000000000000000906004016149c1565b60206040518083038186803b15801561290257600080fd5b505afa158015612916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293a919061493e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cb919061493e565b6129d59190614e6d565b6129e1906103e8614e4e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a3a57600080fd5b505afa158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a72919061493e565b612a7c9190614e16565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600360205260408120546005811015612adf5760405162461bcd60e51b8152600401610b1190614aee565b60005b81811015612c08577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632f54bf6e60036000876001600160a01b03166001600160a01b031681526020019081526020016000208381548110612b5d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160e01b031960e084901b168152612b93916001600160a01b0316906004016149c1565b60206040518083038186803b158015612bab57600080fd5b505afa158015612bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be391906148d1565b15612bf65782612bf281614eb0565b9350505b80612c0081614eb0565b915050612ae2565b506005821015612c2a5760405162461bcd60e51b8152600401610b1190614c88565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166319cbe9506040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8557600080fd5b505afa158015612c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbd919061493e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637e57e8ff866001600160a01b03166040518263ffffffff1660e01b8152600401612d169190614a91565b60206040518083038186803b158015612d2e57600080fd5b505afa158015612d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d66919061493e565b90506064612d7583602a614e4e565b612d7f9190614e2e565b811015612d9e5760405162461bcd60e51b8152600401610b1190614d87565b6040516321c17f3560e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638705fcd490612dea9088906004016149c1565b600060405180830381600087803b158015612e0457600080fd5b505af1158015612e18573d6000803e3d6000fd5b50506040516346c4548760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250638d88a90e9150612e689088906004016149c1565b600060405180830381600087803b158015612e8257600080fd5b505af1158015612e96573d6000803e3d6000fd5b505060405163f2fde38b60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063f2fde38b9150612ee69088906004016149c1565b600060405180830381600087803b158015612f0057600080fd5b505af1158015612f14573d6000803e3d6000fd5b50505050611540857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161117891906149c1565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f9d57600080fd5b60405163a3d7a33960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a3d7a33990611512908490600401614a91565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806130485750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61305157600080fd5b604051636d1b229d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636d1b229d90611512908490600401614a91565b60055481565b600f5481565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146130de57600080fd5b600d55565b600d5481565b6001600160a01b031660009081526002602052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461315d57600080fd5b6040516305d4266960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630ba84cd2906131a9908490600401614a91565b600060405180830381600087803b1580156131c357600080fd5b505af11580156131d7573d6000803e3d6000fd5b505050507fa2c906d360736c15f8fc6c4b049228f49b9f4f8dbe56808aa82f316833a055be8160405161320a9190614a91565b60405180910390a150565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190613284907f0000000000000000000000000000000000000000000000000000000000000000906004016149c1565b60206040518083038186803b15801561329c57600080fd5b505afa1580156132b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d4919061493e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161334491906149c1565b60206040518083038186803b15801561335c57600080fd5b505afa158015613370573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613394919061493e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161340491906149c1565b60206040518083038186803b15801561341c57600080fd5b505afa158015613430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613454919061493e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016134c491906149c1565b60206040518083038186803b1580156134dc57600080fd5b505afa1580156134f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613514919061493e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161358491906149c1565b60206040518083038186803b15801561359c57600080fd5b505afa1580156135b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d4919061493e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161364491906149c1565b60206040518083038186803b15801561365c57600080fd5b505afa158015613670573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613694919061493e565b90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e40000006136fd8a6002614e4e565b6137079190614e2e565b6000806040518563ffffffff1660e01b81526004016137299493929190614a9a565b600060405180830381600087803b15801561374357600080fd5b505af1158015613757573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e40000008860036137c49190614e4e565b6137ce9190614e2e565b6000806040518563ffffffff1660e01b81526004016137f09493929190614a9a565b600060405180830381600087803b15801561380a57600080fd5b505af115801561381e573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000087600561388b9190614e4e565b6138959190614e2e565b6000806040518563ffffffff1660e01b81526004016138b79493929190614a9a565b600060405180830381600087803b1580156138d157600080fd5b505af11580156138e5573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000086600a6139529190614e4e565b61395c9190614e2e565b6000806040518563ffffffff1660e01b815260040161397e9493929190614a9a565b600060405180830381600087803b15801561399857600080fd5b505af11580156139ac573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000085600d613a199190614e4e565b613a239190614e2e565b6000806040518563ffffffff1660e01b8152600401613a459493929190614a9a565b600060405180830381600087803b158015613a5f57600080fd5b505af1158015613a73573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000084600f613ae09190614e4e565b613aea9190614e2e565b6000806040518563ffffffff1660e01b8152600401613b0c9493929190614a9a565b600060405180830381600087803b158015613b2657600080fd5b505af1158015613b3a573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613baa907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b158015613bc457600080fd5b505af1158015613bd8573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613c48907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b158015613c6257600080fd5b505af1158015613c76573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613ce6907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b158015613d0057600080fd5b505af1158015613d14573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613d84907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b158015613d9e57600080fd5b505af1158015613db2573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613e22907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b158015613e3c57600080fd5b505af1158015613e50573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613ec0907f000000000000000000000000000000000000000000000000000000000000000090600401614a91565b600060405180830381600087803b158015613eda57600080fd5b505af1158015613eee573d6000803e3d6000fd5b50505050505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480613f595750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b80613f8c5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b80613fbf5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b80613ff25750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806140255750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61402e57600080fd5b60405163b3f5f65560e01b81526001600160a01b0384169063b3f5f6559061406190879086908690600090600401614a60565b600060405180830381600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050507fd1e293b75a6aeb3a9ab5df2765badd46e6e7c83a001a37e4b9cadea14c8183718483856040516140c693929190614a3d565b60405180910390a150505050565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461413357600080fd5b600b805460ff1916911515919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe919061493e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561425757600080fd5b505afa15801561426b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428f919061493e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b1580156142e857600080fd5b505afa1580156142fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614320919061493e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561437957600080fd5b505afa15801561438d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b1919061493e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561440a57600080fd5b505afa15801561441e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614442919061493e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561449b57600080fd5b505afa1580156144af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d3919061493e565b6144dd9190614e16565b6144e79190614e16565b6144f19190614e16565b6144fb9190614e16565b6145059190614e16565b91505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6145d68363a9059cbb60e01b848460405160240161459f929190614a24565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526145db565b505050565b6000614630826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661466a9092919063ffffffff16565b8051909150156145d6578080602001905181019061464e91906148d1565b6145d65760405162461bcd60e51b8152600401610b1190614d3d565b60606146798484600085614683565b90505b9392505050565b6060824710156146a55760405162461bcd60e51b8152600401610b1190614b80565b6146ae85614743565b6146ca5760405162461bcd60e51b8152600401610b1190614cbf565b600080866001600160a01b031685876040516146e691906149a5565b60006040518083038185875af1925050503d8060008114614723576040519150601f19603f3d011682016040523d82523d6000602084013e614728565b606091505b5091509150614738828286614774565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b6060831561478357508161467c565b8251156147935782518084602001fd5b8160405162461bcd60e51b8152600401610b119190614abb565b80356001600160a01b0381168114611b0557600080fd5b6000602082840312156147d5578081fd5b61467c826147ad565b600080604083850312156147f0578081fd5b6147f9836147ad565b9150614807602084016147ad565b90509250929050565b600080600060608486031215614824578081fd5b61482d846147ad565b925061483b602085016147ad565b9150604084013590509250925092565b60008060008060808587031215614860578081fd5b614869856147ad565b9350614877602086016147ad565b93969395505050506040820135916060013590565b6000806040838503121561489e578182fd5b6148a7836147ad565b946020939093013593505050565b6000602082840312156148c6578081fd5b813561467c81614ee1565b6000602082840312156148e2578081fd5b815161467c81614ee1565b600080604083850312156148ff578182fd5b825161490a81614ee1565b602084015190925061491b81614ee1565b809150509250929050565b600060208284031215614937578081fd5b5035919050565b60006020828403121561494f578081fd5b5051919050565b6000806000806080858703121561496b578384fd5b8435935060208501359250604085013561ffff8116811461498a578283fd5b9150606085013561499a81614ee1565b939692955090935050565b600082516149b7818460208701614e84565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292909316602083015215156040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b90815260200190565b938452602084019290925261ffff1660408301521515606082015260800190565b6000602082528251806020840152614ada816040850160208701614e84565b601f01601f19169190910160400192915050565b6020808252601d908201527f6d696e696d756d2035207369676e617475726573207265717569726564000000604082015260600190565b60208082526017908201527f616c726561647920636f756e74696e6720626c6f636b73000000000000000000604082015260600190565b6020808252600a90820152696e6f742061637469766560b01b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601c908201527f5369676e6572206973206e6f74206d756c7469736967206f776e657200000000604082015260600190565b6020808252601290820152716e6f2070726f78792f636f6e74726163747360701b604082015260600190565b60208082526019908201527f74696d652064656c6179206e6f74207965742070617373656400000000000000604082015260600190565b6020808252600e908201526d185b1c9958591e481cda59db995960921b604082015260600190565b6020808252601f908201527f4d696e696d756d20352f38207369676e61747572657320726571756972656400604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600a90820152691b9bdd081cda59db995960b21b604082015260600190565b6020808252600990820152686e6f742058564d432160b81b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526022908201527f4d696e696d756d2034322520776569676874656420766f746520726571756972604082015261195960f21b606082015260800190565b6020808252600b908201526a185b1c9958591e481cd95d60aa1b604082015260600190565b6020808252600e908201526d0c4d49481a185c99081b1a5b5a5d60921b604082015260600190565b60008219821115614e2957614e29614ecb565b500190565b600082614e4957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614e6857614e68614ecb565b500290565b600082821015614e7f57614e7f614ecb565b500390565b60005b83811015614e9f578181015183820152602001614e87565b83811115611f285750506000910152565b6000600019821415614ec457614ec4614ecb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114611a8457600080fdfea2646970667358221220ca697cadc0b7783e7a8d6c1a71ff20320028e27a361c90b262260f294548fada64736f6c63430008000033000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd500000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a1200000000000000000000000030019481fc501afa449781ac671103feb0d6363c0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd500000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a1200000000000000000000000030019481fc501afa449781ac671103feb0d6363c0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46

-----Decoded View---------------
Arg [0] : _acPool1 (address): 0xffb71361dd8fc3ef0831871ec8dd51b413ed093c
Arg [1] : _acPool2 (address): 0x9a9aef66624c3fa77daacca9b51de307fa09bd50
Arg [2] : _acPool3 (address): 0x1f8a5d98f1e2f10e93331d27cf22ed7985ef6a12
Arg [3] : _acPool4 (address): 0x30019481fc501afa449781ac671103feb0d6363c
Arg [4] : _acPool5 (address): 0x8c96105ea574727e94d9c199c632128f1ca584cf
Arg [5] : _acPool6 (address): 0x605c5aa14bdbf0d50a99836e7909c631cf3c8d46

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c
Arg [1] : 0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd50
Arg [2] : 0000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a12
Arg [3] : 00000000000000000000000030019481fc501afa449781ac671103feb0d6363c
Arg [4] : 0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf
Arg [5] : 000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46


Deployed ByteCode Sourcemap

18347:20663:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20549:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20333:77;;;:::i;:::-;;;;;;;:::i;23051:28::-;;;:::i;:::-;;;;;;;:::i;20962:65::-;;;;;;:::i;:::-;;:::i;18947:85::-;;;:::i;20774:46::-;;;:::i;20886:56::-;;;;;;:::i;:::-;;:::i;33019:128::-;;;;;;:::i;:::-;;:::i;:::-;;37793:466;;;;;;:::i;:::-;;:::i;32078:247::-;;;;;;:::i;:::-;;:::i;19438:88::-;;;:::i;19997:77::-;;;:::i;22060:43::-;;;:::i;19913:77::-;;;:::i;33858:164::-;;;;;;:::i;:::-;;:::i;32599:245::-;;;;;;:::i;:::-;;:::i;21309:42::-;;;:::i;23174:26::-;;;:::i;20594:38::-;;;:::i;19685:74::-;;;:::i;29116:343::-;;;:::i;22441:31::-;;;:::i;20729:38::-;;;:::i;21170:41::-;;;:::i;31430:639::-;;;:::i;22629:29::-;;;:::i;24777:295::-;;;:::i;20165:77::-;;;:::i;33705:147::-;;;;;;:::i;:::-;;:::i;33539:160::-;;;;;;:::i;:::-;;:::i;29553:213::-;;;:::i;34869:183::-;;;;;;:::i;:::-;;:::i;38265:617::-;;;;;;:::i;:::-;;:::i;31260:152::-;;;:::i;22934:34::-;;;:::i;22889:38::-;;;:::i;18415:43::-;;;:::i;33302:231::-;;;;;;:::i;:::-;;:::i;24543:227::-;;;:::i;32331:263::-;;;:::i;34175:204::-;;;;;;:::i;:::-;;:::i;38888:119::-;;;;;;:::i;:::-;;:::i;34726:137::-;;;:::i;22781:46::-;;;:::i;24073:107::-;;;:::i;35346:324::-;;;;;;:::i;:::-;;:::i;22280:39::-;;;:::i;28815:220::-;;;:::i;19043:87::-;;;:::i;35055:179::-;;;;;;:::i;:::-;;:::i;20504:38::-;;;:::i;19137:82::-;;;:::i;21944:58::-;;;:::i;20639:38::-;;;:::i;20684:::-;;;:::i;23010:35::-;;;:::i;26704:134::-;;;:::i;21634:58::-;;;:::i;34028:141::-;;;;;;:::i;:::-;;:::i;19766:69::-;;;:::i;20081:77::-;;;:::i;18490:78::-;;;:::i;23136:32::-;;;:::i;36271:138::-;;;:::i;25978:656::-;;;:::i;19226:91::-;;;:::i;19530:::-;;;:::i;25669:194::-;;;:::i;21757:42::-;;;:::i;36696:1092::-;;;;;;:::i;:::-;;:::i;34573:147::-;;;;;;:::i;:::-;;:::i;34385:182::-;;;;;;:::i;:::-;;:::i;21070:45::-;;;:::i;22521:30::-;;;:::i;32850:163::-;;;;;;:::i;:::-;;:::i;22349:47::-;;;:::i;25084:128::-;;;;;;:::i;:::-;;:::i;18789:82::-;;;:::i;31024:230::-;;;;;;:::i;:::-;;:::i;27459:1350::-;;;:::i;30456:505::-;;;;;;:::i;:::-;;:::i;21433:32::-;;;:::i;21851:43::-;;;:::i;33153:144::-;;;;;;:::i;:::-;;:::i;20249:77::-;;;:::i;29771:425::-;;;:::i;19348:83::-;;;:::i;22597:26::-;;;:::i;18702:80::-;;;:::i;18575:75::-;;;:::i;20549:38::-;;;:::o;20333:77::-;;;:::o;23051:28::-;;;-1:-1:-1;;;23051:28:0;;;;;:::o;20962:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18947:85::-;;;:::o;20774:46::-;;;:::o;20886:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20886:56:0;;-1:-1:-1;20886:56:0;;-1:-1:-1;20886:56:0:o;33019:128::-;33079:10;-1:-1:-1;;;;;33093:17:0;33079:31;;33071:40;;;;;;33119:16;:23;;;;;-1:-1:-1;;;33119:23:0;-1:-1:-1;;;;33119:23:0;;;;;;;;;33019:128::o;37793:466::-;37867:53;;-1:-1:-1;;;37867:53:0;;37851:13;;-1:-1:-1;;;;;37884:15:0;37867:41;;;;:53;;37909:10;;37867:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37851:69;;37933:8;37925:49;;;;-1:-1:-1;;;37925:49:0;;;;;;;:::i;:::-;;;;;;;;;38006:10;37992:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;37992:39:0;;;;;;;;;;;;37991:40;37983:67;;;;-1:-1:-1;;;37983:67:0;;;;;;;:::i;:::-;38069:10;38055:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;38055:39:0;;;;;;;;;;;:46;;-1:-1:-1;;38055:46:0;38097:4;38055:46;;;;;;38106:19;:33;;;;;:50;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38106:50:0;;;;;38182:72;;;;;38069:10;;38081:12;;38182:72;:::i;:::-;;;;;;;;37793:466;;:::o;32078:247::-;32151:10;-1:-1:-1;;;;;32165:17:0;32151:31;;32143:40;;;;;;32220:12;32194:23;:38;32243:19;:33;;-1:-1:-1;;;;;;;;;32243:33:0;;;-1:-1:-1;;;;;;32243:33:0;;;;32287:30;;;;-1:-1:-1;;;32287:30:0;;;32078:247::o;19438:88::-;;;:::o;19997:77::-;;;:::o;22060:43::-;;;;;;:::o;19913:77::-;;;:::o;33858:164::-;33941:10;-1:-1:-1;;;;;33955:13:0;33941:27;;33933:36;;;;;;33977:40;;-1:-1:-1;;;33977:40:0;;-1:-1:-1;;;;;33977:27:0;;;;;:40;;34005:11;;33977:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33858:164;;:::o;32599:245::-;32709:10;-1:-1:-1;;;;;32723:17:0;32709:31;;32701:40;;;;;;32760:14;;32746:93;;-1:-1:-1;;;32746:93:0;;-1:-1:-1;;;;;32760:14:0;;;;32746:45;;:93;;32797:10;;32809;;32821:13;;32746:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32599:245;;;:::o;21309:42::-;;;;:::o;23174:26::-;;;;;;:::o;20594:38::-;;;:::o;19685:74::-;;;-1:-1:-1;;;;;19685:74:0;;:::o;29116:343::-;29163:10;29177:9;29163:23;29155:54;;;;-1:-1:-1;;;29155:54:0;;;;;;;:::i;:::-;29222:16;29241:23;:21;:23::i;:::-;29222:42;;29271:12;:10;:12::i;:::-;29294:16;:14;:16::i;:::-;29339:15;29319:17;:35;29362:48;-1:-1:-1;;;;;29369:5:0;29362:26;29389:10;29401:8;29362:26;:48::i;:::-;29430:10;-1:-1:-1;;;;;29422:29:0;;29442:8;29422:29;;;;;;:::i;:::-;;;;;;;;29116:343;:::o;22441:31::-;;;;:::o;20729:38::-;;;:::o;21170:41::-;;;;:::o;31430:639::-;31485:10;-1:-1:-1;;;;;31499:17:0;31485:31;;31477:40;;;;;;31580:12;31556:21;;31530:23;;:47;;;;:::i;:::-;:62;31522:100;;;;-1:-1:-1;;;31522:100:0;;;;;;;:::i;:::-;31667:19;;31629:58;;-1:-1:-1;;;31629:58:0;;-1:-1:-1;;;;;31641:10:0;31629:37;;;;;:58;;31667:19;;;;;31629:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31726:19:0;;31698:48;;-1:-1:-1;;;31698:48:0;;-1:-1:-1;;;;;31710:10:0;31698:27;;;-1:-1:-1;31698:27:0;;-1:-1:-1;31698:48:0;;31726:19;;31698:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31799:19:0;;31757:62;;-1:-1:-1;;;31757:62:0;;-1:-1:-1;;;;;31769:10:0;31757:41;;;-1:-1:-1;31757:41:0;;-1:-1:-1;31757:62:0;;31799:19;;31757:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31887:19:0;;31908:38;;-1:-1:-1;;;31908:38:0;;31860:87;;-1:-1:-1;;;;;;31887:19:0;;;;-1:-1:-1;31915:5:0;31908:23;;;;;;:38;;31940:4;;31908:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31867:5:0;31860:26;;:87;:26;:87::i;:::-;32029:19;;32013:48;;32050:10;;32013:48;;;;-1:-1:-1;;;;;32029:19:0;;32013:48;:::i;:::-;;;;;;;;31430:639::o;22629:29::-;;;;;;;;;:::o;24777:295::-;24842:14;;;;:79;;;;;24906:15;24879:22;;24861:15;;:40;;;;:::i;:::-;24860:61;;24842:79;24834:88;;;;;;25015:15;;24997:33;;:15;:33;:::i;:::-;24977:15;;24962:30;;:12;:30;:::i;:::-;24951:42;;:7;:42;:::i;:::-;:80;;;;:::i;:::-;24933:15;:98;25042:14;:22;;-1:-1:-1;;25042:22:0;;;24777:295::o;20165:77::-;;;:::o;33705:147::-;33782:10;-1:-1:-1;;;;;33796:13:0;33782:27;;33774:36;;;;;;33818:18;:29;33705:147::o;33539:160::-;33621:10;-1:-1:-1;;;;;33635:13:0;33621:27;;33613:36;;;;;;33657:22;:37;33539:160::o;29553:213::-;29601:14;;;;29600:15;29592:39;;;;-1:-1:-1;;;29592:39:0;;;;;;;:::i;:::-;29636:46;;-1:-1:-1;;;29636:46:0;;-1:-1:-1;;;;;29648:10:0;29636:27;;;;:46;;29664:1;;29667:4;;29664:1;;;;29636:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29688:46:0;;-1:-1:-1;;;29688:46:0;;-1:-1:-1;;;;;29700:10:0;29688:27;;-1:-1:-1;29688:27:0;;-1:-1:-1;29688:46:0;;29716:1;;29719:4;;29725:1;;;;29688:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29740:14:0;:21;;-1:-1:-1;;29740:21:0;29757:4;29740:21;;;-1:-1:-1;;29553:213:0:o;34869:183::-;34945:10;-1:-1:-1;;;;;34959:13:0;34945:27;;34937:36;;;;;;34978:69;;-1:-1:-1;;;34978:69:0;;-1:-1:-1;;;;;34991:21:0;34978:60;;;;:69;;35039:7;;34978:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34869:183;:::o;38265:617::-;38347:10;38333:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;38333:39:0;;;;;;;;;;;;38325:62;;;;-1:-1:-1;;;38325:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38413:33:0;;38392:18;38413:33;;;:19;:33;;;;;:40;:44;;38456:1;;38413:44;:::i;:::-;38392:65;;38462:14;38481:83;-1:-1:-1;;;;;38487:33:0;;;;;;:19;:33;;;;;:41;;38532:10;;38487:33;38521:6;;38487:41;;;;-1:-1:-1;;;38487:41:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38487:41:0;:55;38481:83;;38550:8;;;;:::i;:::-;;;;38481:83;;;38582:10;38610:5;38568:25;;;:13;:25;;;;;;;;-1:-1:-1;;;;;38568:39:0;;;;;;;;;:47;;-1:-1:-1;;38568:47:0;;;38623:20;;;38620:126;;-1:-1:-1;;;;;38695:33:0;;;;;;:19;:33;;;;;:45;;38729:10;;38695:45;;;;-1:-1:-1;;;38695:45:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38651:33:0;;;;;:19;:33;;;;;;;:41;;38695:45;;;;;38651:33;38685:6;;38651:41;;;;-1:-1:-1;;;38651:41:0;;;;;;;;;;;;;;;;;:89;;;;;-1:-1:-1;;;;;38651:89:0;;;;;-1:-1:-1;;;;;38651:89:0;;;;;;38620:126;-1:-1:-1;;;;;38751:33:0;;;;;;:19;:33;;;;;:39;;;;;-1:-1:-1;;;38751:39:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;38751:39:0;;;;;-1:-1:-1;;;;;;38751:39:0;;;;;;;;;38804:73;;;;;;38813:10;;38825:12;;-1:-1:-1;;;;;38846:30:0;;;38804:73;:::i;:::-;;;;;;;;38265:617;;;:::o;31260:152::-;31308:10;-1:-1:-1;;;;;31322:21:0;31308:35;;31300:44;;;;;;31381:10;-1:-1:-1;;;;;31369:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31349:17;:58;31260:152::o;22934:34::-;;;-1:-1:-1;;;;;22934:34:0;;:::o;22889:38::-;;;;:::o;18415:43::-;;;:::o;33302:231::-;33419:10;-1:-1:-1;;;;;33433:12:0;33419:26;;33411:35;;;;;;33454:74;;-1:-1:-1;;;33454:74:0;;-1:-1:-1;;;;;33466:10:0;33454:27;;;;:74;;33482:4;;33488:11;;33501:13;;33516:11;;33454:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33302:231;;;;:::o;24543:227::-;24603:14;;;;24602:15;24594:51;;;;-1:-1:-1;;;24594:51:0;;;;;;;:::i;:::-;24656:14;:21;;-1:-1:-1;;24656:21:0;24673:4;24656:21;;;24706:12;24688:15;:30;24747:15;24729;:33;24543:227::o;32331:263::-;32381:23;;-1:-1:-1;;;32381:23:0;;;;32373:46;;;;-1:-1:-1;;;32373:46:0;;;;;;;:::i;:::-;32502:19;;32455:67;;-1:-1:-1;;;32455:67:0;;32429:20;;-1:-1:-1;;;;;32466:17:0;32455:46;;;;;:67;;32502:19;;32455:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32428:94;;;32530:15;32527:63;;;32553:23;:31;;-1:-1:-1;;;;32553:31:0;;;32527:63;32331:263;:::o;34175:204::-;34263:10;-1:-1:-1;;;;;34277:13:0;34263:27;;34255:36;;;;;;34314:4;34304:6;:14;;34296:41;;;;-1:-1:-1;;;34296:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34345:20:0;;;;;;;:10;:20;;;;;:29;34175:204::o;38888:119::-;-1:-1:-1;;;;;38975:26:0;;38888:119;;;;:::o;34726:137::-;34785:10;-1:-1:-1;;;;;34799:21:0;34785:35;;34777:44;;;;;;34826:30;:32;;;:30;:32;;;:::i;:::-;;;;;;34726:137::o;22781:46::-;;;;:::o;24073:107::-;24167:5;24148:16;:14;:16::i;:::-;:24;;;;:::i;:::-;24128:17;:44;24073:107::o;35346:324::-;35429:10;35443:9;35429:23;35421:32;;;;;;35484:5;-1:-1:-1;;;;;35466:23:0;:14;-1:-1:-1;;;;;35466:23:0;;;35458:45;;;;-1:-1:-1;;;35458:45:0;;;;;;;:::i;:::-;35535:47;;-1:-1:-1;;;35535:47:0;;35518:14;;-1:-1:-1;;;;;35535:32:0;;;;;:47;;35576:4;;35535:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35639:14;;35518:64;;-1:-1:-1;35603:59:0;;-1:-1:-1;;;;;35603:35:0;;;;35639:14;35518:64;35603:35;:59::i;:::-;35346:324;;:::o;22280:39::-;;;;:::o;28815:220::-;28857:7;-1:-1:-1;;;;;28849:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28888:7;-1:-1:-1;;;;;28880:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28919:7;-1:-1:-1;;;;;28911:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28950:7;-1:-1:-1;;;;;28942:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28981:7;-1:-1:-1;;;;;28973:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29012:7;-1:-1:-1;;;;;29004:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28815:220::o;19043:87::-;;;:::o;35055:179::-;35129:10;-1:-1:-1;;;;;35143:13:0;35129:27;;35121:36;;;;;;35162:67;;-1:-1:-1;;;35162:67:0;;-1:-1:-1;;;;;35175:21:0;35162:58;;;;:67;;35221:7;;35162:67;;;:::i;20504:38::-;;;:::o;19137:82::-;;;:::o;21944:58::-;;;;:::o;20639:38::-;;;:::o;20684:::-;;;:::o;23010:35::-;;;-1:-1:-1;;;23010:35:0;;;;;:::o;26704:134::-;26747:37;;-1:-1:-1;;;26747:37:0;;-1:-1:-1;;;;;26759:10:0;26747:34;;;;:37;;26782:1;;26747:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26792:37:0;;-1:-1:-1;;;26792:37:0;;-1:-1:-1;;;;;26804:10:0;26792:34;;-1:-1:-1;26792:34:0;;-1:-1:-1;26792:37:0;;26827:1;;26792:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;21634:58;;;;:::o;34028:141::-;34102:10;-1:-1:-1;;;;;34116:13:0;34102:27;;34094:36;;;;;;34138:10;:26;34028:141::o;19766:69::-;;;-1:-1:-1;;;;;19766:69:0;;:::o;20081:77::-;;;:::o;18490:78::-;;;:::o;23136:32::-;;;;:::o;36271:138::-;36390:5;36358:28;36376:10;36358:15;:28;:::i;:::-;36357:38;;;;:::i;:::-;36356:47;;36399:4;36356:47;:::i;:::-;36346:58;;:6;:58;:::i;:::-;36322:21;:82;36271:138::o;25978:656::-;26024:37;;-1:-1:-1;;;26024:37:0;;-1:-1:-1;;;;;26036:10:0;26024:34;;;;:37;;26059:1;;26024:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26098:37:0;;-1:-1:-1;;;26098:37:0;;-1:-1:-1;;;;;26110:10:0;26098:34;;-1:-1:-1;26098:34:0;;-1:-1:-1;26098:37:0;;26133:1;;26098:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26144:37:0;;-1:-1:-1;;;26144:37:0;;-1:-1:-1;;;;;26156:10:0;26144:34;;-1:-1:-1;26144:34:0;;-1:-1:-1;26144:37:0;;26179:1;;26144:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26205:37:0;;-1:-1:-1;;;26205:37:0;;-1:-1:-1;;;;;26217:10:0;26205:34;;-1:-1:-1;26205:34:0;;-1:-1:-1;26205:37:0;;26240:1;;26205:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26247:38:0;;-1:-1:-1;;;26247:38:0;;-1:-1:-1;;;;;26259:10:0;26247:34;;-1:-1:-1;26247:34:0;;-1:-1:-1;26247:38:0;;26282:2;;26247:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26311:45:0;;-1:-1:-1;;;26311:45:0;;-1:-1:-1;;;;;26323:10:0;26311:34;;-1:-1:-1;26311:34:0;;-1:-1:-1;26311:45:0;;26346:9;;26311:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26364:45:0;;-1:-1:-1;;;26364:45:0;;-1:-1:-1;;;;;26376:10:0;26364:34;;-1:-1:-1;26364:34:0;;-1:-1:-1;26364:45:0;;26399:9;;26364:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26418:45:0;;-1:-1:-1;;;26418:45:0;;-1:-1:-1;;;;;26430:10:0;26418:34;;-1:-1:-1;26418:34:0;;-1:-1:-1;26418:45:0;;26453:9;;26418:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26472:45:0;;-1:-1:-1;;;26472:45:0;;-1:-1:-1;;;;;26484:10:0;26472:34;;-1:-1:-1;26472:34:0;;-1:-1:-1;26472:45:0;;26507:9;;26472:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26526:45:0;;-1:-1:-1;;;26526:45:0;;-1:-1:-1;;;;;26538:10:0;26526:34;;-1:-1:-1;26526:34:0;;-1:-1:-1;26526:45:0;;26561:9;;26526:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26580:45:0;;-1:-1:-1;;;26580:45:0;;-1:-1:-1;;;;;26592:10:0;26580:34;;-1:-1:-1;26580:34:0;;-1:-1:-1;26580:45:0;;26615:9;;26580:45;;;:::i;19226:91::-;;;:::o;19530:::-;;;:::o;25669:194::-;25820:33;;-1:-1:-1;;;25820:33:0;;25715:7;;-1:-1:-1;;;;;25827:8:0;25820:26;;;;:33;;25847:5;;25820:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25794:8;-1:-1:-1;;;;;25787:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;25779:75;;:4;:75;:::i;:::-;25750:5;-1:-1:-1;;;;;25743:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:111;;;;:::i;:::-;25735:120;;25669:194;:::o;21757:42::-;;;:::o;36696:1092::-;-1:-1:-1;;;;;36814:33:0;;36764:20;36814:33;;;:19;:33;;;;;:40;36884:1;36867:18;;;36859:60;;;;-1:-1:-1;;;36859:60:0;;;;;;;:::i;:::-;36928:6;36924:210;36941:13;36938:1;:16;36924:210;;;37034:15;-1:-1:-1;;;;;37017:41:0;;37059:19;:33;37079:12;-1:-1:-1;;;;;37059:33:0;-1:-1:-1;;;;;37059:33:0;;;;;;;;;;;;37093:1;37059:36;;;;;;-1:-1:-1;;;37059:36:0;;;;;;;;;;;;;;;;;;;37017:79;;-1:-1:-1;;;;;;37017:79:0;;;;;;;;;-1:-1:-1;;;;;37059:36:0;;37017:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37014:115;;;37105:17;;;;:::i;:::-;;;;37014:115;36956:3;;;;:::i;:::-;;;;36924:210;;;;37171:1;37152:15;:20;;37144:64;;;;-1:-1:-1;;;37144:64:0;;;;;;;:::i;:::-;37217:20;37251:17;-1:-1:-1;;;;;37240:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37217:70;;37292:26;37332:17;-1:-1:-1;;;;;37321:49:0;;37387:12;-1:-1:-1;;;;;37371:30:0;37321:81;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37292:110;-1:-1:-1;37462:3:0;37442:17;:12;37457:2;37442:17;:::i;:::-;:23;;;;:::i;:::-;37419:18;:47;;37411:94;;;;-1:-1:-1;;;37411:94:0;;;;;;;:::i;:::-;37526:51;;-1:-1:-1;;;37526:51:0;;-1:-1:-1;;;;;37538:10:0;37526:37;;;;:51;;37564:12;;37526:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37588:41:0;;-1:-1:-1;;;37588:41:0;;-1:-1:-1;;;;;37600:10:0;37588:27;;-1:-1:-1;37588:27:0;;-1:-1:-1;37588:41:0;;37616:12;;37588:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37640:55:0;;-1:-1:-1;;;37640:55:0;;-1:-1:-1;;;;;37652:10:0;37640:41;;-1:-1:-1;37640:41:0;;-1:-1:-1;37640:55:0;;37682:12;;37640:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37700:80;37727:12;37748:5;-1:-1:-1;;;;;37741:23:0;;37773:4;37741:38;;;;;;;;;;;;;;;:::i;34573:147::-;34636:10;-1:-1:-1;;;;;34650:12:0;34636:26;;34628:35;;;;;;34668:47;;-1:-1:-1;;;34668:47:0;;-1:-1:-1;;;;;34680:10:0;34668:38;;;;:47;;34707:7;;34668:47;;;:::i;34385:182::-;34449:10;-1:-1:-1;;;;;34463:12:0;34449:26;;;:65;;-1:-1:-1;34479:10:0;-1:-1:-1;;;;;34493:21:0;34479:35;;34449:65;34441:74;;;;;;34520:42;;-1:-1:-1;;;34520:42:0;;-1:-1:-1;;;;;34529:12:0;34520:33;;;;:42;;34554:7;;34520:42;;;:::i;21070:45::-;;;;:::o;22521:30::-;;;;:::o;32850:163::-;32935:10;-1:-1:-1;;;;;32949:13:0;32935:27;;32927:36;;;;;;32971:22;:37;32850:163::o;22349:47::-;;;;:::o;25084:128::-;-1:-1:-1;;;;;25179:25:0;25152:7;25179:25;;;:10;:25;;;;;;;25084:128::o;18789:82::-;;;:::o;31024:230::-;31098:10;-1:-1:-1;;;;;31112:21:0;31098:35;;31090:44;;;;;;31142:58;;-1:-1:-1;;;31142:58:0;;-1:-1:-1;;;;;31154:10:0;31142:42;;;;:58;;31185:14;;31142:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31218:28;31231:14;31218:28;;;;;;:::i;:::-;;;;;;;;31024:230;:::o;27459:1350::-;27523:32;;-1:-1:-1;;;27523:32:0;;27500:20;;-1:-1:-1;;;;;27530:5:0;27523:23;;;;:32;;27547:7;;27523:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27500:55;;27563:20;27593:5;-1:-1:-1;;;;;27586:23:0;;27610:7;27586:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27563:55;;27626:20;27656:5;-1:-1:-1;;;;;27649:23:0;;27673:7;27649:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27626:55;;27689:20;27719:5;-1:-1:-1;;;;;27712:23:0;;27736:7;27712:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27689:55;;27752:20;27782:5;-1:-1:-1;;;;;27775:23:0;;27799:7;27775:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27752:55;;27815:20;27845:5;-1:-1:-1;;;;;27838:23:0;;27862:7;27838:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27815:55;-1:-1:-1;;;;;;27894:10:0;27882:27;;27910:9;27941:4;27922:16;:12;27937:1;27922:16;:::i;:::-;:23;;;;:::i;:::-;27948:1;27951:5;27882:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27977:10;-1:-1:-1;;;;;27965:27:0;;27993:9;28024:4;28005:12;28020:1;28005:16;;;;:::i;:::-;:23;;;;:::i;:::-;28031:1;28034:5;27965:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28060:10;-1:-1:-1;;;;;28048:27:0;;28076:9;28107:4;28088:12;28103:1;28088:16;;;;:::i;:::-;:23;;;;:::i;:::-;28114:1;28117:5;28048:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28143:10;-1:-1:-1;;;;;28131:27:0;;28159:9;28191:4;28171:12;28186:2;28171:17;;;;:::i;:::-;:24;;;;:::i;:::-;28198:1;28201:5;28131:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28227:10;-1:-1:-1;;;;;28215:27:0;;28243:9;28275:4;28255:12;28270:2;28255:17;;;;:::i;:::-;:24;;;;:::i;:::-;28282:1;28285:5;28215:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28311:10;-1:-1:-1;;;;;28299:27:0;;28327:9;28359:4;28339:12;28354:2;28339:17;;;;:::i;:::-;:24;;;;:::i;:::-;28366:1;28369:5;28299:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28486:45:0;;-1:-1:-1;;;28486:45:0;;-1:-1:-1;;;;;28498:10:0;28486:34;;-1:-1:-1;28486:34:0;;-1:-1:-1;28486:45:0;;28521:9;;28486:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28539:45:0;;-1:-1:-1;;;28539:45:0;;-1:-1:-1;;;;;28551:10:0;28539:34;;-1:-1:-1;28539:34:0;;-1:-1:-1;28539:45:0;;28574:9;;28539:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28593:45:0;;-1:-1:-1;;;28593:45:0;;-1:-1:-1;;;;;28605:10:0;28593:34;;-1:-1:-1;28593:34:0;;-1:-1:-1;28593:45:0;;28628:9;;28593:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28647:45:0;;-1:-1:-1;;;28647:45:0;;-1:-1:-1;;;;;28659:10:0;28647:34;;-1:-1:-1;28647:34:0;;-1:-1:-1;28647:45:0;;28682:9;;28647:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28701:45:0;;-1:-1:-1;;;28701:45:0;;-1:-1:-1;;;;;28713:10:0;28701:34;;-1:-1:-1;28701:34:0;;-1:-1:-1;28701:45:0;;28736:9;;28701:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28755:45:0;;-1:-1:-1;;;28755:45:0;;-1:-1:-1;;;;;28767:10:0;28755:34;;-1:-1:-1;28755:34:0;;-1:-1:-1;28755:45:0;;28790:9;;28755:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27459:1350;;;;;;:::o;30456:505::-;30609:10;-1:-1:-1;;;;;30623:7:0;30609:21;;;:46;;-1:-1:-1;30634:10:0;-1:-1:-1;;;;;30648:7:0;30634:21;;30609:46;:71;;;-1:-1:-1;30659:10:0;-1:-1:-1;;;;;30673:7:0;30659:21;;30609:71;:109;;;-1:-1:-1;30697:10:0;-1:-1:-1;;;;;30711:7:0;30697:21;;30609:109;:134;;;-1:-1:-1;30722:10:0;-1:-1:-1;;;;;30736:7:0;30722:21;;30609:134;:159;;;-1:-1:-1;30747:10:0;-1:-1:-1;;;;;30761:7:0;30747:21;;30609:159;30587:182;;;;;;30790:79;;-1:-1:-1;;;30790:79:0;;-1:-1:-1;;;;;30790:41:0;;;;;:79;;30832:10;;30844:11;;30857:8;;30867:1;;30790:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30895:58;30913:10;30925:11;30938:14;30895:58;;;;;;;;:::i;:::-;;;;;;;;30456:505;;;;:::o;21433:32::-;;;;:::o;21851:43::-;;;:::o;33153:144::-;33220:10;-1:-1:-1;;;;;33234:21:0;33220:35;;33212:44;;;;;;33261:24;:31;;-1:-1:-1;;33261:31:0;;;;;;;;;;33153:144::o;20249:77::-;;;:::o;29771:425::-;29825:7;29839:20;30129:7;-1:-1:-1;;;;;30121:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30080:7;-1:-1:-1;;;;;30072:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30031:7;-1:-1:-1;;;;;30023:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29968:7;-1:-1:-1;;;;;29960:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29919:7;-1:-1:-1;;;;;29911:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29870:7;-1:-1:-1;;;;;29862:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:95;;;;:::i;:::-;:144;;;;:::i;:::-;:207;;;;:::i;:::-;:256;;;;:::i;:::-;:305;;;;:::i;:::-;29839:328;-1:-1:-1;;29771:425:0;:::o;19348:83::-;;;:::o;22597:26::-;;;;;;:::o;18702:80::-;;;:::o;18575:75::-;;;:::o;11997:211::-;12114:86;12134:5;12164:23;;;12189:2;12193:5;12141:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12141:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12141:58:0;-1:-1:-1;;;;;;12141:58:0;;;;;;;;;;12114:19;:86::i;:::-;11997:211;;;:::o;14570:716::-;14994:23;15020:69;15048:4;15020:69;;;;;;;;;;;;;;;;;15028:5;-1:-1:-1;;;;;15020:27:0;;;:69;;;;;:::i;:::-;15104:17;;14994:95;;-1:-1:-1;15104:21:0;15100:179;;15201:10;15190:30;;;;;;;;;;;;:::i;:::-;15182:85;;;;-1:-1:-1;;;15182:85:0;;;;;;;:::i;3916:229::-;4053:12;4085:52;4107:6;4115:4;4121:1;4124:12;4085:21;:52::i;:::-;4078:59;;3916:229;;;;;;:::o;5036:510::-;5206:12;5264:5;5239:21;:30;;5231:81;;;;-1:-1:-1;;;5231:81:0;;;;;;;:::i;:::-;5331:18;5342:6;5331:10;:18::i;:::-;5323:60;;;;-1:-1:-1;;;5323:60:0;;;;;;;:::i;:::-;5397:12;5411:23;5438:6;-1:-1:-1;;;;;5438:11:0;5457:5;5464:4;5438:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396:73;;;;5487:51;5504:7;5513:10;5525:12;5487:16;:51::i;:::-;5480:58;5036:510;-1:-1:-1;;;;;;;5036:510:0:o;1171:326::-;1231:4;1488:1;1466:7;-1:-1:-1;;;;;1466:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;1171:326;-1:-1:-1;;1171:326:0:o;7722:712::-;7872:12;7901:7;7897:530;;;-1:-1:-1;7932:10:0;7925:17;;7897:530;8046:17;;:21;8042:374;;8244:10;8238:17;8305:15;8292:10;8288:2;8284:19;8277:44;8192:148;8387:12;8380:20;;-1:-1:-1;;;8380:20:0;;;;;;;;:::i;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:411::-;;;;;1186:3;1174:9;1165:7;1161:23;1157:33;1154:2;;;1208:6;1200;1193:22;1154:2;1236:31;1257:9;1236:31;:::i;:::-;1226:41;;1286:40;1322:2;1311:9;1307:18;1286:40;:::i;:::-;1144:290;;1276:50;;-1:-1:-1;;;;1373:2:1;1358:18;;1345:32;;1424:2;1409:18;1396:32;;1144:290::o;1439:266::-;;;1568:2;1556:9;1547:7;1543:23;1539:32;1536:2;;;1589:6;1581;1574:22;1536:2;1617:31;1638:9;1617:31;:::i;:::-;1607:41;1695:2;1680:18;;;;1667:32;;-1:-1:-1;;;1526:179:1:o;1710:253::-;;1819:2;1807:9;1798:7;1794:23;1790:32;1787:2;;;1840:6;1832;1825:22;1787:2;1884:9;1871:23;1903:30;1927:5;1903:30;:::i;1968:257::-;;2088:2;2076:9;2067:7;2063:23;2059:32;2056:2;;;2109:6;2101;2094:22;2056:2;2146:9;2140:16;2165:30;2189:5;2165:30;:::i;2230:387::-;;;2364:2;2352:9;2343:7;2339:23;2335:32;2332:2;;;2385:6;2377;2370:22;2332:2;2422:9;2416:16;2441:30;2465:5;2441:30;:::i;:::-;2540:2;2525:18;;2519:25;2490:5;;-1:-1:-1;2553:32:1;2519:25;2553:32;:::i;:::-;2604:7;2594:17;;;2322:295;;;;;:::o;2622:190::-;;2734:2;2722:9;2713:7;2709:23;2705:32;2702:2;;;2755:6;2747;2740:22;2702:2;-1:-1:-1;2783:23:1;;2692:120;-1:-1:-1;2692:120:1:o;2817:194::-;;2940:2;2928:9;2919:7;2915:23;2911:32;2908:2;;;2961:6;2953;2946:22;2908:2;-1:-1:-1;2989:16:1;;2898:113;-1:-1:-1;2898:113:1:o;3016:566::-;;;;;3175:3;3163:9;3154:7;3150:23;3146:33;3143:2;;;3197:6;3189;3182:22;3143:2;3238:9;3225:23;3215:33;;3295:2;3284:9;3280:18;3267:32;3257:42;;3349:2;3338:9;3334:18;3321:32;3393:6;3386:5;3382:18;3375:5;3372:29;3362:2;;3420:6;3412;3405:22;3362:2;3448:5;-1:-1:-1;3505:2:1;3490:18;;3477:32;3518;3477;3518;:::i;:::-;3133:449;;;;-1:-1:-1;3133:449:1;;-1:-1:-1;;3133:449:1:o;3587:274::-;;3754:6;3748:13;3770:53;3816:6;3811:3;3804:4;3796:6;3792:17;3770:53;:::i;:::-;3839:16;;;;;3724:137;-1:-1:-1;;3724:137:1:o;3866:203::-;-1:-1:-1;;;;;4030:32:1;;;;4012:51;;4000:2;3985:18;;3967:102::o;4074:457::-;-1:-1:-1;;;;;4355:15:1;;;4337:34;;4407:15;;;;4402:2;4387:18;;4380:43;4466:14;4459:22;4454:2;4439:18;;4432:50;4513:2;4498:18;;4491:34;;;;4286:3;4271:19;;4253:278::o;4536:375::-;-1:-1:-1;;;;;4794:15:1;;;4776:34;;4846:15;;;;4841:2;4826:18;;4819:43;4893:2;4878:18;;4871:34;;;;4726:2;4711:18;;4693:218::o;4916:274::-;-1:-1:-1;;;;;5108:32:1;;;;5090:51;;5172:2;5157:18;;5150:34;5078:2;5063:18;;5045:145::o;5195:375::-;-1:-1:-1;;;;;5453:15:1;;;5435:34;;5500:2;5485:18;;5478:34;;;;5548:15;;;5543:2;5528:18;;5521:43;5385:2;5370:18;;5352:218::o;5575:425::-;-1:-1:-1;;;;;5832:32:1;;;;5814:51;;5896:2;5881:18;;5874:34;;;;5939:2;5924:18;;5917:34;5982:2;5967:18;;5960:34;5801:3;5786:19;;5768:232::o;6005:187::-;6170:14;;6163:22;6145:41;;6133:2;6118:18;;6100:92::o;6197:185::-;6351:25;;;6339:2;6324:18;;6306:76::o;6387:440::-;6638:25;;;6694:2;6679:18;;6672:34;;;;6754:6;6742:19;6737:2;6722:18;;6715:47;6805:14;6798:22;6793:2;6778:18;;6771:50;6625:3;6610:19;;6592:235::o;8038:383::-;;8187:2;8176:9;8169:21;8219:6;8213:13;8262:6;8257:2;8246:9;8242:18;8235:34;8278:66;8337:6;8332:2;8321:9;8317:18;8312:2;8304:6;8300:15;8278:66;:::i;:::-;8405:2;8384:15;-1:-1:-1;;8380:29:1;8365:45;;;;8412:2;8361:54;;8159:262;-1:-1:-1;;8159:262:1:o;8426:353::-;8628:2;8610:21;;;8667:2;8647:18;;;8640:30;8706:31;8701:2;8686:18;;8679:59;8770:2;8755:18;;8600:179::o;8784:347::-;8986:2;8968:21;;;9025:2;9005:18;;;8998:30;9064:25;9059:2;9044:18;;9037:53;9122:2;9107:18;;8958:173::o;9136:334::-;9338:2;9320:21;;;9377:2;9357:18;;;9350:30;-1:-1:-1;;;9411:2:1;9396:18;;9389:40;9461:2;9446:18;;9310:160::o;9475:402::-;9677:2;9659:21;;;9716:2;9696:18;;;9689:30;9755:34;9750:2;9735:18;;9728:62;-1:-1:-1;;;9821:2:1;9806:18;;9799:36;9867:3;9852:19;;9649:228::o;9882:352::-;10084:2;10066:21;;;10123:2;10103:18;;;10096:30;10162;10157:2;10142:18;;10135:58;10225:2;10210:18;;10056:178::o;10239:342::-;10441:2;10423:21;;;10480:2;10460:18;;;10453:30;-1:-1:-1;;;10514:2:1;10499:18;;10492:48;10572:2;10557:18;;10413:168::o;10586:349::-;10788:2;10770:21;;;10827:2;10807:18;;;10800:30;10866:27;10861:2;10846:18;;10839:55;10926:2;10911:18;;10760:175::o;10940:338::-;11142:2;11124:21;;;11181:2;11161:18;;;11154:30;-1:-1:-1;;;11215:2:1;11200:18;;11193:44;11269:2;11254:18;;11114:164::o;11283:355::-;11485:2;11467:21;;;11524:2;11504:18;;;11497:30;11563:33;11558:2;11543:18;;11536:61;11629:2;11614:18;;11457:181::o;11643:353::-;11845:2;11827:21;;;11884:2;11864:18;;;11857:30;11923:31;11918:2;11903:18;;11896:59;11987:2;11972:18;;11817:179::o;12001:334::-;12203:2;12185:21;;;12242:2;12222:18;;;12215:30;-1:-1:-1;;;12276:2:1;12261:18;;12254:40;12326:2;12311:18;;12175:160::o;12340:332::-;12542:2;12524:21;;;12581:1;12561:18;;;12554:29;-1:-1:-1;;;12614:2:1;12599:18;;12592:39;12663:2;12648:18;;12514:158::o;12677:406::-;12879:2;12861:21;;;12918:2;12898:18;;;12891:30;12957:34;12952:2;12937:18;;12930:62;-1:-1:-1;;;13023:2:1;13008:18;;13001:40;13073:3;13058:19;;12851:232::o;13088:398::-;13290:2;13272:21;;;13329:2;13309:18;;;13302:30;13368:34;13363:2;13348:18;;13341:62;-1:-1:-1;;;13434:2:1;13419:18;;13412:32;13476:3;13461:19;;13262:224::o;13491:335::-;13693:2;13675:21;;;13732:2;13712:18;;;13705:30;-1:-1:-1;;;13766:2:1;13751:18;;13744:41;13817:2;13802:18;;13665:161::o;13831:338::-;14033:2;14015:21;;;14072:2;14052:18;;;14045:30;-1:-1:-1;;;14106:2:1;14091:18;;14084:44;14160:2;14145:18;;14005:164::o;15199:128::-;;15270:1;15266:6;15263:1;15260:13;15257:2;;;15276:18;;:::i;:::-;-1:-1:-1;15312:9:1;;15247:80::o;15332:217::-;;15398:1;15388:2;;-1:-1:-1;;;15423:31:1;;15477:4;15474:1;15467:15;15505:4;15430:1;15495:15;15388:2;-1:-1:-1;15534:9:1;;15378:171::o;15554:168::-;;15660:1;15656;15652:6;15648:14;15645:1;15642:21;15637:1;15630:9;15623:17;15619:45;15616:2;;;15667:18;;:::i;:::-;-1:-1:-1;15707:9:1;;15606:116::o;15727:125::-;;15795:1;15792;15789:8;15786:2;;;15800:18;;:::i;:::-;-1:-1:-1;15837:9:1;;15776:76::o;15857:258::-;15929:1;15939:113;15953:6;15950:1;15947:13;15939:113;;;16029:11;;;16023:18;16010:11;;;16003:39;15975:2;15968:10;15939:113;;;16070:6;16067:1;16064:13;16061:2;;;-1:-1:-1;;16105:1:1;16087:16;;16080:27;15910:205::o;16120:135::-;;-1:-1:-1;;16180:17:1;;16177:2;;;16200:18;;:::i;:::-;-1:-1:-1;16247:1:1;16236:13;;16167:88::o;16260:127::-;16321:10;16316:3;16312:20;16309:1;16302:31;16352:4;16349:1;16342:15;16376:4;16373:1;16366:15;16392:120;16480:5;16473:13;16466:21;16459:5;16456:32;16446:2;;16502:1;16499;16492:12

Swarm Source

ipfs://ca697cadc0b7783e7a8d6c1a71ff20320028e27a361c90b262260f294548fada
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.