Contract 0xad4791B8813620185699035F7DEC3cbDb8e39e2d

Contract Overview

Balance:
0 FTM
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2b392d8b8fe72ec119bbd5a172c091521d5b509ea7208f64bd65922a45f69b90Swapout100113712022-08-06 2:53:4660 days 18 hrs ago0xd71cb0c4a82c36312b5b83c43f351b882756957f IN  0xad4791b8813620185699035f7dec3cbdb8e39e2d0.1 FTM0.000141001875
0x582ad657a45c9bbbf105765733106ca87e6705e3ff1a411334746999a52c266fSwapout100080502022-08-05 3:12:3361 days 17 hrs ago0xd71cb0c4a82c36312b5b83c43f351b882756957f IN  0xad4791b8813620185699035f7dec3cbdb8e39e2d0.1 FTM0.000141001875
0xfc231850edcca60e772278724c4f4d2b304802abe4786bf7d7bbd400d5eb032cSwapout100080132022-08-05 2:46:0161 days 18 hrs ago0xd71cb0c4a82c36312b5b83c43f351b882756957f IN  0xad4791b8813620185699035f7dec3cbdb8e39e2d0.1 FTM0.00014100215
0x41e4de809cf6619feb788adb920d384677223fb59cf71b1119c5df0cd3d6e510Set Token Peers100079842022-08-05 2:33:1561 days 18 hrs ago0xd71cb0c4a82c36312b5b83c43f351b882756957f IN  0xad4791b8813620185699035f7dec3cbdb8e39e2d0 FTM0.000049863564
0x817613572e8264f8a522a5461b959f45908e7f93387b6f086e1abadc9b29b2a4Set Client Peers100079822022-08-05 2:31:5361 days 18 hrs ago0xd71cb0c4a82c36312b5b83c43f351b882756957f IN  0xad4791b8813620185699035f7dec3cbdb8e39e2d0 FTM0.000049143912
0x75a80b0e27c984143ad9ece12cce2a8a56fe5f820272d64719e6397dbb9049b60x60806040100079762022-08-05 2:28:5761 days 18 hrs ago0xd71cb0c4a82c36312b5b83c43f351b882756957f IN  Create: AnyswapTokenAnycallClient0 FTM0.003817820373
[ Download CSV Export 
Latest 10 internal transactions
Parent Txn Hash Block From To Value
0x2b392d8b8fe72ec119bbd5a172c091521d5b509ea7208f64bd65922a45f69b90100113712022-08-06 2:53:4660 days 18 hrs ago 0xad4791b8813620185699035f7dec3cbdb8e39e2d0xd71cb0c4a82c36312b5b83c43f351b882756957f0.0997 FTM
0x2b392d8b8fe72ec119bbd5a172c091521d5b509ea7208f64bd65922a45f69b90100113712022-08-06 2:53:4660 days 18 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0xad4791b8813620185699035f7dec3cbdb8e39e2d0.0997 FTM
0x2b392d8b8fe72ec119bbd5a172c091521d5b509ea7208f64bd65922a45f69b90100113712022-08-06 2:53:4660 days 18 hrs ago 0xad4791b8813620185699035f7dec3cbdb8e39e2d 0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM
0x582ad657a45c9bbbf105765733106ca87e6705e3ff1a411334746999a52c266f100080502022-08-05 3:12:3361 days 17 hrs ago 0xad4791b8813620185699035f7dec3cbdb8e39e2d0xd71cb0c4a82c36312b5b83c43f351b882756957f0.0997 FTM
0x582ad657a45c9bbbf105765733106ca87e6705e3ff1a411334746999a52c266f100080502022-08-05 3:12:3361 days 17 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0xad4791b8813620185699035f7dec3cbdb8e39e2d0.0997 FTM
0x582ad657a45c9bbbf105765733106ca87e6705e3ff1a411334746999a52c266f100080502022-08-05 3:12:3361 days 17 hrs ago 0xad4791b8813620185699035f7dec3cbdb8e39e2d 0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM
0xfc231850edcca60e772278724c4f4d2b304802abe4786bf7d7bbd400d5eb032c100080132022-08-05 2:46:0161 days 18 hrs ago 0xad4791b8813620185699035f7dec3cbdb8e39e2d0xd71cb0c4a82c36312b5b83c43f351b882756957f0.0997 FTM
0xfc231850edcca60e772278724c4f4d2b304802abe4786bf7d7bbd400d5eb032c100080132022-08-05 2:46:0161 days 18 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0xad4791b8813620185699035f7dec3cbdb8e39e2d0.0997 FTM
0xfc231850edcca60e772278724c4f4d2b304802abe4786bf7d7bbd400d5eb032c100080132022-08-05 2:46:0161 days 18 hrs ago 0xad4791b8813620185699035f7dec3cbdb8e39e2d 0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM
0x75a80b0e27c984143ad9ece12cce2a8a56fe5f820272d64719e6397dbb9049b6100079762022-08-05 2:28:5761 days 18 hrs ago 0xd71cb0c4a82c36312b5b83c43f351b882756957f  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapTokenAnycallClient

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}


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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    /**
     * @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 contracts/access/PausableControl.sol



pragma solidity ^0.8.10;

abstract contract PausableControl {
    mapping(bytes32 => bool) private _pausedRoles;

    bytes32 public constant PAUSE_ALL_ROLE = 0x00;

    event Paused(bytes32 role);
    event Unpaused(bytes32 role);

    modifier whenNotPaused(bytes32 role) {
        require(
            !paused(role) && !paused(PAUSE_ALL_ROLE),
            "PausableControl: paused"
        );
        _;
    }

    modifier whenPaused(bytes32 role) {
        require(
            paused(role) || paused(PAUSE_ALL_ROLE),
            "PausableControl: not paused"
        );
        _;
    }

    function paused(bytes32 role) public view virtual returns (bool) {
        return _pausedRoles[role];
    }

    function _pause(bytes32 role) internal virtual whenNotPaused(role) {
        _pausedRoles[role] = true;
        emit Paused(role);
    }

    function _unpause(bytes32 role) internal virtual whenPaused(role) {
        _pausedRoles[role] = false;
        emit Unpaused(role);
    }
}


// File contracts/access/AdminControl.sol



pragma solidity ^0.8.10;

abstract contract AdminControl {
    address public admin;
    address public pendingAdmin;

    event ChangeAdmin(address indexed _old, address indexed _new);
    event ApplyAdmin(address indexed _old, address indexed _new);

    constructor(address _admin) {
        require(_admin != address(0), "AdminControl: address(0)");
        admin = _admin;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin, "AdminControl: not admin");
        _;
    }

    function changeAdmin(address _admin) external onlyAdmin {
        require(_admin != address(0), "AdminControl: address(0)");
        pendingAdmin = _admin;
        emit ChangeAdmin(admin, _admin);
    }

    function applyAdmin() external {
        require(msg.sender == pendingAdmin, "AdminControl: Forbidden");
        emit ApplyAdmin(admin, pendingAdmin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }
}


// File contracts/access/PausableControlWithAdmin.sol




pragma solidity ^0.8.10;

abstract contract PausableControlWithAdmin is PausableControl, AdminControl {
    constructor(address _admin) AdminControl(_admin) {
    }

    function pause(bytes32 role) external onlyAdmin {
        _pause(role);
    }

    function unpause(bytes32 role) external onlyAdmin {
        _unpause(role);
    }
}


// File contracts/bAnycallbridgetoken.sol


pragma solidity ^0.8.6;
/// three level architecture
/// top level is the `AnycallClient` which the users interact with (through UI or tools)
/// middle level is `AnyswapToken` which works as handlers and vaults for tokens
/// bottom level is the `AnycallProxy` which complete the cross-chain interaction

interface IApp {
    function anyExecute(bytes calldata _data) external returns (bool success, bytes memory result);
}

interface IAnyswapToken {
    function mint(address to, uint256 amount) external returns (bool);

    function burn(address from, uint256 amount) external returns (bool);
}

interface IAnycallExecutor {
    function context() external returns (address from, uint256 fromChainID, uint256 nonce);
}

interface IAnycallV6Proxy {
    function executor() external view returns (address);

    function anyCall(
        address _to,
        bytes calldata _data,
        address _fallback,
        uint256 _toChainID,
        uint256 _flags
    ) external payable;
}

abstract contract AnycallClientBase is IApp, PausableControlWithAdmin {
    address public callProxy;
    address public anycallExecutor;
    // associated client app on each chain
    mapping(uint256 => address) public clientPeers; // key is chainId

    modifier onlyExecutor() {
        require(msg.sender == anycallExecutor, "AnycallClient: not authorized");
        _;
    }



    constructor(address _admin, address _callProxy) PausableControlWithAdmin(_admin) {
        require(_callProxy != address(0));
        callProxy = _callProxy;
        anycallExecutor = IAnycallV6Proxy(callProxy).executor();
    }

    receive() external payable {
        require(msg.sender == callProxy, "AnycallClient: receive from forbidden sender");
    }

    function setCallProxy(address _callProxy) external onlyAdmin {
        require(_callProxy != address(0));
        callProxy = _callProxy;
        anycallExecutor = IAnycallV6Proxy(callProxy).executor();

    }

    function setClientPeers(
        uint256[] calldata _chainIds,
        address[] calldata _peers
    ) external onlyAdmin {
        require(_chainIds.length == _peers.length);
        for (uint256 i = 0; i < _chainIds.length; i++) {
            clientPeers[_chainIds[i]] = _peers[i];
        }
    }
}

contract AnyswapTokenAnycallClient is AnycallClientBase {
    using SafeERC20 for IERC20;

    // pausable control roles
    bytes32 public constant PAUSE_SWAPOUT_ROLE = keccak256("PAUSE_SWAPOUT_ROLE");
    bytes32 public constant PAUSE_SWAPIN_ROLE = keccak256("PAUSE_SWAPIN_ROLE");
    bytes32 public constant PAUSE_FALLBACK_ROLE = keccak256("PAUSE_FALLBACK_ROLE");

    // associated tokens on each chain
    mapping(address => mapping(uint256 => address)) public tokenPeers;

    event LogSwapout(
        address indexed token, address indexed sender, address indexed receiver,
        uint256 amount, uint256 toChainId
    );
    event LogSwapin(
        address indexed token, address indexed sender, address indexed receiver,
        uint256 amount, uint256 fromChainId
    );
    event LogSwapoutFail(
        address indexed token, address indexed sender, address indexed receiver,
        uint256 amount, uint256 toChainId
    );

    constructor(
        address _admin,
        address _callProxy
    ) AnycallClientBase(_admin, _callProxy) {
    }

    function setTokenPeers(
        address srcToken,
        uint256[] calldata chainIds,
        address[] calldata dstTokens
    ) external onlyAdmin {
        require(chainIds.length == dstTokens.length);
        for (uint256 i = 0; i < chainIds.length; i++) {
            tokenPeers[srcToken][chainIds[i]] = dstTokens[i];
        }
    }

    /// @dev Call by the user to submit a request for a cross chain interaction
    function swapout(
        address token,
        uint256 amount,
        address receiver,
        uint256 toChainId,
        uint256 flags
    ) external payable whenNotPaused(PAUSE_SWAPOUT_ROLE) {
        address clientPeer = clientPeers[toChainId];
        require(clientPeer != address(0), "AnycallClient: no dest client");

        address dstToken = tokenPeers[token][toChainId];
        require(dstToken != address(0), "AnycallClient: no dest token");

        uint256 oldCoinBalance;
        if (msg.value > 0) {
            oldCoinBalance = address(this).balance - msg.value;
        }

        address _underlying = _getUnderlying(token);

        if (_underlying != address(0)) {
            uint256 old_balance = IERC20(_underlying).balanceOf(token);

            IERC20(_underlying).safeTransferFrom(msg.sender, token, amount);

            uint256 new_balance = IERC20(_underlying).balanceOf(token);

            // update amount to real balance increasement (some token may deduct fees)
            amount = new_balance > old_balance ? new_balance - old_balance : 0;
        } else {
            assert(IAnyswapToken(token).burn(msg.sender, amount));
        }

        bytes memory data = abi.encodeWithSelector(
            this.anyExecute.selector,
            token,
            dstToken,
            amount,
            msg.sender,
            receiver,
            toChainId
        );
        IAnycallV6Proxy(callProxy).anyCall{value: msg.value}(
            clientPeer,
            data,
            address(this),
            toChainId,
            flags
        );

        if (msg.value > 0) {
            uint256 newCoinBalance = address(this).balance;
            if (newCoinBalance > oldCoinBalance) {
                // return remaining fees
                (bool success,) = msg.sender.call{value: newCoinBalance - oldCoinBalance}("");
                require(success);
            }
        }

        emit LogSwapout(token, msg.sender, receiver, amount, toChainId);
    }

    /// @notice Call by `AnycallProxy` to execute a cross chain interaction on the destination chain
    function anyExecute(bytes calldata data)
        external
        override
        onlyExecutor
        whenNotPaused(PAUSE_SWAPIN_ROLE)
        returns (bool success, bytes memory result)
    {
        bytes4 selector = bytes4(data[:4]);
        if (selector == this.anyExecute.selector) {
            (
                address srcToken,
                address dstToken,
                uint256 amount,
                address sender,
                address receiver,
                //uint256 toChainId
            ) = abi.decode(
                data[4:],
                (address, address, uint256, address, address, uint256)
            );

            address executor = IAnycallV6Proxy(callProxy).executor();
            (address from, uint256 fromChainId,) = IAnycallExecutor(executor).context();
            require(clientPeers[fromChainId] == from, "AnycallClient: wrong context");
            require(tokenPeers[dstToken][fromChainId] == srcToken, "AnycallClient: mismatch source token");

            address _underlying = _getUnderlying(dstToken);

            if (_underlying != address(0) && (IERC20(dstToken).balanceOf(address(this)) >= amount)) {
                IERC20(dstToken).safeTransferFrom(address(this), receiver, amount);
            } else {
                assert(IAnyswapToken(dstToken).mint(receiver, amount));
            }

            emit LogSwapin(dstToken, sender, receiver, amount, fromChainId);
        } else if (selector == 0xa35fe8bf) { // bytes4(keccak256('anyFallback(address,bytes)'))
            (address _to, bytes memory _data) = abi.decode(data[4:], (address, bytes));
            anyFallback(_to, _data);
        } else {
            return (false, "unknown selector");
        }
        return (true, "");
    }

    /// @dev Call back by `AnycallProxy` on the originating chain if the cross chain interaction fails
    function anyFallback(address to, bytes memory data)
        internal
        whenNotPaused(PAUSE_FALLBACK_ROLE)
    {
        address executor = IAnycallV6Proxy(callProxy).executor();
        (address _from,,) = IAnycallExecutor(executor).context();
        require(_from == address(this), "AnycallClient: wrong context");

        (
            bytes4 selector,
            address srcToken,
            address dstToken,
            uint256 amount,
            address from,
            address receiver,
            uint256 toChainId
        ) = abi.decode(
            data,
            (bytes4, address, address, uint256, address, address, uint256)
        );

        require(selector == this.anyExecute.selector, "AnycallClient: wrong fallback data");
        require(clientPeers[toChainId] == to, "AnycallClient: mismatch dest client");
        require(tokenPeers[srcToken][toChainId] == dstToken, "AnycallClient: mismatch dest token");

        address _underlying = _getUnderlying(srcToken);

        if (_underlying != address(0) && (IERC20(srcToken).balanceOf(address(this)) >= amount)) {
            IERC20(_underlying).safeTransferFrom(address(this), from, amount);
        } else {
            assert(IAnyswapToken(srcToken).mint(from, amount));
        }

        emit LogSwapoutFail(srcToken, from, receiver, amount, toChainId);
    }

    function _getUnderlying(address token) internal returns (address) {
        (bool success, bytes memory returndata) = token.call(abi.encodeWithSelector(0x6f307dc3));
        if (success && returndata.length > 0) {
            (address _underlying) = abi.decode(returndata, (address));
            return _underlying;
        }
        return address(0);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_callProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_old","type":"address"},{"indexed":true,"internalType":"address","name":"_new","type":"address"}],"name":"ApplyAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_old","type":"address"},{"indexed":true,"internalType":"address","name":"_new","type":"address"}],"name":"ChangeAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainId","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"LogSwapoutFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PAUSE_ALL_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_FALLBACK_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_SWAPIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_SWAPOUT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"anyExecute","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"anycallExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"clientPeers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_callProxy","type":"address"}],"name":"setCallProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_chainIds","type":"uint256[]"},{"internalType":"address[]","name":"_peers","type":"address[]"}],"name":"setClientPeers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"uint256[]","name":"chainIds","type":"uint256[]"},{"internalType":"address[]","name":"dstTokens","type":"address[]"}],"name":"setTokenPeers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"internalType":"uint256","name":"flags","type":"uint256"}],"name":"swapout","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPeers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620044dc380380620044dc8339818101604052810190620000379190620002b5565b81818180600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a5906200035d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200012c57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020191906200037f565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620003b1565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200027d8262000250565b9050919050565b6200028f8162000270565b81146200029b57600080fd5b50565b600081519050620002af8162000284565b92915050565b60008060408385031215620002cf57620002ce6200024b565b5b6000620002df858286016200029e565b9250506020620002f2858286016200029e565b9150509250929050565b600082825260208201905092915050565b7f41646d696e436f6e74726f6c3a20616464726573732830290000000000000000600082015250565b600062000345601883620002fc565b915062000352826200030d565b602082019050919050565b60006020820190508181036000830152620003788162000336565b9050919050565b6000602082840312156200039857620003976200024b565b5b6000620003a8848285016200029e565b91505092915050565b61411b80620003c16000396000f3fe6080604052600436106101235760003560e01c80638d190370116100a0578063b5fb43c811610064578063b5fb43c81461045d578063d2c7dfcc1461049a578063ed56531a146104c5578063f1352f4d146104ee578063f851a4401461050a576101ba565b80638d190370146103655780638f2839701461038e5780639abaf479146103b75780639ac25d08146103f55780639e9e466614610420576101ba565b80632f4dae9f116100e75780632f4dae9f146102945780634c1278b0146102bd5780634e67428d146102e657806351fe4c2b146102fd5780638b7719fd1461033a576101ba565b80630e42fa36146101bf57806315a9234e146101ea57806326782247146102155780632b0d0a8b146102405780632da688ac14610269576101ba565b366101ba57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101af90612a6a565b60405180910390fd5b005b600080fd5b3480156101cb57600080fd5b506101d4610535565b6040516101e19190612aa3565b60405180910390f35b3480156101f657600080fd5b506101ff610559565b60405161020c9190612aa3565b60405180910390f35b34801561022157600080fd5b5061022a61057d565b6040516102379190612aff565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190612b5a565b6105a3565b005b34801561027557600080fd5b5061027e610782565b60405161028b9190612aff565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190612bb3565b6107a8565b005b3480156102c957600080fd5b506102e460048036038101906102df9190612c9b565b610844565b005b3480156102f257600080fd5b506102fb6109de565b005b34801561030957600080fd5b50610324600480360381019061031f9190612d66565b610bb3565b6040516103319190612aff565b60405180910390f35b34801561034657600080fd5b5061034f610be6565b60405161035c9190612aa3565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190612d93565b610c0a565b005b34801561039a57600080fd5b506103b560048036038101906103b09190612b5a565b610d66565b005b3480156103c357600080fd5b506103de60048036038101906103d99190612e6a565b610f26565b6040516103ec929190612f6b565b60405180910390f35b34801561040157600080fd5b5061040a611644565b6040516104179190612aa3565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190612bb3565b61164b565b6040516104549190612f9b565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190612fb6565b611674565b6040516104919190612aff565b60405180910390f35b3480156104a657600080fd5b506104af6116b6565b6040516104bc9190612aff565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190612bb3565b6116dc565b005b61050860048036038101906105039190612ff6565b611778565b005b34801561051657600080fd5b5061051f611df7565b60405161052c9190612aff565b60405180910390f35b7fcc99d060aac886e0f57b189f805230aca6bd003684c54e24a7043ac5d5c3567681565b7fa29cfc2ce0a6eb3cf6a8893cfc761b7caf0d3e334ba02bae304e0da8db4006ae81565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062a906130bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561066d57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906130f2565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f906130bd565b60405180910390fd5b61084181611e1d565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb906130bd565b60405180910390fd5b8181905084849050146108e657600080fd5b60005b848490508110156109d6578282828181106109075761090661311f565b5b905060200201602081019061091c9190612b5a565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008787858181106109705761096f61311f565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080806109ce9061317d565b9150506108e9565b505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6590613212565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f6d7e0a4e01cdbbdb3b116a1157c3a2c5165678006563d891c1c700b1238027ca60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f6b4dbfc84e4e79534c6e41e5a2fd5db184a99d798352dc0921c31a59bc413eb581565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c91906130bd565b60405180910390fd5b818190508484905014610cac57600080fd5b60005b84849050811015610d5f57828282818110610ccd57610ccc61311f565b5b9050602002016020810190610ce29190612b5a565b60056000878785818110610cf957610cf861311f565b5b90506020020135815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080610d579061317d565b915050610caf565b5050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906130bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d9061327e565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fcf9b665e0639e0b81a8db37b60ac7ddf45aeb1b484e11adeb7dff4bf4a3a625860405160405180910390a350565b60006060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb1906132ea565b60405180910390fd5b7f6b4dbfc84e4e79534c6e41e5a2fd5db184a99d798352dc0921c31a59bc413eb5610fe48161164b565b158015610ffa5750610ff86000801b61164b565b155b611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090613356565b60405180910390fd5b6000858560009060049261104f93929190613380565b9061105a91906133ff565b9050639abaf47960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561157b5760008060008060008a8a60049080926110c493929190613380565b8101906110d1919061349c565b50945094509450945094506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116f91906130f2565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d0496d6a6040518163ffffffff1660e01b81526004016060604051808303816000875af11580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e5919061353e565b50915091508173ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461128b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611282906135dd565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff16600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113609061366f565b60405180910390fd5b600061137488611edf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561142c5750868873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113e89190612aff565b602060405180830381865afa158015611405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611429919061368f565b10155b156114635761145e3086898b73ffffffffffffffffffffffffffffffffffffffff16611fdd909392919063ffffffff16565b6114ef565b8773ffffffffffffffffffffffffffffffffffffffff166340c10f1986896040518363ffffffff1660e01b815260040161149e9291906136cb565b6020604051808303816000875af11580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e19190613720565b6114ee576114ed61374d565b5b5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fd93e4cd2268f799ea5b0b87cddf50adc982760eafe2def648a6a62296f2ea9928a8660405161156592919061377c565b60405180910390a4505050505050505050611624565b63a35fe8bf60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156115e157600080878760049080926115bf93929190613380565b8101906115cc91906138d5565b915091506115da8282612066565b5050611623565b60006040518060400160405280601081526020017f756e6b6e6f776e2073656c6563746f7200000000000000000000000000000000815250935093505061163c565b5b60016040518060200160405280600081525093509350505b509250929050565b6000801b81565b600080600083815260200190815260200160002060009054906101000a900460ff169050919050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611763906130bd565b60405180910390fd5b611775816126a5565b50565b7fcc99d060aac886e0f57b189f805230aca6bd003684c54e24a7043ac5d5c356766117a28161164b565b1580156117b857506117b66000801b61164b565b155b6117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613356565b60405180910390fd5b60006005600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118969061397d565b60405180910390fd5b6000600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b906139e9565b60405180910390fd5b60008034111561199d57344761199a9190613a09565b90505b60006119a88a611edf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b2b5760008173ffffffffffffffffffffffffffffffffffffffff166370a082318c6040518263ffffffff1660e01b8152600401611a199190612aff565b602060405180830381865afa158015611a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5a919061368f565b9050611a89338c8c8573ffffffffffffffffffffffffffffffffffffffff16611fdd909392919063ffffffff16565b60008273ffffffffffffffffffffffffffffffffffffffff166370a082318d6040518263ffffffff1660e01b8152600401611ac49190612aff565b602060405180830381865afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b05919061368f565b9050818111611b15576000611b22565b8181611b219190613a09565b5b9a505050611bb7565b8973ffffffffffffffffffffffffffffffffffffffff16639dc29fac338b6040518363ffffffff1660e01b8152600401611b669291906136cb565b6020604051808303816000875af1158015611b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba99190613720565b611bb657611bb561374d565b5b5b6000639abaf47960e01b8b858c338d8d604051602401611bdc96959493929190613a3d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd45c4e7348784308d8d6040518763ffffffff1660e01b8152600401611c9f959493929190613a9e565b6000604051808303818588803b158015611cb857600080fd5b505af1158015611ccc573d6000803e3d6000fd5b50505050506000341115611d6c57600047905083811115611d6a5760003373ffffffffffffffffffffffffffffffffffffffff168583611d0c9190613a09565b604051611d1890613b29565b60006040518083038185875af1925050503d8060008114611d55576040519150601f19603f3d011682016040523d82523d6000602084013e611d5a565b606091505b5050905080611d6857600080fd5b505b505b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fb8b6a223e65ec5259b95a21624d01bae48fee26b3533e6e13f1c99b75a0c7af38d8c604051611de292919061377c565b60405180910390a45050505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80611e278161164b565b80611e3a5750611e396000801b61164b565b5b611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090613b8a565b60405180910390fd5b600080600084815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a82604051611ed39190612aa3565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16636f307dc36040516024016040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611f549190613bdb565b6000604051808303816000865af19150503d8060008114611f91576040519150601f19603f3d011682016040523d82523d6000602084013e611f96565b606091505b5091509150818015611fa9575060008151115b15611fd157600081806020019051810190611fc49190613c07565b9050809350505050611fd8565b6000925050505b919050565b612060846323b872dd60e01b858585604051602401611ffe93929190613c34565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061276a565b50505050565b7fa29cfc2ce0a6eb3cf6a8893cfc761b7caf0d3e334ba02bae304e0da8db4006ae6120908161164b565b1580156120a657506120a46000801b61164b565b155b6120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90613356565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217891906130f2565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d0496d6a6040518163ffffffff1660e01b81526004016060604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed919061353e565b505090503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461225f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612256906135dd565b60405180910390fd5b60008060008060008060008a80602001905181019061227e9190613c97565b9650965096509650965096509650639abaf47960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613dab565b60405180910390fd5b8b73ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613e3d565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990613ecf565b60405180910390fd5b600061249d87611edf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156125555750848773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125119190612aff565b602060405180830381865afa15801561252e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612552919061368f565b10155b1561258c576125873085878473ffffffffffffffffffffffffffffffffffffffff16611fdd909392919063ffffffff16565b612618565b8673ffffffffffffffffffffffffffffffffffffffff166340c10f1985876040518363ffffffff1660e01b81526004016125c79291906136cb565b6020604051808303816000875af11580156125e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260a9190613720565b6126175761261661374d565b5b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f2592581e9728083f952ca32d7c95ca01d40128f428d5cd727dab5570660c04c5888660405161268e92919061377c565b60405180910390a450505050505050505050505050565b806126af8161164b565b1580156126c557506126c36000801b61164b565b155b612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90613356565b60405180910390fd5b600160008084815260200190815260200160002060006101000a81548160ff0219169083151502179055507f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba318260405161275e9190612aa3565b60405180910390a15050565b60006127cc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128319092919063ffffffff16565b905060008151111561282c57808060200190518101906127ec9190613720565b61282b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282290613f61565b60405180910390fd5b5b505050565b60606128408484600085612849565b90509392505050565b60608247101561288e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288590613ff3565b60405180910390fd5b6128978561295d565b6128d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cd9061405f565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128ff9190613bdb565b60006040518083038185875af1925050503d806000811461293c576040519150601f19603f3d011682016040523d82523d6000602084013e612941565b606091505b5091509150612951828286612980565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315612990578290506129e0565b6000835111156129a35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d791906140c3565b60405180910390fd5b9392505050565b600082825260208201905092915050565b7f416e7963616c6c436c69656e743a20726563656976652066726f6d20666f726260008201527f696464656e2073656e6465720000000000000000000000000000000000000000602082015250565b6000612a54602c836129e7565b9150612a5f826129f8565b604082019050919050565b60006020820190508181036000830152612a8381612a47565b9050919050565b6000819050919050565b612a9d81612a8a565b82525050565b6000602082019050612ab86000830184612a94565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ae982612abe565b9050919050565b612af981612ade565b82525050565b6000602082019050612b146000830184612af0565b92915050565b6000604051905090565b600080fd5b600080fd5b612b3781612ade565b8114612b4257600080fd5b50565b600081359050612b5481612b2e565b92915050565b600060208284031215612b7057612b6f612b24565b5b6000612b7e84828501612b45565b91505092915050565b612b9081612a8a565b8114612b9b57600080fd5b50565b600081359050612bad81612b87565b92915050565b600060208284031215612bc957612bc8612b24565b5b6000612bd784828501612b9e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612c0557612c04612be0565b5b8235905067ffffffffffffffff811115612c2257612c21612be5565b5b602083019150836020820283011115612c3e57612c3d612bea565b5b9250929050565b60008083601f840112612c5b57612c5a612be0565b5b8235905067ffffffffffffffff811115612c7857612c77612be5565b5b602083019150836020820283011115612c9457612c93612bea565b5b9250929050565b600080600080600060608688031215612cb757612cb6612b24565b5b6000612cc588828901612b45565b955050602086013567ffffffffffffffff811115612ce657612ce5612b29565b5b612cf288828901612bef565b9450945050604086013567ffffffffffffffff811115612d1557612d14612b29565b5b612d2188828901612c45565b92509250509295509295909350565b6000819050919050565b612d4381612d30565b8114612d4e57600080fd5b50565b600081359050612d6081612d3a565b92915050565b600060208284031215612d7c57612d7b612b24565b5b6000612d8a84828501612d51565b91505092915050565b60008060008060408587031215612dad57612dac612b24565b5b600085013567ffffffffffffffff811115612dcb57612dca612b29565b5b612dd787828801612bef565b9450945050602085013567ffffffffffffffff811115612dfa57612df9612b29565b5b612e0687828801612c45565b925092505092959194509250565b60008083601f840112612e2a57612e29612be0565b5b8235905067ffffffffffffffff811115612e4757612e46612be5565b5b602083019150836001820283011115612e6357612e62612bea565b5b9250929050565b60008060208385031215612e8157612e80612b24565b5b600083013567ffffffffffffffff811115612e9f57612e9e612b29565b5b612eab85828601612e14565b92509250509250929050565b60008115159050919050565b612ecc81612eb7565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f0c578082015181840152602081019050612ef1565b83811115612f1b576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f3d82612ed2565b612f478185612edd565b9350612f57818560208601612eee565b612f6081612f21565b840191505092915050565b6000604082019050612f806000830185612ec3565b8181036020830152612f928184612f32565b90509392505050565b6000602082019050612fb06000830184612ec3565b92915050565b60008060408385031215612fcd57612fcc612b24565b5b6000612fdb85828601612b45565b9250506020612fec85828601612d51565b9150509250929050565b600080600080600060a0868803121561301257613011612b24565b5b600061302088828901612b45565b955050602061303188828901612d51565b945050604061304288828901612b45565b935050606061305388828901612d51565b925050608061306488828901612d51565b9150509295509295909350565b7f41646d696e436f6e74726f6c3a206e6f742061646d696e000000000000000000600082015250565b60006130a76017836129e7565b91506130b282613071565b602082019050919050565b600060208201905081810360008301526130d68161309a565b9050919050565b6000815190506130ec81612b2e565b92915050565b60006020828403121561310857613107612b24565b5b6000613116848285016130dd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061318882612d30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131bb576131ba61314e565b5b600182019050919050565b7f41646d696e436f6e74726f6c3a20466f7262696464656e000000000000000000600082015250565b60006131fc6017836129e7565b9150613207826131c6565b602082019050919050565b6000602082019050818103600083015261322b816131ef565b9050919050565b7f41646d696e436f6e74726f6c3a20616464726573732830290000000000000000600082015250565b60006132686018836129e7565b915061327382613232565b602082019050919050565b600060208201905081810360008301526132978161325b565b9050919050565b7f416e7963616c6c436c69656e743a206e6f7420617574686f72697a6564000000600082015250565b60006132d4601d836129e7565b91506132df8261329e565b602082019050919050565b60006020820190508181036000830152613303816132c7565b9050919050565b7f5061757361626c65436f6e74726f6c3a20706175736564000000000000000000600082015250565b60006133406017836129e7565b915061334b8261330a565b602082019050919050565b6000602082019050818103600083015261336f81613333565b9050919050565b600080fd5b600080fd5b6000808585111561339457613393613376565b5b838611156133a5576133a461337b565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600082821b905092915050565b600061340b83836133bb565b8261341681356133c6565b92506004821015613456576134517fffffffff00000000000000000000000000000000000000000000000000000000836004036008026133f2565b831692505b505092915050565b600061346982612abe565b9050919050565b6134798161345e565b811461348457600080fd5b50565b60008135905061349681613470565b92915050565b60008060008060008060c087890312156134b9576134b8612b24565b5b60006134c789828a01613487565b96505060206134d889828a01613487565b95505060406134e989828a01612d51565b94505060606134fa89828a01613487565b935050608061350b89828a01613487565b92505060a061351c89828a01612d51565b9150509295509295509295565b60008151905061353881612d3a565b92915050565b60008060006060848603121561355757613556612b24565b5b6000613565868287016130dd565b935050602061357686828701613529565b925050604061358786828701613529565b9150509250925092565b7f416e7963616c6c436c69656e743a2077726f6e6720636f6e7465787400000000600082015250565b60006135c7601c836129e7565b91506135d282613591565b602082019050919050565b600060208201905081810360008301526135f6816135ba565b9050919050565b7f416e7963616c6c436c69656e743a206d69736d6174636820736f75726365207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b60006136596024836129e7565b9150613664826135fd565b604082019050919050565b600060208201905081810360008301526136888161364c565b9050919050565b6000602082840312156136a5576136a4612b24565b5b60006136b384828501613529565b91505092915050565b6136c581612d30565b82525050565b60006040820190506136e06000830185612af0565b6136ed60208301846136bc565b9392505050565b6136fd81612eb7565b811461370857600080fd5b50565b60008151905061371a816136f4565b92915050565b60006020828403121561373657613735612b24565b5b60006137448482850161370b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600060408201905061379160008301856136bc565b61379e60208301846136bc565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137e282612f21565b810181811067ffffffffffffffff82111715613801576138006137aa565b5b80604052505050565b6000613814612b1a565b905061382082826137d9565b919050565b600067ffffffffffffffff8211156138405761383f6137aa565b5b61384982612f21565b9050602081019050919050565b82818337600083830152505050565b600061387861387384613825565b61380a565b905082815260208101848484011115613894576138936137a5565b5b61389f848285613856565b509392505050565b600082601f8301126138bc576138bb612be0565b5b81356138cc848260208601613865565b91505092915050565b600080604083850312156138ec576138eb612b24565b5b60006138fa85828601613487565b925050602083013567ffffffffffffffff81111561391b5761391a612b29565b5b613927858286016138a7565b9150509250929050565b7f416e7963616c6c436c69656e743a206e6f206465737420636c69656e74000000600082015250565b6000613967601d836129e7565b915061397282613931565b602082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b7f416e7963616c6c436c69656e743a206e6f206465737420746f6b656e00000000600082015250565b60006139d3601c836129e7565b91506139de8261399d565b602082019050919050565b60006020820190508181036000830152613a02816139c6565b9050919050565b6000613a1482612d30565b9150613a1f83612d30565b925082821015613a3257613a3161314e565b5b828203905092915050565b600060c082019050613a526000830189612af0565b613a5f6020830188612af0565b613a6c60408301876136bc565b613a796060830186612af0565b613a866080830185612af0565b613a9360a08301846136bc565b979650505050505050565b600060a082019050613ab36000830188612af0565b8181036020830152613ac58187612f32565b9050613ad46040830186612af0565b613ae160608301856136bc565b613aee60808301846136bc565b9695505050505050565b600081905092915050565b50565b6000613b13600083613af8565b9150613b1e82613b03565b600082019050919050565b6000613b3482613b06565b9150819050919050565b7f5061757361626c65436f6e74726f6c3a206e6f74207061757365640000000000600082015250565b6000613b74601b836129e7565b9150613b7f82613b3e565b602082019050919050565b60006020820190508181036000830152613ba381613b67565b9050919050565b6000613bb582612ed2565b613bbf8185613af8565b9350613bcf818560208601612eee565b80840191505092915050565b6000613be78284613baa565b915081905092915050565b600081519050613c0181613470565b92915050565b600060208284031215613c1d57613c1c612b24565b5b6000613c2b84828501613bf2565b91505092915050565b6000606082019050613c496000830186612af0565b613c566020830185612af0565b613c6360408301846136bc565b949350505050565b613c74816133c6565b8114613c7f57600080fd5b50565b600081519050613c9181613c6b565b92915050565b600080600080600080600060e0888a031215613cb657613cb5612b24565b5b6000613cc48a828b01613c82565b9750506020613cd58a828b01613bf2565b9650506040613ce68a828b01613bf2565b9550506060613cf78a828b01613529565b9450506080613d088a828b01613bf2565b93505060a0613d198a828b01613bf2565b92505060c0613d2a8a828b01613529565b91505092959891949750929550565b7f416e7963616c6c436c69656e743a2077726f6e672066616c6c6261636b20646160008201527f7461000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d956022836129e7565b9150613da082613d39565b604082019050919050565b60006020820190508181036000830152613dc481613d88565b9050919050565b7f416e7963616c6c436c69656e743a206d69736d61746368206465737420636c6960008201527f656e740000000000000000000000000000000000000000000000000000000000602082015250565b6000613e276023836129e7565b9150613e3282613dcb565b604082019050919050565b60006020820190508181036000830152613e5681613e1a565b9050919050565b7f416e7963616c6c436c69656e743a206d69736d61746368206465737420746f6b60008201527f656e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613eb96022836129e7565b9150613ec482613e5d565b604082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613f4b602a836129e7565b9150613f5682613eef565b604082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613fdd6026836129e7565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614049601d836129e7565b915061405482614013565b602082019050919050565b600060208201905081810360008301526140788161403c565b9050919050565b600081519050919050565b60006140958261407f565b61409f81856129e7565b93506140af818560208601612eee565b6140b881612f21565b840191505092915050565b600060208201905081810360008301526140dd818461408a565b90509291505056fea2646970667358221220232a47e365b015bc0b7836c4f8944bd0d25ac50fc28f8275599ef3162807395d64736f6c634300080a0033000000000000000000000000d71cb0c4a82c36312b5b83c43f351b882756957f000000000000000000000000d7c295e399ca928a3a14b01d760e794f1adf8990

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

000000000000000000000000d71cb0c4a82c36312b5b83c43f351b882756957f000000000000000000000000d7c295e399ca928a3a14b01d760e794f1adf8990

-----Decoded View---------------
Arg [0] : _admin (address): 0xd71cb0c4a82c36312b5b83c43f351b882756957f
Arg [1] : _callProxy (address): 0xd7c295e399ca928a3a14b01d760e794f1adf8990

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d71cb0c4a82c36312b5b83c43f351b882756957f
Arg [1] : 000000000000000000000000d7c295e399ca928a3a14b01d760e794f1adf8990


Deployed ByteCode Sourcemap

23295:7385:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22685:9;;;;;;;;;;;22671:23;;:10;:23;;;22663:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;23295:7385;;;;;23424:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23588:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19626:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22759:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22062:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20826:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24391:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20265:226;;;;;;;;;;;;;:::i;:::-;;22174:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23507:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22981:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20051:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27001:1805;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;18569:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19070:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23715:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22093:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20739:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24827:2064;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19599:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23424:76;23469:31;23424:76;:::o;23588:78::-;23634:32;23588:78;:::o;19626:27::-;;;;;;;;;;;;;:::o;22759:214::-;19990:5;;;;;;;;;;;19976:19;;:10;:19;;;19968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;22861:1:::1;22839:24;;:10;:24;;;;22831:33;;;::::0;::::1;;22887:10;22875:9;;:22;;;;;;;;;;;;;;;;;;22942:9;;;;;;;;;;;22926:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22908:15;;:55;;;;;;;;;;;;;;;;;;22759:214:::0;:::o;22062:24::-;;;;;;;;;;;;;:::o;20826:83::-;19990:5;;;;;;;;;;;19976:19;;:10;:19;;;19968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20887:14:::1;20896:4;20887:8;:14::i;:::-;20826:83:::0;:::o;24391:347::-;19990:5;;;;;;;;;;;19976:19;;:10;:19;;;19968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24582:9:::1;;:16;;24563:8;;:15;;:35;24555:44;;;::::0;::::1;;24615:9;24610:121;24634:8;;:15;;24630:1;:19;24610:121;;;24707:9;;24717:1;24707:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24671:10;:20;24682:8;24671:20;;;;;;;;;;;;;;;:33;24692:8;;24701:1;24692:11;;;;;;;:::i;:::-;;;;;;;;24671:33;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;24651:3;;;;;:::i;:::-;;;;24610:121;;;;24391:347:::0;;;;;:::o;20265:226::-;20329:12;;;;;;;;;;;20315:26;;:10;:26;;;20307:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20403:12;;;;;;;;;;;20385:31;;20396:5;;;;;;;;;;;20385:31;;;;;;;;;;;;20435:12;;;;;;;;;;;20427:5;;:20;;;;;;;;;;;;;;;;;;20481:1;20458:12;;:25;;;;;;;;;;;;;;;;;;20265:226::o;22174:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;23507:74::-;23551:30;23507:74;:::o;22981:307::-;19990:5;;;;;;;;;;;19976:19;;:10;:19;;;19968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;23145:6:::1;;:13;;23125:9;;:16;;:33;23117:42;;;::::0;::::1;;23175:9;23170:111;23194:9;;:16;;23190:1;:20;23170:111;;;23260:6;;23267:1;23260:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23232:11;:25;23244:9;;23254:1;23244:12;;;;;;;:::i;:::-;;;;;;;;23232:25;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23212:3;;;;;:::i;:::-;;;;23170:111;;;;22981:307:::0;;;;:::o;20051:206::-;19990:5;;;;;;;;;;;19976:19;;:10;:19;;;19968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20144:1:::1;20126:20;;:6;:20;;;;20118:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20201:6;20186:12;;:21;;;;;;;;;;;;;;;;;;20242:6;20223:26;;20235:5;;;;;;;;;;;20223:26;;;;;;;;;;;;20051:206:::0;:::o;27001:1805::-;27160:12;27174:19;22304:15;;;;;;;;;;;22290:29;;:10;:29;;;22282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23551:30:::1;18764:12;18771:4;18764:6;:12::i;:::-;18763:13;:40;;;;;18781:22;18610:4;18788:14:::0;::::1;18781:6;:22::i;:::-;18780:23;18763:40;18741:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;27211:15:::2;27236:4;;:8;;27242:1;27236:8;;;;;;;:::i;:::-;27229:16;;;;;:::i;:::-;27211:34;;27272:24;;;27260:36;;;:8;:36;;;;27256:1515;;;27332:16;27367::::0;27402:14:::2;27435::::0;27468:16:::2;27569:4;;27574:1;27569:8;;;;;;;;;:::i;:::-;27540:125;;;;;;;:::i;:::-;27313:352;;;;;;;;;;;27682:16;27717:9;;;;;;;;;;;27701:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27682:56;;27754:12;27768:19:::0;27809:8:::2;27792:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27753:75;;;;;27879:4;27851:32;;:11;:24;27863:11;27851:24;;;;;;;;;;;;;;;;;;;;;:32;;;27843:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27976:8;27939:45;;:10;:20;27950:8;27939:20;;;;;;;;;;;;;;;:33;27960:11;27939:33;;;;;;;;;;;;;;;;;;;;;:45;;;27931:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;28042:19;28064:24;28079:8;28064:14;:24::i;:::-;28042:46;;28132:1;28109:25;;:11;:25;;;;:82;;;;;28184:6;28146:8;28139:26;;;28174:4;28139:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;28109:82;28105:284;;;28212:66;28254:4;28261:8;28271:6;28219:8;28212:33;;;;:66;;;;;;:::i;:::-;28105:284;;;28340:8;28326:28;;;28355:8;28365:6;28326:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28319:54;;;;:::i;:::-;;28105:284;28438:8;28410:58;;28430:6;28410:58;;28420:8;28410:58;;;28448:6;28456:11;28410:58;;;;;;;:::i;:::-;;;;;;;;27298:1182;;;;;;;;;27256:1515;;;28502:10;28490:22;;:8;:22;;;;28486:285;;;28581:11;28594:18:::0;28627:4:::2;;28632:1;28627:8;;;;;;;;;:::i;:::-;28616:38;;;;;;;:::i;:::-;28580:74;;;;28669:23;28681:3;28686:5;28669:11;:23::i;:::-;28514:190;;28486:285;;;28733:5;28725:34;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;28486:285;27256:1515;28789:4;28781:17;;;;;;;;;;;::::0;::::2;;;;;18865:1;22364::::1;27001:1805:::0;;;;;:::o;18569:45::-;18610:4;18569:45;;;:::o;19070:109::-;19129:4;19153:12;:18;19166:4;19153:18;;;;;;;;;;;;;;;;;;;;;19146:25;;19070:109;;;:::o;23715:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22093:30::-;;;;;;;;;;;;;:::o;20739:79::-;19990:5;;;;;;;;;;;19976:19;;:10;:19;;;19968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20798:12:::1;20805:4;20798:6;:12::i;:::-;20739:79:::0;:::o;24827:2064::-;23469:31;18764:12;18771:4;18764:6;:12::i;:::-;18763:13;:40;;;;;18781:22;18610:4;18788:14;;18781:6;:22::i;:::-;18780:23;18763:40;18741:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;25041:18:::1;25062:11;:22;25074:9;25062:22;;;;;;;;;;;;;;;;;;;;;25041:43;;25125:1;25103:24;;:10;:24;;;;25095:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25174:16;25193:10;:17;25204:5;25193:17;;;;;;;;;;;;;;;:28;25211:9;25193:28;;;;;;;;;;;;;;;;;;;;;25174:47;;25260:1;25240:22;;:8;:22;;;;25232:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25308:22;25357:1:::0;25345:9:::1;:13;25341:96;;;25416:9;25392:21;:33;;;;:::i;:::-;25375:50;;25341:96;25449:19;25471:21;25486:5;25471:14;:21::i;:::-;25449:43;;25532:1;25509:25;;:11;:25;;;25505:528;;25551:19;25580:11;25573:29;;;25603:5;25573:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25551:58;;25626:63;25663:10;25675:5;25682:6;25633:11;25626:36;;;;:63;;;;;;:::i;:::-;25706:19;25735:11;25728:29;;;25758:5;25728:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25706:58;;25892:11;25878;:25;:57;;25934:1;25878:57;;;25920:11;25906;:25;;;;:::i;:::-;25878:57;25869:66;;25536:411;;25505:528;;;25989:5;25975:25;;;26001:10;26013:6;25975:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25968:53;;;;:::i;:::-;;25505:528;26045:17;26102:24;;;26141:5;26161:8;26184:6;26205:10;26230:8;26253:9;26065:208;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26045:228;;26300:9;;;;;;;;;;;26284:34;;;26326:9;26351:10;26376:4;26403;26423:9;26447:5;26284:179;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;26492:1;26480:9;:13;26476:332;;;26510:22;26535:21;26510:46;;26592:14;26575;:31;26571:226;;;26670:12;26687:10;:15;;26727:14;26710;:31;;;;:::i;:::-;26687:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26669:77;;;26773:7;26765:16;;;::::0;::::1;;26608:189;26571:226;26495:313;26476:332;26855:8;26825:58;;26843:10;26825:58;;26836:5;26825:58;;;26865:6;26873:9;26825:58;;;;;;;:::i;:::-;;;;;;;;25030:1861;;;;;24827:2064:::0;;;;;;:::o;19599:20::-;;;;;;;;;;;;;:::o;19334:141::-;19394:4;18949:12;18956:4;18949:6;:12::i;:::-;:38;;;;18965:22;18610:4;18972:14;;18965:6;:22::i;:::-;18949:38;18927:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;19432:5:::1;19411:12:::0;:18:::1;19424:4;19411:18;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;19453:14;19462:4;19453:14;;;;;;:::i;:::-;;;;;;;;19334:141:::0;;:::o;30311:366::-;30368:7;30389:12;30403:23;30430:5;:10;;30464;30441:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30430:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30388:88;;;;30491:7;:32;;;;;30522:1;30502:10;:17;:21;30491:32;30487:155;;;30541:19;30575:10;30564:33;;;;;;;;;;;;:::i;:::-;30540:57;;30619:11;30612:18;;;;;;;30487:155;30667:1;30652:17;;;;30311:366;;;;:::o;14821:248::-;14965:96;14985:5;15015:27;;;15044:4;15050:2;15054:5;14992:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14965:19;:96::i;:::-;14821:248;;;;:::o;28918:1385::-;23634:32;18764:12;18771:4;18764:6;:12::i;:::-;18763:13;:40;;;;;18781:22;18610:4;18788:14;;18781:6;:22::i;:::-;18780:23;18763:40;18741:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29048:16:::1;29083:9;;;;;;;;;;;29067:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29048:56;;29116:13;29152:8;29135:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29115:56;;;;29207:4;29190:22;;:5;:22;;;29182:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29273:15;29303:16:::0;29334::::1;29365:14:::0;29394:12:::1;29421:16:::0;29452:17:::1;29508:4;29483:117;;;;;;;;;;;;:::i;:::-;29258:342;;;;;;;;;;;;;;29633:24;;;29621:36;;;:8;:36;;;;29613:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29741:2;29715:28;;:11;:22;29727:9;29715:22;;;;;;;;;;;;;;;;;;;;;:28;;;29707:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29837:8;29802:43;;:10;:20;29813:8;29802:20;;;;;;;;;;;;;;;:31;29823:9;29802:31;;;;;;;;;;;;;;;;;;;;;:43;;;29794:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;29897:19;29919:24;29934:8;29919:14;:24::i;:::-;29897:46;;29983:1;29960:25;;:11;:25;;;;:82;;;;;30035:6;29997:8;29990:26;;;30025:4;29990:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;29960:82;29956:263;;;30059:65;30104:4;30111;30117:6;30066:11;30059:36;;;;:65;;;;;;:::i;:::-;29956:263;;;30178:8;30164:28;;;30193:4;30199:6;30164:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30157:50;;;;:::i;:::-;;29956:263;30267:8;30236:59;;30261:4;30236:59;;30251:8;30236:59;;;30277:6;30285:9;30236:59;;;;;;;:::i;:::-;;;;;;;;29037:1266;;;;;;;;;;28918:1385:::0;;;:::o;19187:139::-;19248:4;18764:12;18771:4;18764:6;:12::i;:::-;18763:13;:40;;;;;18781:22;18610:4;18788:14;;18781:6;:22::i;:::-;18780:23;18763:40;18741:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;19286:4:::1;19265:12;:18:::0;19278:4:::1;19265:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;19306:12;19313:4;19306:12;;;;;;:::i;:::-;;;;;;;;19187:139:::0;;:::o;17669:716::-;18093:23;18119:69;18147:4;18119:69;;;;;;;;;;;;;;;;;18127:5;18119:27;;;;:69;;;;;:::i;:::-;18093:95;;18223:1;18203:10;:17;:21;18199:179;;;18300:10;18289:30;;;;;;;;;;;;:::i;:::-;18281:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18199:179;17739:646;17669:716;;:::o;9307:229::-;9444:12;9476:52;9498:6;9506:4;9512:1;9515:12;9476:21;:52::i;:::-;9469:59;;9307:229;;;;;:::o;10427:510::-;10597:12;10655:5;10630:21;:30;;10622:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10722:18;10733:6;10722:10;:18::i;:::-;10714:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10788:12;10802:23;10829:6;:11;;10848:5;10855:4;10829:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10787:73;;;;10878:51;10895:7;10904:10;10916:12;10878:16;:51::i;:::-;10871:58;;;;10427:510;;;;;;:::o;6562:326::-;6622:4;6879:1;6857:7;:19;;;:23;6850:30;;6562:326;;;:::o;13113:762::-;13263:12;13292:7;13288:580;;;13323:10;13316:17;;;;13288:580;13457:1;13437:10;:17;:21;13433:424;;;13685:10;13679:17;13746:15;13733:10;13729:2;13725:19;13718:44;13433:424;13828:12;13821:20;;;;;;;;;;;:::i;:::-;;;;;;;;13113:762;;;;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:231::-;322:34;318:1;310:6;306:14;299:58;391:14;386:2;378:6;374:15;367:39;182:231;:::o;419:366::-;561:3;582:67;646:2;641:3;582:67;:::i;:::-;575:74;;658:93;747:3;658:93;:::i;:::-;776:2;771:3;767:12;760:19;;419:366;;;:::o;791:419::-;957:4;995:2;984:9;980:18;972:26;;1044:9;1038:4;1034:20;1030:1;1019:9;1015:17;1008:47;1072:131;1198:4;1072:131;:::i;:::-;1064:139;;791:419;;;:::o;1216:77::-;1253:7;1282:5;1271:16;;1216:77;;;:::o;1299:118::-;1386:24;1404:5;1386:24;:::i;:::-;1381:3;1374:37;1299:118;;:::o;1423:222::-;1516:4;1554:2;1543:9;1539:18;1531:26;;1567:71;1635:1;1624:9;1620:17;1611:6;1567:71;:::i;:::-;1423:222;;;;:::o;1651:126::-;1688:7;1728:42;1721:5;1717:54;1706:65;;1651:126;;;:::o;1783:96::-;1820:7;1849:24;1867:5;1849:24;:::i;:::-;1838:35;;1783:96;;;:::o;1885:118::-;1972:24;1990:5;1972:24;:::i;:::-;1967:3;1960:37;1885:118;;:::o;2009:222::-;2102:4;2140:2;2129:9;2125:18;2117:26;;2153:71;2221:1;2210:9;2206:17;2197:6;2153:71;:::i;:::-;2009:222;;;;:::o;2237:75::-;2270:6;2303:2;2297:9;2287:19;;2237:75;:::o;2318:117::-;2427:1;2424;2417:12;2441:117;2550:1;2547;2540:12;2564:122;2637:24;2655:5;2637:24;:::i;:::-;2630:5;2627:35;2617:63;;2676:1;2673;2666:12;2617:63;2564:122;:::o;2692:139::-;2738:5;2776:6;2763:20;2754:29;;2792:33;2819:5;2792:33;:::i;:::-;2692:139;;;;:::o;2837:329::-;2896:6;2945:2;2933:9;2924:7;2920:23;2916:32;2913:119;;;2951:79;;:::i;:::-;2913:119;3071:1;3096:53;3141:7;3132:6;3121:9;3117:22;3096:53;:::i;:::-;3086:63;;3042:117;2837:329;;;;:::o;3172:122::-;3245:24;3263:5;3245:24;:::i;:::-;3238:5;3235:35;3225:63;;3284:1;3281;3274:12;3225:63;3172:122;:::o;3300:139::-;3346:5;3384:6;3371:20;3362:29;;3400:33;3427:5;3400:33;:::i;:::-;3300:139;;;;:::o;3445:329::-;3504:6;3553:2;3541:9;3532:7;3528:23;3524:32;3521:119;;;3559:79;;:::i;:::-;3521:119;3679:1;3704:53;3749:7;3740:6;3729:9;3725:22;3704:53;:::i;:::-;3694:63;;3650:117;3445:329;;;;:::o;3780:117::-;3889:1;3886;3879:12;3903:117;4012:1;4009;4002:12;4026:117;4135:1;4132;4125:12;4166:568;4239:8;4249:6;4299:3;4292:4;4284:6;4280:17;4276:27;4266:122;;4307:79;;:::i;:::-;4266:122;4420:6;4407:20;4397:30;;4450:18;4442:6;4439:30;4436:117;;;4472:79;;:::i;:::-;4436:117;4586:4;4578:6;4574:17;4562:29;;4640:3;4632:4;4624:6;4620:17;4610:8;4606:32;4603:41;4600:128;;;4647:79;;:::i;:::-;4600:128;4166:568;;;;;:::o;4757:::-;4830:8;4840:6;4890:3;4883:4;4875:6;4871:17;4867:27;4857:122;;4898:79;;:::i;:::-;4857:122;5011:6;4998:20;4988:30;;5041:18;5033:6;5030:30;5027:117;;;5063:79;;:::i;:::-;5027:117;5177:4;5169:6;5165:17;5153:29;;5231:3;5223:4;5215:6;5211:17;5201:8;5197:32;5194:41;5191:128;;;5238:79;;:::i;:::-;5191:128;4757:568;;;;;:::o;5331:1079::-;5462:6;5470;5478;5486;5494;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5669:1;5694:53;5739:7;5730:6;5719:9;5715:22;5694:53;:::i;:::-;5684:63;;5640:117;5824:2;5813:9;5809:18;5796:32;5855:18;5847:6;5844:30;5841:117;;;5877:79;;:::i;:::-;5841:117;5990:80;6062:7;6053:6;6042:9;6038:22;5990:80;:::i;:::-;5972:98;;;;5767:313;6147:2;6136:9;6132:18;6119:32;6178:18;6170:6;6167:30;6164:117;;;6200:79;;:::i;:::-;6164:117;6313:80;6385:7;6376:6;6365:9;6361:22;6313:80;:::i;:::-;6295:98;;;;6090:313;5331:1079;;;;;;;;:::o;6416:77::-;6453:7;6482:5;6471:16;;6416:77;;;:::o;6499:122::-;6572:24;6590:5;6572:24;:::i;:::-;6565:5;6562:35;6552:63;;6611:1;6608;6601:12;6552:63;6499:122;:::o;6627:139::-;6673:5;6711:6;6698:20;6689:29;;6727:33;6754:5;6727:33;:::i;:::-;6627:139;;;;:::o;6772:329::-;6831:6;6880:2;6868:9;6859:7;6855:23;6851:32;6848:119;;;6886:79;;:::i;:::-;6848:119;7006:1;7031:53;7076:7;7067:6;7056:9;7052:22;7031:53;:::i;:::-;7021:63;;6977:117;6772:329;;;;:::o;7107:934::-;7229:6;7237;7245;7253;7302:2;7290:9;7281:7;7277:23;7273:32;7270:119;;;7308:79;;:::i;:::-;7270:119;7456:1;7445:9;7441:17;7428:31;7486:18;7478:6;7475:30;7472:117;;;7508:79;;:::i;:::-;7472:117;7621:80;7693:7;7684:6;7673:9;7669:22;7621:80;:::i;:::-;7603:98;;;;7399:312;7778:2;7767:9;7763:18;7750:32;7809:18;7801:6;7798:30;7795:117;;;7831:79;;:::i;:::-;7795:117;7944:80;8016:7;8007:6;7996:9;7992:22;7944:80;:::i;:::-;7926:98;;;;7721:313;7107:934;;;;;;;:::o;8060:552::-;8117:8;8127:6;8177:3;8170:4;8162:6;8158:17;8154:27;8144:122;;8185:79;;:::i;:::-;8144:122;8298:6;8285:20;8275:30;;8328:18;8320:6;8317:30;8314:117;;;8350:79;;:::i;:::-;8314:117;8464:4;8456:6;8452:17;8440:29;;8518:3;8510:4;8502:6;8498:17;8488:8;8484:32;8481:41;8478:128;;;8525:79;;:::i;:::-;8478:128;8060:552;;;;;:::o;8618:527::-;8688:6;8696;8745:2;8733:9;8724:7;8720:23;8716:32;8713:119;;;8751:79;;:::i;:::-;8713:119;8899:1;8888:9;8884:17;8871:31;8929:18;8921:6;8918:30;8915:117;;;8951:79;;:::i;:::-;8915:117;9064:64;9120:7;9111:6;9100:9;9096:22;9064:64;:::i;:::-;9046:82;;;;8842:296;8618:527;;;;;:::o;9151:90::-;9185:7;9228:5;9221:13;9214:21;9203:32;;9151:90;;;:::o;9247:109::-;9328:21;9343:5;9328:21;:::i;:::-;9323:3;9316:34;9247:109;;:::o;9362:98::-;9413:6;9447:5;9441:12;9431:22;;9362:98;;;:::o;9466:168::-;9549:11;9583:6;9578:3;9571:19;9623:4;9618:3;9614:14;9599:29;;9466:168;;;;:::o;9640:307::-;9708:1;9718:113;9732:6;9729:1;9726:13;9718:113;;;9817:1;9812:3;9808:11;9802:18;9798:1;9793:3;9789:11;9782:39;9754:2;9751:1;9747:10;9742:15;;9718:113;;;9849:6;9846:1;9843:13;9840:101;;;9929:1;9920:6;9915:3;9911:16;9904:27;9840:101;9689:258;9640:307;;;:::o;9953:102::-;9994:6;10045:2;10041:7;10036:2;10029:5;10025:14;10021:28;10011:38;;9953:102;;;:::o;10061:360::-;10147:3;10175:38;10207:5;10175:38;:::i;:::-;10229:70;10292:6;10287:3;10229:70;:::i;:::-;10222:77;;10308:52;10353:6;10348:3;10341:4;10334:5;10330:16;10308:52;:::i;:::-;10385:29;10407:6;10385:29;:::i;:::-;10380:3;10376:39;10369:46;;10151:270;10061:360;;;;:::o;10427:407::-;10560:4;10598:2;10587:9;10583:18;10575:26;;10611:65;10673:1;10662:9;10658:17;10649:6;10611:65;:::i;:::-;10723:9;10717:4;10713:20;10708:2;10697:9;10693:18;10686:48;10751:76;10822:4;10813:6;10751:76;:::i;:::-;10743:84;;10427:407;;;;;:::o;10840:210::-;10927:4;10965:2;10954:9;10950:18;10942:26;;10978:65;11040:1;11029:9;11025:17;11016:6;10978:65;:::i;:::-;10840:210;;;;:::o;11056:474::-;11124:6;11132;11181:2;11169:9;11160:7;11156:23;11152:32;11149:119;;;11187:79;;:::i;:::-;11149:119;11307:1;11332:53;11377:7;11368:6;11357:9;11353:22;11332:53;:::i;:::-;11322:63;;11278:117;11434:2;11460:53;11505:7;11496:6;11485:9;11481:22;11460:53;:::i;:::-;11450:63;;11405:118;11056:474;;;;;:::o;11536:911::-;11631:6;11639;11647;11655;11663;11712:3;11700:9;11691:7;11687:23;11683:33;11680:120;;;11719:79;;:::i;:::-;11680:120;11839:1;11864:53;11909:7;11900:6;11889:9;11885:22;11864:53;:::i;:::-;11854:63;;11810:117;11966:2;11992:53;12037:7;12028:6;12017:9;12013:22;11992:53;:::i;:::-;11982:63;;11937:118;12094:2;12120:53;12165:7;12156:6;12145:9;12141:22;12120:53;:::i;:::-;12110:63;;12065:118;12222:2;12248:53;12293:7;12284:6;12273:9;12269:22;12248:53;:::i;:::-;12238:63;;12193:118;12350:3;12377:53;12422:7;12413:6;12402:9;12398:22;12377:53;:::i;:::-;12367:63;;12321:119;11536:911;;;;;;;;:::o;12453:173::-;12593:25;12589:1;12581:6;12577:14;12570:49;12453:173;:::o;12632:366::-;12774:3;12795:67;12859:2;12854:3;12795:67;:::i;:::-;12788:74;;12871:93;12960:3;12871:93;:::i;:::-;12989:2;12984:3;12980:12;12973:19;;12632:366;;;:::o;13004:419::-;13170:4;13208:2;13197:9;13193:18;13185:26;;13257:9;13251:4;13247:20;13243:1;13232:9;13228:17;13221:47;13285:131;13411:4;13285:131;:::i;:::-;13277:139;;13004:419;;;:::o;13429:143::-;13486:5;13517:6;13511:13;13502:22;;13533:33;13560:5;13533:33;:::i;:::-;13429:143;;;;:::o;13578:351::-;13648:6;13697:2;13685:9;13676:7;13672:23;13668:32;13665:119;;;13703:79;;:::i;:::-;13665:119;13823:1;13848:64;13904:7;13895:6;13884:9;13880:22;13848:64;:::i;:::-;13838:74;;13794:128;13578:351;;;;:::o;13935:180::-;13983:77;13980:1;13973:88;14080:4;14077:1;14070:15;14104:4;14101:1;14094:15;14121:180;14169:77;14166:1;14159:88;14266:4;14263:1;14256:15;14290:4;14287:1;14280:15;14307:233;14346:3;14369:24;14387:5;14369:24;:::i;:::-;14360:33;;14415:66;14408:5;14405:77;14402:103;;;14485:18;;:::i;:::-;14402:103;14532:1;14525:5;14521:13;14514:20;;14307:233;;;:::o;14546:173::-;14686:25;14682:1;14674:6;14670:14;14663:49;14546:173;:::o;14725:366::-;14867:3;14888:67;14952:2;14947:3;14888:67;:::i;:::-;14881:74;;14964:93;15053:3;14964:93;:::i;:::-;15082:2;15077:3;15073:12;15066:19;;14725:366;;;:::o;15097:419::-;15263:4;15301:2;15290:9;15286:18;15278:26;;15350:9;15344:4;15340:20;15336:1;15325:9;15321:17;15314:47;15378:131;15504:4;15378:131;:::i;:::-;15370:139;;15097:419;;;:::o;15522:174::-;15662:26;15658:1;15650:6;15646:14;15639:50;15522:174;:::o;15702:366::-;15844:3;15865:67;15929:2;15924:3;15865:67;:::i;:::-;15858:74;;15941:93;16030:3;15941:93;:::i;:::-;16059:2;16054:3;16050:12;16043:19;;15702:366;;;:::o;16074:419::-;16240:4;16278:2;16267:9;16263:18;16255:26;;16327:9;16321:4;16317:20;16313:1;16302:9;16298:17;16291:47;16355:131;16481:4;16355:131;:::i;:::-;16347:139;;16074:419;;;:::o;16499:179::-;16639:31;16635:1;16627:6;16623:14;16616:55;16499:179;:::o;16684:366::-;16826:3;16847:67;16911:2;16906:3;16847:67;:::i;:::-;16840:74;;16923:93;17012:3;16923:93;:::i;:::-;17041:2;17036:3;17032:12;17025:19;;16684:366;;;:::o;17056:419::-;17222:4;17260:2;17249:9;17245:18;17237:26;;17309:9;17303:4;17299:20;17295:1;17284:9;17280:17;17273:47;17337:131;17463:4;17337:131;:::i;:::-;17329:139;;17056:419;;;:::o;17481:173::-;17621:25;17617:1;17609:6;17605:14;17598:49;17481:173;:::o;17660:366::-;17802:3;17823:67;17887:2;17882:3;17823:67;:::i;:::-;17816:74;;17899:93;17988:3;17899:93;:::i;:::-;18017:2;18012:3;18008:12;18001:19;;17660:366;;;:::o;18032:419::-;18198:4;18236:2;18225:9;18221:18;18213:26;;18285:9;18279:4;18275:20;18271:1;18260:9;18256:17;18249:47;18313:131;18439:4;18313:131;:::i;:::-;18305:139;;18032:419;;;:::o;18457:117::-;18566:1;18563;18556:12;18580:117;18689:1;18686;18679:12;18703:469;18808:9;18819;18857:8;18845:10;18842:24;18839:111;;;18869:79;;:::i;:::-;18839:111;18975:6;18965:8;18962:20;18959:107;;;18985:79;;:::i;:::-;18959:107;19116:1;19104:10;19100:18;19092:6;19088:31;19075:44;;19155:10;19145:8;19141:25;19128:38;;18703:469;;;;;;;:::o;19178:96::-;19236:6;19264:3;19254:13;;19178:96;;;;:::o;19372:149::-;19408:7;19448:66;19441:5;19437:78;19426:89;;19372:149;;;:::o;19527:107::-;19571:8;19621:5;19615:4;19611:16;19590:37;;19527:107;;;;:::o;19640:548::-;19730:5;19761:45;19802:3;19795:5;19761:45;:::i;:::-;19831:5;19855:40;19885:8;19872:22;19855:40;:::i;:::-;19846:49;;19919:1;19911:6;19908:13;19905:276;;;19989:168;20073:66;20043:6;20040:1;20036:14;20033:1;20029:22;19989:168;:::i;:::-;19966:5;19945:226;19936:235;;19905:276;19736:452;;19640:548;;;;:::o;20194:104::-;20239:7;20268:24;20286:5;20268:24;:::i;:::-;20257:35;;20194:104;;;:::o;20304:138::-;20385:32;20411:5;20385:32;:::i;:::-;20378:5;20375:43;20365:71;;20432:1;20429;20422:12;20365:71;20304:138;:::o;20448:155::-;20502:5;20540:6;20527:20;20518:29;;20556:41;20591:5;20556:41;:::i;:::-;20448:155;;;;:::o;20609:1121::-;20745:6;20753;20761;20769;20777;20785;20834:3;20822:9;20813:7;20809:23;20805:33;20802:120;;;20841:79;;:::i;:::-;20802:120;20961:1;20986:61;21039:7;21030:6;21019:9;21015:22;20986:61;:::i;:::-;20976:71;;20932:125;21096:2;21122:61;21175:7;21166:6;21155:9;21151:22;21122:61;:::i;:::-;21112:71;;21067:126;21232:2;21258:53;21303:7;21294:6;21283:9;21279:22;21258:53;:::i;:::-;21248:63;;21203:118;21360:2;21386:61;21439:7;21430:6;21419:9;21415:22;21386:61;:::i;:::-;21376:71;;21331:126;21496:3;21523:61;21576:7;21567:6;21556:9;21552:22;21523:61;:::i;:::-;21513:71;;21467:127;21633:3;21660:53;21705:7;21696:6;21685:9;21681:22;21660:53;:::i;:::-;21650:63;;21604:119;20609:1121;;;;;;;;:::o;21736:143::-;21793:5;21824:6;21818:13;21809:22;;21840:33;21867:5;21840:33;:::i;:::-;21736:143;;;;:::o;21885:663::-;21973:6;21981;21989;22038:2;22026:9;22017:7;22013:23;22009:32;22006:119;;;22044:79;;:::i;:::-;22006:119;22164:1;22189:64;22245:7;22236:6;22225:9;22221:22;22189:64;:::i;:::-;22179:74;;22135:128;22302:2;22328:64;22384:7;22375:6;22364:9;22360:22;22328:64;:::i;:::-;22318:74;;22273:129;22441:2;22467:64;22523:7;22514:6;22503:9;22499:22;22467:64;:::i;:::-;22457:74;;22412:129;21885:663;;;;;:::o;22554:178::-;22694:30;22690:1;22682:6;22678:14;22671:54;22554:178;:::o;22738:366::-;22880:3;22901:67;22965:2;22960:3;22901:67;:::i;:::-;22894:74;;22977:93;23066:3;22977:93;:::i;:::-;23095:2;23090:3;23086:12;23079:19;;22738:366;;;:::o;23110:419::-;23276:4;23314:2;23303:9;23299:18;23291:26;;23363:9;23357:4;23353:20;23349:1;23338:9;23334:17;23327:47;23391:131;23517:4;23391:131;:::i;:::-;23383:139;;23110:419;;;:::o;23535:223::-;23675:34;23671:1;23663:6;23659:14;23652:58;23744:6;23739:2;23731:6;23727:15;23720:31;23535:223;:::o;23764:366::-;23906:3;23927:67;23991:2;23986:3;23927:67;:::i;:::-;23920:74;;24003:93;24092:3;24003:93;:::i;:::-;24121:2;24116:3;24112:12;24105:19;;23764:366;;;:::o;24136:419::-;24302:4;24340:2;24329:9;24325:18;24317:26;;24389:9;24383:4;24379:20;24375:1;24364:9;24360:17;24353:47;24417:131;24543:4;24417:131;:::i;:::-;24409:139;;24136:419;;;:::o;24561:351::-;24631:6;24680:2;24668:9;24659:7;24655:23;24651:32;24648:119;;;24686:79;;:::i;:::-;24648:119;24806:1;24831:64;24887:7;24878:6;24867:9;24863:22;24831:64;:::i;:::-;24821:74;;24777:128;24561:351;;;;:::o;24918:118::-;25005:24;25023:5;25005:24;:::i;:::-;25000:3;24993:37;24918:118;;:::o;25042:332::-;25163:4;25201:2;25190:9;25186:18;25178:26;;25214:71;25282:1;25271:9;25267:17;25258:6;25214:71;:::i;:::-;25295:72;25363:2;25352:9;25348:18;25339:6;25295:72;:::i;:::-;25042:332;;;;;:::o;25380:116::-;25450:21;25465:5;25450:21;:::i;:::-;25443:5;25440:32;25430:60;;25486:1;25483;25476:12;25430:60;25380:116;:::o;25502:137::-;25556:5;25587:6;25581:13;25572:22;;25603:30;25627:5;25603:30;:::i;:::-;25502:137;;;;:::o;25645:345::-;25712:6;25761:2;25749:9;25740:7;25736:23;25732:32;25729:119;;;25767:79;;:::i;:::-;25729:119;25887:1;25912:61;25965:7;25956:6;25945:9;25941:22;25912:61;:::i;:::-;25902:71;;25858:125;25645:345;;;;:::o;25996:180::-;26044:77;26041:1;26034:88;26141:4;26138:1;26131:15;26165:4;26162:1;26155:15;26182:332;26303:4;26341:2;26330:9;26326:18;26318:26;;26354:71;26422:1;26411:9;26407:17;26398:6;26354:71;:::i;:::-;26435:72;26503:2;26492:9;26488:18;26479:6;26435:72;:::i;:::-;26182:332;;;;;:::o;26520:117::-;26629:1;26626;26619:12;26643:180;26691:77;26688:1;26681:88;26788:4;26785:1;26778:15;26812:4;26809:1;26802:15;26829:281;26912:27;26934:4;26912:27;:::i;:::-;26904:6;26900:40;27042:6;27030:10;27027:22;27006:18;26994:10;26991:34;26988:62;26985:88;;;27053:18;;:::i;:::-;26985:88;27093:10;27089:2;27082:22;26872:238;26829:281;;:::o;27116:129::-;27150:6;27177:20;;:::i;:::-;27167:30;;27206:33;27234:4;27226:6;27206:33;:::i;:::-;27116:129;;;:::o;27251:307::-;27312:4;27402:18;27394:6;27391:30;27388:56;;;27424:18;;:::i;:::-;27388:56;27462:29;27484:6;27462:29;:::i;:::-;27454:37;;27546:4;27540;27536:15;27528:23;;27251:307;;;:::o;27564:154::-;27648:6;27643:3;27638;27625:30;27710:1;27701:6;27696:3;27692:16;27685:27;27564:154;;;:::o;27724:410::-;27801:5;27826:65;27842:48;27883:6;27842:48;:::i;:::-;27826:65;:::i;:::-;27817:74;;27914:6;27907:5;27900:21;27952:4;27945:5;27941:16;27990:3;27981:6;27976:3;27972:16;27969:25;27966:112;;;27997:79;;:::i;:::-;27966:112;28087:41;28121:6;28116:3;28111;28087:41;:::i;:::-;27807:327;27724:410;;;;;:::o;28153:338::-;28208:5;28257:3;28250:4;28242:6;28238:17;28234:27;28224:122;;28265:79;;:::i;:::-;28224:122;28382:6;28369:20;28407:78;28481:3;28473:6;28466:4;28458:6;28454:17;28407:78;:::i;:::-;28398:87;;28214:277;28153:338;;;;:::o;28497:668::-;28582:6;28590;28639:2;28627:9;28618:7;28614:23;28610:32;28607:119;;;28645:79;;:::i;:::-;28607:119;28765:1;28790:61;28843:7;28834:6;28823:9;28819:22;28790:61;:::i;:::-;28780:71;;28736:125;28928:2;28917:9;28913:18;28900:32;28959:18;28951:6;28948:30;28945:117;;;28981:79;;:::i;:::-;28945:117;29086:62;29140:7;29131:6;29120:9;29116:22;29086:62;:::i;:::-;29076:72;;28871:287;28497:668;;;;;:::o;29171:179::-;29311:31;29307:1;29299:6;29295:14;29288:55;29171:179;:::o;29356:366::-;29498:3;29519:67;29583:2;29578:3;29519:67;:::i;:::-;29512:74;;29595:93;29684:3;29595:93;:::i;:::-;29713:2;29708:3;29704:12;29697:19;;29356:366;;;:::o;29728:419::-;29894:4;29932:2;29921:9;29917:18;29909:26;;29981:9;29975:4;29971:20;29967:1;29956:9;29952:17;29945:47;30009:131;30135:4;30009:131;:::i;:::-;30001:139;;29728:419;;;:::o;30153:178::-;30293:30;30289:1;30281:6;30277:14;30270:54;30153:178;:::o;30337:366::-;30479:3;30500:67;30564:2;30559:3;30500:67;:::i;:::-;30493:74;;30576:93;30665:3;30576:93;:::i;:::-;30694:2;30689:3;30685:12;30678:19;;30337:366;;;:::o;30709:419::-;30875:4;30913:2;30902:9;30898:18;30890:26;;30962:9;30956:4;30952:20;30948:1;30937:9;30933:17;30926:47;30990:131;31116:4;30990:131;:::i;:::-;30982:139;;30709:419;;;:::o;31134:191::-;31174:4;31194:20;31212:1;31194:20;:::i;:::-;31189:25;;31228:20;31246:1;31228:20;:::i;:::-;31223:25;;31267:1;31264;31261:8;31258:34;;;31272:18;;:::i;:::-;31258:34;31317:1;31314;31310:9;31302:17;;31134:191;;;;:::o;31331:775::-;31564:4;31602:3;31591:9;31587:19;31579:27;;31616:71;31684:1;31673:9;31669:17;31660:6;31616:71;:::i;:::-;31697:72;31765:2;31754:9;31750:18;31741:6;31697:72;:::i;:::-;31779;31847:2;31836:9;31832:18;31823:6;31779:72;:::i;:::-;31861;31929:2;31918:9;31914:18;31905:6;31861:72;:::i;:::-;31943:73;32011:3;32000:9;31996:19;31987:6;31943:73;:::i;:::-;32026;32094:3;32083:9;32079:19;32070:6;32026:73;:::i;:::-;31331:775;;;;;;;;;:::o;32112:751::-;32335:4;32373:3;32362:9;32358:19;32350:27;;32387:71;32455:1;32444:9;32440:17;32431:6;32387:71;:::i;:::-;32505:9;32499:4;32495:20;32490:2;32479:9;32475:18;32468:48;32533:76;32604:4;32595:6;32533:76;:::i;:::-;32525:84;;32619:72;32687:2;32676:9;32672:18;32663:6;32619:72;:::i;:::-;32701;32769:2;32758:9;32754:18;32745:6;32701:72;:::i;:::-;32783:73;32851:3;32840:9;32836:19;32827:6;32783:73;:::i;:::-;32112:751;;;;;;;;:::o;32869:147::-;32970:11;33007:3;32992:18;;32869:147;;;;:::o;33022:114::-;;:::o;33142:398::-;33301:3;33322:83;33403:1;33398:3;33322:83;:::i;:::-;33315:90;;33414:93;33503:3;33414:93;:::i;:::-;33532:1;33527:3;33523:11;33516:18;;33142:398;;;:::o;33546:379::-;33730:3;33752:147;33895:3;33752:147;:::i;:::-;33745:154;;33916:3;33909:10;;33546:379;;;:::o;33931:177::-;34071:29;34067:1;34059:6;34055:14;34048:53;33931:177;:::o;34114:366::-;34256:3;34277:67;34341:2;34336:3;34277:67;:::i;:::-;34270:74;;34353:93;34442:3;34353:93;:::i;:::-;34471:2;34466:3;34462:12;34455:19;;34114:366;;;:::o;34486:419::-;34652:4;34690:2;34679:9;34675:18;34667:26;;34739:9;34733:4;34729:20;34725:1;34714:9;34710:17;34703:47;34767:131;34893:4;34767:131;:::i;:::-;34759:139;;34486:419;;;:::o;34911:373::-;35015:3;35043:38;35075:5;35043:38;:::i;:::-;35097:88;35178:6;35173:3;35097:88;:::i;:::-;35090:95;;35194:52;35239:6;35234:3;35227:4;35220:5;35216:16;35194:52;:::i;:::-;35271:6;35266:3;35262:16;35255:23;;35019:265;34911:373;;;;:::o;35290:271::-;35420:3;35442:93;35531:3;35522:6;35442:93;:::i;:::-;35435:100;;35552:3;35545:10;;35290:271;;;;:::o;35567:159::-;35632:5;35663:6;35657:13;35648:22;;35679:41;35714:5;35679:41;:::i;:::-;35567:159;;;;:::o;35732:367::-;35810:6;35859:2;35847:9;35838:7;35834:23;35830:32;35827:119;;;35865:79;;:::i;:::-;35827:119;35985:1;36010:72;36074:7;36065:6;36054:9;36050:22;36010:72;:::i;:::-;36000:82;;35956:136;35732:367;;;;:::o;36105:442::-;36254:4;36292:2;36281:9;36277:18;36269:26;;36305:71;36373:1;36362:9;36358:17;36349:6;36305:71;:::i;:::-;36386:72;36454:2;36443:9;36439:18;36430:6;36386:72;:::i;:::-;36468;36536:2;36525:9;36521:18;36512:6;36468:72;:::i;:::-;36105:442;;;;;;:::o;36553:120::-;36625:23;36642:5;36625:23;:::i;:::-;36618:5;36615:34;36605:62;;36663:1;36660;36653:12;36605:62;36553:120;:::o;36679:141::-;36735:5;36766:6;36760:13;36751:22;;36782:32;36808:5;36782:32;:::i;:::-;36679:141;;;;:::o;36826:1353::-;36981:6;36989;36997;37005;37013;37021;37029;37078:3;37066:9;37057:7;37053:23;37049:33;37046:120;;;37085:79;;:::i;:::-;37046:120;37205:1;37230:63;37285:7;37276:6;37265:9;37261:22;37230:63;:::i;:::-;37220:73;;37176:127;37342:2;37368:72;37432:7;37423:6;37412:9;37408:22;37368:72;:::i;:::-;37358:82;;37313:137;37489:2;37515:72;37579:7;37570:6;37559:9;37555:22;37515:72;:::i;:::-;37505:82;;37460:137;37636:2;37662:64;37718:7;37709:6;37698:9;37694:22;37662:64;:::i;:::-;37652:74;;37607:129;37775:3;37802:72;37866:7;37857:6;37846:9;37842:22;37802:72;:::i;:::-;37792:82;;37746:138;37923:3;37950:72;38014:7;38005:6;37994:9;37990:22;37950:72;:::i;:::-;37940:82;;37894:138;38071:3;38098:64;38154:7;38145:6;38134:9;38130:22;38098:64;:::i;:::-;38088:74;;38042:130;36826:1353;;;;;;;;;;:::o;38185:221::-;38325:34;38321:1;38313:6;38309:14;38302:58;38394:4;38389:2;38381:6;38377:15;38370:29;38185:221;:::o;38412:366::-;38554:3;38575:67;38639:2;38634:3;38575:67;:::i;:::-;38568:74;;38651:93;38740:3;38651:93;:::i;:::-;38769:2;38764:3;38760:12;38753:19;;38412:366;;;:::o;38784:419::-;38950:4;38988:2;38977:9;38973:18;38965:26;;39037:9;39031:4;39027:20;39023:1;39012:9;39008:17;39001:47;39065:131;39191:4;39065:131;:::i;:::-;39057:139;;38784:419;;;:::o;39209:222::-;39349:34;39345:1;39337:6;39333:14;39326:58;39418:5;39413:2;39405:6;39401:15;39394:30;39209:222;:::o;39437:366::-;39579:3;39600:67;39664:2;39659:3;39600:67;:::i;:::-;39593:74;;39676:93;39765:3;39676:93;:::i;:::-;39794:2;39789:3;39785:12;39778:19;;39437:366;;;:::o;39809:419::-;39975:4;40013:2;40002:9;39998:18;39990:26;;40062:9;40056:4;40052:20;40048:1;40037:9;40033:17;40026:47;40090:131;40216:4;40090:131;:::i;:::-;40082:139;;39809:419;;;:::o;40234:221::-;40374:34;40370:1;40362:6;40358:14;40351:58;40443:4;40438:2;40430:6;40426:15;40419:29;40234:221;:::o;40461:366::-;40603:3;40624:67;40688:2;40683:3;40624:67;:::i;:::-;40617:74;;40700:93;40789:3;40700:93;:::i;:::-;40818:2;40813:3;40809:12;40802:19;;40461:366;;;:::o;40833:419::-;40999:4;41037:2;41026:9;41022:18;41014:26;;41086:9;41080:4;41076:20;41072:1;41061:9;41057:17;41050:47;41114:131;41240:4;41114:131;:::i;:::-;41106:139;;40833:419;;;:::o;41258:229::-;41398:34;41394:1;41386:6;41382:14;41375:58;41467:12;41462:2;41454:6;41450:15;41443:37;41258:229;:::o;41493:366::-;41635:3;41656:67;41720:2;41715:3;41656:67;:::i;:::-;41649:74;;41732:93;41821:3;41732:93;:::i;:::-;41850:2;41845:3;41841:12;41834:19;;41493:366;;;:::o;41865:419::-;42031:4;42069:2;42058:9;42054:18;42046:26;;42118:9;42112:4;42108:20;42104:1;42093:9;42089:17;42082:47;42146:131;42272:4;42146:131;:::i;:::-;42138:139;;41865:419;;;:::o;42290:225::-;42430:34;42426:1;42418:6;42414:14;42407:58;42499:8;42494:2;42486:6;42482:15;42475:33;42290:225;:::o;42521:366::-;42663:3;42684:67;42748:2;42743:3;42684:67;:::i;:::-;42677:74;;42760:93;42849:3;42760:93;:::i;:::-;42878:2;42873:3;42869:12;42862:19;;42521:366;;;:::o;42893:419::-;43059:4;43097:2;43086:9;43082:18;43074:26;;43146:9;43140:4;43136:20;43132:1;43121:9;43117:17;43110:47;43174:131;43300:4;43174:131;:::i;:::-;43166:139;;42893:419;;;:::o;43318:179::-;43458:31;43454:1;43446:6;43442:14;43435:55;43318:179;:::o;43503:366::-;43645:3;43666:67;43730:2;43725:3;43666:67;:::i;:::-;43659:74;;43742:93;43831:3;43742:93;:::i;:::-;43860:2;43855:3;43851:12;43844:19;;43503:366;;;:::o;43875:419::-;44041:4;44079:2;44068:9;44064:18;44056:26;;44128:9;44122:4;44118:20;44114:1;44103:9;44099:17;44092:47;44156:131;44282:4;44156:131;:::i;:::-;44148:139;;43875:419;;;:::o;44300:99::-;44352:6;44386:5;44380:12;44370:22;;44300:99;;;:::o;44405:364::-;44493:3;44521:39;44554:5;44521:39;:::i;:::-;44576:71;44640:6;44635:3;44576:71;:::i;:::-;44569:78;;44656:52;44701:6;44696:3;44689:4;44682:5;44678:16;44656:52;:::i;:::-;44733:29;44755:6;44733:29;:::i;:::-;44728:3;44724:39;44717:46;;44497:272;44405:364;;;;:::o;44775:313::-;44888:4;44926:2;44915:9;44911:18;44903:26;;44975:9;44969:4;44965:20;44961:1;44950:9;44946:17;44939:47;45003:78;45076:4;45067:6;45003:78;:::i;:::-;44995:86;;44775:313;;;;:::o

Swarm Source

ipfs://232a47e365b015bc0b7836c4f8944bd0d25ac50fc28f8275599ef3162807395d
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading