Contract 0x273a4fFcEb31B8473D51051Ad2a2EdbB7Ac8Ce02 6

Contract Overview

Balance:
7.899701765816222046 Ether

Token:
Txn Hash
Method
Block
From
To
Value
0xb11445843b8e6a15fa7ac0ee074f9989bb4d9adec16d63fd5b13789c22683b960x4a578150114965172022-10-05 2:50:3253 days 16 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xf6bc6eb15172d120eb1e340a4d68608a8fd1c2428d1559301706f697115c0b540x4a578150114964722022-10-05 2:39:1753 days 16 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000199721.6565025
0x96ef93ea7f295fe01aefcbbada11115e26d3d3e56b304c6f7185a8a6a92a78a40x4a578150114964282022-10-05 2:28:1153 days 16 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000212251.76055107
0x15993f6e38b96b65f7336ca1b370fe91b736c64ed79af43cfbf4f1610ba1c8410x4a578150114963832022-10-05 2:16:5353 days 16 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000218831.8150011
0x462229e3985edd13e5b7da76b04b41fbbc574405947fe70bb572220c339f7ddb0x4a578150114963382022-10-05 2:05:3853 days 17 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xa96d684149fcfc71f4e3f47bce5aa1a7d9c1eec61b4a1c94935819218f58b8ac0x4a578150114962942022-10-05 1:54:3853 days 17 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.00020591.70773454
0x2954fc1e090d72014b53ef8f81be1f01e914542dffdc8a0364edabe5276392120x4a578150114962502022-10-05 1:43:3853 days 17 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.00020591.70773454
0xf8524ae9e33adf8ae96f6b6ff214c7764104c52ddf646d9deca117062008f4240x4a578150114962052022-10-05 1:32:2253 days 17 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000218831.8150011
0x3863fdfbadb06fc1c60f288160da96451808794754f93d68316ffd50a18ab7770x4a578150114961612022-10-05 1:21:2253 days 17 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000218831.8150011
0x79896f7effd0076caa32e2d3c55456ab9e2ab1a094a5df22bd1593b7a44a0e060x4a578150114961172022-10-05 1:10:2253 days 17 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000218831.815
0x714809ecb62be02ec29c89b551dcd15dd7c5a8d97dd1df4cd3ef19d61be521430x4a578150114960732022-10-05 0:59:2253 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000218831.815
0x4bb10ac2c59e917b227c2a10f9bf89e8093bd8a5e459b419928f17a105e3d53a0x4a578150114960282022-10-05 0:48:0753 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000218831.815
0x86e925adda132559eb1fe2dc257a4931f384f57bf2dc85e1b6e50149a86a07800x4a578150114959842022-10-05 0:37:0653 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0x43c315503e7ce31dd7de0982c8df2e7c545a24e838fa2caffa1cc1b10fd9dbb10x4a578150114959402022-10-05 0:26:0353 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0x82441a5b569c9ded00c1c2e40441b0ded481ced42889ebec2675e44968a122a20x4a578150114958952022-10-05 0:14:4753 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xa917bdfb9d9432637e810e28bd1ce2a4e75eb378c84cb08338a86c335a358e460x4a578150114958512022-10-05 0:03:3853 days 19 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65000001
0x6d2565751c54d73775884a13a8d223f5166effb26a08a447d2face2664e847940x4a578150114926202022-10-04 10:09:4054 days 8 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000519331.65000031
0x1b513ab693e626a56b14864d3b272fe6953c026ed51565603b28f51ff63cade90x4a578150114875122022-10-03 12:15:0555 days 6 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0x6b7c39ff9e7d51cb2868c80ae8ee5c18f0f8702cfd28a21085e1fa6d85b397e00x4a578150114875112022-10-03 12:14:5055 days 6 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xb60d45c0c24255a8032cb525c7e9796e6502c046953d45e9e9ba9d6c8f8699a40x4a578150114875102022-10-03 12:14:3555 days 6 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xa2da8d71eae91723b936ae6b07c66c1b034935fe9da4631820b64c7286b875990x4a578150114875092022-10-03 12:14:2055 days 6 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xd9d01328e1d5996fdec4f2d171d3aa87a7255e53377363b7a68f83d39942b0300x4a578150114875072022-10-03 12:13:5055 days 6 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0x48c338df5808bad38090997f9744cc5f3f0268efd64c9d92fceb8c9536662f750x4a578150114848522022-10-03 1:03:5755 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xa688c3ee08851f92d88b7c6ba08cdbf174f0d54f5dcc6d17ca87ddedbff810ac0x4a578150114848072022-10-03 0:52:4255 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198941.65
0xd2ce4df48067ee198202fe462381715d609408971f1680e1f516f2a96c2a15c30x4a578150114847642022-10-03 0:41:4855 days 18 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether0.000198921.65
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb11445843b8e6a15fa7ac0ee074f9989bb4d9adec16d63fd5b13789c22683b96114965172022-10-05 2:50:3253 days 16 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0xf6bc6eb15172d120eb1e340a4d68608a8fd1c2428d1559301706f697115c0b54114964722022-10-05 2:39:1753 days 16 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x96ef93ea7f295fe01aefcbbada11115e26d3d3e56b304c6f7185a8a6a92a78a4114964282022-10-05 2:28:1153 days 16 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x15993f6e38b96b65f7336ca1b370fe91b736c64ed79af43cfbf4f1610ba1c841114963832022-10-05 2:16:5353 days 16 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x462229e3985edd13e5b7da76b04b41fbbc574405947fe70bb572220c339f7ddb114963382022-10-05 2:05:3853 days 17 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0xa96d684149fcfc71f4e3f47bce5aa1a7d9c1eec61b4a1c94935819218f58b8ac114962942022-10-05 1:54:3853 days 17 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x2954fc1e090d72014b53ef8f81be1f01e914542dffdc8a0364edabe527639212114962502022-10-05 1:43:3853 days 17 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0xf8524ae9e33adf8ae96f6b6ff214c7764104c52ddf646d9deca117062008f424114962052022-10-05 1:32:2253 days 17 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x3863fdfbadb06fc1c60f288160da96451808794754f93d68316ffd50a18ab777114961612022-10-05 1:21:2253 days 17 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x79896f7effd0076caa32e2d3c55456ab9e2ab1a094a5df22bd1593b7a44a0e06114961172022-10-05 1:10:2253 days 17 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x714809ecb62be02ec29c89b551dcd15dd7c5a8d97dd1df4cd3ef19d61be52143114960732022-10-05 0:59:2253 days 18 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x4bb10ac2c59e917b227c2a10f9bf89e8093bd8a5e459b419928f17a105e3d53a114960282022-10-05 0:48:0753 days 18 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x86e925adda132559eb1fe2dc257a4931f384f57bf2dc85e1b6e50149a86a0780114959842022-10-05 0:37:0653 days 18 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x43c315503e7ce31dd7de0982c8df2e7c545a24e838fa2caffa1cc1b10fd9dbb1114959402022-10-05 0:26:0353 days 18 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0x82441a5b569c9ded00c1c2e40441b0ded481ced42889ebec2675e44968a122a2114958952022-10-05 0:14:4753 days 18 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0xa917bdfb9d9432637e810e28bd1ce2a4e75eb378c84cb08338a86c335a358e46114958512022-10-05 0:03:3853 days 19 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x332c97a68156351bd4e7bc4c96df79d199514f140 Ether
0xdac20f089681de597a1c764c41f8b266ccf9b298c9261d6eb16eb0856a25b439114946032022-10-04 18:50:2454 days 18 mins ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0xc9f929ca37cd3f591f988251bfec1caf19f96d730.0007 Ether
0xdac20f089681de597a1c764c41f8b266ccf9b298c9261d6eb16eb0856a25b439114946032022-10-04 18:50:2454 days 18 mins ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 Ether
0xdac20f089681de597a1c764c41f8b266ccf9b298c9261d6eb16eb0856a25b439114946032022-10-04 18:50:2454 days 18 mins ago 0xc9f929ca37cd3f591f988251bfec1caf19f96d730x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020.001 Ether
0x248c652d0550d00f983177382e2bc8c0e233d561305856c4b51775192fbfa2f5114936752022-10-04 14:57:2454 days 4 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce02 0x4303ad3537f35c52dbf68332a05736f6d0b579eb0.0006 Ether
0x248c652d0550d00f983177382e2bc8c0e233d561305856c4b51775192fbfa2f5114936752022-10-04 14:57:2454 days 4 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 Ether
0x248c652d0550d00f983177382e2bc8c0e233d561305856c4b51775192fbfa2f5114936752022-10-04 14:57:2454 days 4 hrs ago 0x4303ad3537f35c52dbf68332a05736f6d0b579eb0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020.0009 Ether
0x3f4444956e44b807c75b67e9ea97999d12eb60aa8bd56218f9a3c42393e04121114926392022-10-04 10:14:2854 days 8 hrs ago 0x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 Ether
0x3f4444956e44b807c75b67e9ea97999d12eb60aa8bd56218f9a3c42393e04121114926392022-10-04 10:14:2854 days 8 hrs ago 0x8d65efbedd7723d8a2ba95c1de10c572c71159470x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020.0003 Ether
0x6d2565751c54d73775884a13a8d223f5166effb26a08a447d2face2664e84794114926202022-10-04 10:09:4054 days 8 hrs ago 0x8d65efbedd7723d8a2ba95c1de10c572c71159470x273a4ffceb31b8473d51051ad2a2edbb7ac8ce020 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyCallV6Proxy

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-10
*/

/**
 *Submitted for verification at BscScan.com on 2022-05-10
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.6;

/// IApp interface of the application
interface IApp {
    /// (required) call on the destination chain to exec the interaction
    function anyExecute(bytes calldata _data) external returns (bool success, bytes memory result);

    /// (optional,advised) call back on the originating chain if the cross chain interaction fails
    function anyFallback(address _to, bytes calldata _data) external;
}

/// anycall executor is the delegator to execute contract calling (like a sandbox)
contract AnyCallExecutor {
    struct Context {
        address from;
        uint256 fromChainID;
        uint256 nonce;
    }

    Context public context;
    address public creator;

    constructor() {
        creator = msg.sender;
    }

    function execute(
        address _to,
        bytes calldata _data,
        address _from,
        uint256 _fromChainID,
        uint256 _nonce
    ) external returns (bool success, bytes memory result) {
        if (msg.sender != creator) {
            return (false, "AnyCallExecutor: caller is not the creator");
        }
        context = Context({from: _from, fromChainID: _fromChainID, nonce: _nonce});
        (success, result) = IApp(_to).anyExecute(_data);
        context = Context({from: address(0), fromChainID: 0, nonce: 0});
    }
}

/// anycall proxy is a universal protocal to complete cross-chain interaction.
/// 1. the client call `anyCall` on the originating chain
///         to submit a request for a cross chain interaction
/// 2. the mpc network verify the request and call `anyExec` on the destination chain
///         to execute a cross chain interaction
/// 3. if step 2 failed and step 1 has set non-zero fallback,
///         then call `anyFallback` on the originating chain
contract AnyCallV6Proxy {
    // Packed fee information (only 1 storage slot)
    struct FeeData {
        uint128 accruedFees;
        uint128 premium;
    }

    // App config
    struct AppConfig {
        address app; // the application contract address
        address appAdmin; // account who admin the application's config
        uint256 appFlags; // flags of the application
    }

    // Src fee is (baseFees + msg.data.length*feesPerByte)
    struct SrcFeeConfig {
        uint256 baseFees;
        uint256 feesPerByte;
    }

    // Exec record
    struct ExecRecord {
        address to;
        bytes data;
    }

    // Context of the request on originating chain
    struct RequestContext {
        bytes32 txhash;
        address from;
        uint256 fromChainID;
        uint256 nonce;
        uint256 flags;
    }

    // anycall version
    string constant ANYCALL_VERSION = "v6.0";

    // Flags constant
    uint256 public constant FLAG_MERGE_CONFIG_FLAGS = 0x1;
    uint256 public constant FLAG_PAY_FEE_ON_SRC = 0x1 << 1;

    // App Modes constant
    uint256 public constant APPMODE_USE_CUSTOM_SRC_FEES = 0x1;

    // Modes constant
    uint256 public constant PERMISSIONLESS_MODE = 0x1;
    uint256 public constant FREE_MODE = 0x1 << 1;

    // Extra cost of execution (SSTOREs.SLOADs,ADDs,etc..)
    // TODO: analysis to verify the correct overhead gas usage
    uint256 constant EXECUTION_OVERHEAD = 100000;

    // key is app address
    mapping(address => string) public appIdentifier;

    // key is appID, a unique identifier for each project
    mapping(string => AppConfig) public appConfig;
    mapping(string => mapping(address => bool)) public appExecWhitelist;
    mapping(string => address[]) public appHistoryWhitelist;
    mapping(string => bool) public appBlacklist;
    mapping(uint256 => SrcFeeConfig) public srcDefaultFees; // key is chainID
    mapping(string => mapping(uint256 => SrcFeeConfig)) public srcCustomFees;
    mapping(string => uint256) public appDefaultModes;
    mapping(string => mapping(uint256 => uint256)) public appCustomModes;

    mapping(address => bool) public isAdmin;
    address[] public admins;

    address public mpc;
    address public pendingMPC;

    uint256 public mode;
    bool public paused;

    uint256 public minReserveBudget;
    mapping(address => uint256) public executionBudget;
    FeeData private _feeData;

    // applications should give permission to this executor
    AnyCallExecutor public executor;

    mapping(bytes32 => ExecRecord) public retryExecRecords;

    mapping(bytes32 => bool) public execCompleted;
    uint256 nonce;

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1);
        unlocked = 0;
        _;
        unlocked = 1;
    }

    event LogAnyCall(
        address indexed from,
        address indexed to,
        bytes data,
        address _fallback,
        uint256 indexed toChainID,
        uint256 flags,
        string appID,
        uint256 nonce
    );

    event LogAnyExec(
        bytes32 indexed txhash,
        address indexed from,
        address indexed to,
        uint256 fromChainID,
        uint256 nonce,
        bool success,
        bytes result
    );

    event Deposit(address indexed account, uint256 amount);
    event Withdraw(address indexed account, uint256 amount);
    event SetBlacklist(string appID, bool flag);
    event SetWhitelist(string appID, address indexed whitelist, bool flag);
    event UpdatePremium(uint256 oldPremium, uint256 newPremium);
    event AddAdmin(address admin);
    event RemoveAdmin(address admin);
    event ChangeMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp);
    event ApplyMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp);
    event SetAppConfig(string appID, address indexed app, address indexed appAdmin, uint256 appFlags);
    event UpgradeApp(string appID, address indexed oldApp, address indexed newApp);
    event StoreRetryExecRecord(bytes32 indexed txhash, address indexed from, address indexed to, uint256 fromChainID, uint256 nonce, bytes data);
    event DoneRetryExecRecord(bytes32 indexed txhash, address indexed from, uint256 fromChainID, uint256 nonce);

    constructor(
        address _admin,
        address _mpc,
        uint128 _premium,
        uint256 _mode
    ) {
        require(_mpc != address(0), "zero mpc address");
        if (_admin != address(0)) {
            isAdmin[_admin] = true;
            admins.push(_admin);
        }
        if (_mpc != _admin) {
            isAdmin[_mpc] = true;
            admins.push(_mpc);
        }

        mpc = _mpc;
        _feeData.premium = _premium;
        mode = _mode;

        executor = new AnyCallExecutor();

        emit ApplyMPC(address(0), _mpc, block.timestamp);
        emit UpdatePremium(0, _premium);
    }

    /// @dev Access control function
    modifier onlyMPC() {
        require(msg.sender == mpc, "only MPC");
        _;
    }

    /// @dev Access control function
    modifier onlyAdmin() {
        require(isAdmin[msg.sender], "only admin");
        _;
    }

    /// @dev pausable control function
    modifier whenNotPaused() {
        require(!paused, "paused");
        _;
    }

    /// @dev Charge an account for execution costs on this chain
    /// @param _from The account to charge for execution costs
    modifier charge(address _from, uint256 _flags) {
        uint256 gasUsed;

        // Prepare charge fee on the destination chain
        if (!_isSet(mode, FREE_MODE)) {
            if (!_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) {
                require(executionBudget[_from] >= minReserveBudget, "less than min budget");
                gasUsed = gasleft() + EXECUTION_OVERHEAD;
            }
        }

        _;

        // Charge fee on the dest chain
        if (gasUsed > 0) {
            uint256 totalCost = (gasUsed - gasleft()) * (tx.gasprice + _feeData.premium);
            uint256 budget = executionBudget[_from];
            require(budget > totalCost, "no enough budget");
            executionBudget[_from] = budget - totalCost;
            _feeData.accruedFees += uint128(totalCost);
        }
    }

    /// @dev set paused flag to pause/unpause functions
    function setPaused(bool _paused) external onlyAdmin {
        paused = _paused;
    }

    function _paySrcFees(uint256 fees) internal {
        require(msg.value >= fees, "no enough src fee");
        if (fees > 0) { // pay fees
            (bool success,) = mpc.call{value: fees}("");
            require(success);
        }
        if (msg.value > fees) { // return remaining amount
            (bool success,) = msg.sender.call{value: msg.value - fees}("");
            require(success);
        }
    }

    /**
        @notice Submit a request for a cross chain interaction
        @param _to The target to interact with on `_toChainID`
        @param _data The calldata supplied for the interaction with `_to`
        @param _fallback The address to call back on the originating chain
            if the cross chain interaction fails
            for security reason, it must be zero or `msg.sender` address
        @param _toChainID The target chain id to interact with
        @param _flags The flags of app on the originating chain
    */
    function anyCall(
        address _to,
        bytes calldata _data,
        address _fallback,
        uint256 _toChainID,
        uint256 _flags
    ) external lock payable whenNotPaused {
        require(_fallback == address(0) || _fallback == msg.sender, "wrong fallback");
        string memory _appID = appIdentifier[msg.sender];

        require(!appBlacklist[_appID], "blacklist");

        bool _permissionlessMode = _isSet(mode, PERMISSIONLESS_MODE);
        if (!_permissionlessMode) {
            require(appExecWhitelist[_appID][msg.sender], "no permission");
        }

        if (!_isSet(mode, FREE_MODE)) {
            AppConfig storage config = appConfig[_appID];
            require(
                (_permissionlessMode && config.app == address(0)) ||
                msg.sender == config.app,
                "app not exist"
            );

            if (_isSet(_flags, FLAG_MERGE_CONFIG_FLAGS) && config.app == msg.sender) {
                _flags |= config.appFlags;
            }

            if (_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) {
                uint256 fees = _calcSrcFees(_appID, _toChainID, _data.length);
                _paySrcFees(fees);
            } else if (msg.value > 0) {
                _paySrcFees(0);
            }
        }

        nonce++;
        emit LogAnyCall(msg.sender, _to, _data, _fallback, _toChainID, _flags, _appID, nonce);
    }

    /**
        @notice Execute a cross chain interaction
        @dev Only callable by the MPC
        @param _to The cross chain interaction target
        @param _data The calldata supplied for interacting with target
        @param _fallback The address to call on originating chain if the interaction fails
        @param _appID The app identifier to check whitelist
        @param _ctx The context of the request on originating chain
    */
    function anyExec(
        address _to,
        bytes memory _data,
        address _fallback,
        string memory _appID,
        RequestContext memory _ctx
    ) external lock whenNotPaused charge(_ctx.from, _ctx.flags) onlyMPC {
        address _from = _ctx.from;

        require(_fallback == address(0) || _fallback == _from, "wrong fallback");

        require(!appBlacklist[_appID], "blacklist");

        if (!_isSet(mode, PERMISSIONLESS_MODE)) {
            require(appExecWhitelist[_appID][_to], "no permission");
        }

        bytes32 uniqID = calcUniqID(_ctx.txhash, _from, _ctx.fromChainID, _ctx.nonce);
        require(!execCompleted[uniqID], "exec completed");

        bool success;
        {
            bytes memory result;
            try executor.execute(_to, _data, _from, _ctx.fromChainID, _ctx.nonce) returns (bool succ, bytes memory res) {
                (success, result) = (succ, res);
            } catch Error(string memory reason) {
                result = bytes(reason);
            } catch (bytes memory reason) {
                result = reason;
            }
            emit LogAnyExec(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, success, result);
        }

        if (success) {
            execCompleted[uniqID] = true;
        } else if (_fallback == address(0)) {
            retryExecRecords[uniqID] = ExecRecord(_to, _data);
            emit StoreRetryExecRecord(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, _data);
        } else {
            // Call the fallback on the originating chain with the call information (to, data)
            nonce++;
            emit LogAnyCall(
                _from,
                _fallback,
                abi.encodeWithSelector(IApp.anyFallback.selector, _to, _data),
                address(0),
                _ctx.fromChainID,
                0, // pay fee on dest chain
                _appID,
                nonce);
        }
    }

    function _isSet(uint256 _value, uint256 _testBits) internal pure returns (bool) {
        return (_value & _testBits) == _testBits;
    }

    // @notice Calc unique ID
    function calcUniqID(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encode(_txhash, _from, _fromChainID, _nonce));
    }

    /// @notice Retry stored exec record
    function retryExec(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) external {
        bytes32 uniqID = calcUniqID(_txhash, _from, _fromChainID, _nonce);
        require(!execCompleted[uniqID], "exec completed");

        ExecRecord storage record = retryExecRecords[uniqID];
        require(record.to != address(0), "no retry record");

        address _to = record.to;
        bytes memory _data = record.data;

        // Clear record
        record.to = address(0);
        record.data = "";

        (bool success,) = executor.execute(_to, _data, _from, _fromChainID, _nonce);
        require(success);

        execCompleted[uniqID] = true;
        emit DoneRetryExecRecord(_txhash, _from, _fromChainID, _nonce);
    }

    /// @notice Deposit native currency crediting `_account` for execution costs on this chain
    /// @param _account The account to deposit and credit for
    function deposit(address _account) external payable {
        executionBudget[_account] += msg.value;
        emit Deposit(_account, msg.value);
    }

    /// @notice Withdraw a previous deposit from your account
    /// @param _amount The amount to withdraw from your account
    function withdraw(uint256 _amount) external {
        executionBudget[msg.sender] -= _amount;
        emit Withdraw(msg.sender, _amount);
        (bool success,) = msg.sender.call{value: _amount}("");
        require(success);
    }

    /// @notice Withdraw all accrued execution fees
    /// @dev The MPC is credited in the native currency
    function withdrawAccruedFees() external {
        uint256 fees = _feeData.accruedFees;
        _feeData.accruedFees = 0;
        (bool success,) = mpc.call{value: fees}("");
        require(success);
    }

    /// @notice Set app blacklist
    function setBlacklist(string calldata _appID, bool _flag) external onlyAdmin {
        appBlacklist[_appID] = _flag;
        emit SetBlacklist(_appID, _flag);
    }

    /// @notice Set app blacklist in batch
    function setBlacklists(string[] calldata _appIDs, bool _flag) external onlyAdmin {
        for (uint256 i = 0; i < _appIDs.length; i++) {
            this.setBlacklist(_appIDs[i], _flag);
        }
    }

    /// @notice Set the premimum for cross chain executions
    /// @param _premium The premium per gas
    function setPremium(uint128 _premium) external onlyAdmin {
        emit UpdatePremium(_feeData.premium, _premium);
        _feeData.premium = _premium;
    }

    /// @notice Set minimum exection budget for cross chain executions
    /// @param _minBudget The minimum exection budget
    function setMinReserveBudget(uint128 _minBudget) external onlyAdmin {
        minReserveBudget = _minBudget;
    }

    /// @notice Set mode
    function setMode(uint256 _mode) external onlyAdmin {
        mode = _mode;
    }

    /// @notice Change mpc
    function changeMPC(address _mpc) external onlyMPC {
        pendingMPC = _mpc;
        emit ChangeMPC(mpc, _mpc, block.timestamp);
    }

    /// @notice Apply mpc
    function applyMPC() external {
        require(msg.sender == pendingMPC);
        emit ApplyMPC(mpc, pendingMPC, block.timestamp);
        mpc = pendingMPC;
        pendingMPC = address(0);
    }

    /// @notice Get the total accrued fees in native currency
    /// @dev Fees increase when executing cross chain requests
    function accruedFees() external view returns(uint128) {
        return _feeData.accruedFees;
    }

    /// @notice Get the gas premium cost
    /// @dev This is similar to priority fee in eip-1559, except instead of going
    ///     to the miner it is given to the MPC executing cross chain requests
    function premium() external view returns(uint128) {
        return _feeData.premium;
    }

    /// @notice Add admin
    function addAdmin(address _admin) external onlyMPC {
        require(!isAdmin[_admin]);
        isAdmin[_admin] = true;
        admins.push(_admin);
        emit AddAdmin(_admin);
    }

    /// @notice Remove admin
    function removeAdmin(address _admin) external onlyMPC {
        require(isAdmin[_admin]);
        isAdmin[_admin] = false;
        uint256 length = admins.length;
        for (uint256 i = 0; i < length - 1; i++) {
            if (admins[i] == _admin) {
                admins[i] = admins[length - 1];
                break;
            }
        }
        admins.pop();
        emit RemoveAdmin(_admin);
    }

    /// @notice Get all admins
    function getAllAdmins() external view returns (address[] memory) {
        return admins;
    }

    /// @notice Init app config
    function initAppConfig(
        string calldata _appID,
        address _app,
        address _admin,
        uint256 _flags,
        address[] calldata _whitelist
    ) external onlyAdmin {
        require(bytes(_appID).length > 0, "empty appID");
        require(_app != address(0), "zero app address");

        AppConfig storage config = appConfig[_appID];
        require(config.app == address(0), "app exist");

        appIdentifier[_app] = _appID;

        config.app = _app;
        config.appAdmin = _admin;
        config.appFlags = _flags;

        address[] memory whitelist = new address[](1+_whitelist.length);
        whitelist[0] = _app;
        for (uint256 i = 0; i < _whitelist.length; i++) {
            whitelist[i+1] = _whitelist[i];
        }
        _setAppWhitelist(_appID, whitelist, true);

        emit SetAppConfig(_appID, _app, _admin, _flags);
    }

    /// @notice Update app config
    /// can be operated only by mpc or app admin
    /// the config.app will always keep unchanged here
    function updateAppConfig(
        address _app,
        address _admin,
        uint256 _flags,
        address[] calldata _whitelist
    ) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        if (_admin != address(0)) {
            config.appAdmin = _admin;
        }
        config.appFlags = _flags;
        if (_whitelist.length > 0) {
            _setAppWhitelist(_appID, _whitelist, true);
        }

        emit SetAppConfig(_appID, _app, _admin, _flags);
    }

    /// @notice Upgrade app
    /// can be operated only by mpc or app admin
    /// change config.app to a new address
    /// require the `_newApp` is not inited
    function upgradeApp(address _oldApp, address _newApp) external {
        string memory _appID = appIdentifier[_oldApp];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _oldApp && _oldApp != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");
        require(bytes(appIdentifier[_newApp]).length == 0, "new app is inited");

        config.app = _newApp;

        emit UpgradeApp(_appID, _oldApp, _newApp);
    }

    /// @notice Add whitelist
    function addWhitelist(address _app, address[] memory _whitelist) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        _setAppWhitelist(_appID, _whitelist, true);
    }

    /// @notice Remove whitelist
    function removeWhitelist(address _app, address[] memory _whitelist) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        _setAppWhitelist(_appID, _whitelist, false);
    }

    function _setAppWhitelist(string memory _appID, address[] memory _whitelist, bool _flag) internal {
        mapping(address => bool) storage whitelist = appExecWhitelist[_appID];
        address[] storage historyWhitelist = appHistoryWhitelist[_appID];
        address addr;
        for (uint256 i = 0; i < _whitelist.length; i++) {
            addr = _whitelist[i];
            if (whitelist[addr] == _flag) {
                continue;
            }
            if (_flag) {
                historyWhitelist.push(addr);
            }
            whitelist[addr] = _flag;
            emit SetWhitelist(_appID, addr, _flag);
        }
    }

    /// @notice Get history whitelist length
    function getHistoryWhitelistLength(string memory _appID) external view returns (uint256) {
        return appHistoryWhitelist[_appID].length;
    }

    /// @notice Get all history whitelist
    function getAllHistoryWhitelist(string memory _appID) external view returns (address[] memory) {
        return appHistoryWhitelist[_appID];
    }

    /// @notice Tidy history whitelist to be same with actual whitelist
    function tidyHistoryWhitelist(string memory _appID) external {
        mapping(address => bool) storage actualWhitelist = appExecWhitelist[_appID];
        address[] storage historyWhitelist = appHistoryWhitelist[_appID];
        uint256 histLength = historyWhitelist.length;
        uint256 popIndex = histLength;
        address addr;
        for (uint256 i = 0; i < popIndex; ) {
            addr = historyWhitelist[i];
            if (actualWhitelist[addr]) {
                i++;
            } else {
                popIndex--;
                historyWhitelist[i] = historyWhitelist[popIndex];
            }
        }
        for (uint256 i = popIndex; i < histLength; i++) {
            historyWhitelist.pop();
        }
    }

    /// @notice Set default src fees
    function setDefaultSrcFees(
        uint256[] calldata _toChainIDs,
        uint256[] calldata _baseFees,
        uint256[] calldata _feesPerByte
    ) external onlyAdmin {
        uint256 length = _toChainIDs.length;
        require(length == _baseFees.length && length == _feesPerByte.length);

        for (uint256 i = 0; i < length; i++) {
            srcDefaultFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]);
        }
    }

    /// @notice Set custom src fees
    function setCustomSrcFees(
        address _app,
        uint256[] calldata _toChainIDs,
        uint256[] calldata _baseFees,
        uint256[] calldata _feesPerByte
    ) external onlyAdmin {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(_isSet(config.appFlags, FLAG_PAY_FEE_ON_SRC), "flag not set");

        uint256 length = _toChainIDs.length;
        require(length == _baseFees.length && length == _feesPerByte.length);

        mapping(uint256 => SrcFeeConfig) storage _srcFees = srcCustomFees[_appID];
        for (uint256 i = 0; i < length; i++) {
            _srcFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]);
        }
    }

    /// @notice Set app modes
    function setAppModes(
        address _app,
        uint256 _appDefaultMode,
        uint256[] calldata _toChainIDs,
        uint256[] calldata _appCustomModes
    ) external onlyAdmin {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];
        require(config.app == _app && _app != address(0), "app not exist");

        uint256 length = _toChainIDs.length;
        require(length == _appCustomModes.length);

        appDefaultModes[_appID] = _appDefaultMode;

        for (uint256 i = 0; i < length; i++) {
            appCustomModes[_appID][_toChainIDs[i]] = _appCustomModes[i];
        }
    }

    /// @notice Calc fees
    function calcSrcFees(
        address _app,
        uint256 _toChainID,
        uint256 _dataLength
    ) external view returns (uint256) {
        string memory _appID = appIdentifier[_app];
        return _calcSrcFees(_appID, _toChainID, _dataLength);
    }

    /// @notice Calc fees
    function calcSrcFees(
        string calldata _appID,
        uint256 _toChainID,
        uint256 _dataLength
    ) external view returns (uint256) {
        return _calcSrcFees(_appID, _toChainID, _dataLength);
    }

    /// @notice Is use custom src fees
    function isUseCustomSrcFees(string memory _appID, uint256 _toChainID) public view returns (bool) {
        uint256 _appMode = appCustomModes[_appID][_toChainID];
        if (_isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES)) {
            return true;
        }
        _appMode = appDefaultModes[_appID];
        return _isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES);
    }

    function _calcSrcFees(
        string memory _appID,
        uint256 _toChainID,
        uint256 _dataLength
    ) internal view returns (uint256) {
        SrcFeeConfig memory customFees = srcCustomFees[_appID][_toChainID];
        uint256 customBaseFees = customFees.baseFees;
        uint256 customFeesPerBytes = customFees.feesPerByte;

        if (isUseCustomSrcFees(_appID, _toChainID)) {
            return customBaseFees + _dataLength * customFeesPerBytes;
        }

        SrcFeeConfig memory defaultFees = srcDefaultFees[_toChainID];
        uint256 defaultBaseFees = defaultFees.baseFees;
        uint256 defaultFeesPerBytes = defaultFees.feesPerByte;

        uint256 baseFees = (customBaseFees > defaultBaseFees) ? customBaseFees : defaultBaseFees;
        uint256 feesPerByte = (customFeesPerBytes > defaultFeesPerBytes) ? customFeesPerBytes : defaultFeesPerBytes;

        return baseFees + _dataLength * feesPerByte;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_mpc","type":"address"},{"internalType":"uint128","name":"_premium","type":"uint128"},{"internalType":"uint256","name":"_mode","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AddAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ApplyMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DoneRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"_fallback","type":"address"},{"indexed":true,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"flags","type":"uint256"},{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"LogAnyCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"}],"name":"LogAnyExec","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"RemoveAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"app","type":"address"},{"indexed":true,"internalType":"address","name":"appAdmin","type":"address"},{"indexed":false,"internalType":"uint256","name":"appFlags","type":"uint256"}],"name":"SetAppConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"whitelist","type":"address"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"StoreRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPremium","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPremium","type":"uint256"}],"name":"UpdatePremium","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"oldApp","type":"address"},{"indexed":true,"internalType":"address","name":"newApp","type":"address"}],"name":"UpgradeApp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"APPMODE_USE_CUSTOM_SRC_FEES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_MERGE_CONFIG_FLAGS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_PAY_FEE_ON_SRC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMISSIONLESS_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accruedFees","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_flags","type":"uint256"}],"name":"anyCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"string","name":"_appID","type":"string"},{"components":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"flags","type":"uint256"}],"internalType":"struct AnyCallV6Proxy.RequestContext","name":"_ctx","type":"tuple"}],"name":"anyExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appConfig","outputs":[{"internalType":"address","name":"app","type":"address"},{"internalType":"address","name":"appAdmin","type":"address"},{"internalType":"uint256","name":"appFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appCustomModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appDefaultModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"appExecWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appHistoryWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"appIdentifier","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"calcUniqID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_mpc","type":"address"}],"name":"changeMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"execCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"executionBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"contract AnyCallExecutor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAdmins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getAllHistoryWhitelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getHistoryWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"initAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"}],"name":"isUseCustomSrcFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minReserveBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMPC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premium","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"retryExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"retryExecRecords","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_appDefaultMode","type":"uint256"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_appCustomModes","type":"uint256[]"}],"name":"setAppModes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_appIDs","type":"string[]"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setCustomSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setDefaultSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_minBudget","type":"uint128"}],"name":"setMinReserveBudget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_premium","type":"uint128"}],"name":"setPremium","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcCustomFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcDefaultFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"tidyHistoryWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"updateAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldApp","type":"address"},{"internalType":"address","name":"_newApp","type":"address"}],"name":"upgradeApp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAccruedFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260016016553480156200001657600080fd5b506040516200518d3803806200518d833981016040819052620000399162000290565b6001600160a01b038316620000875760405162461bcd60e51b815260206004820152601060248201526f7a65726f206d7063206164647265737360801b604482015260640160405180910390fd5b6001600160a01b03841615620000ec576001600160a01b0384166000818152600960205260408120805460ff19166001908117909155600a805491820181559091526000805160206200516d8339815191520180546001600160a01b03191690911790555b836001600160a01b0316836001600160a01b0316146200015b576001600160a01b0383166000818152600960205260408120805460ff19166001908117909155600a805491820181559091526000805160206200516d8339815191520180546001600160a01b03191690911790555b600b80546001600160a01b0385166001600160a01b0319909116179055601180546001600160801b03808516600160801b029116179055600d819055604051620001a59062000265565b604051809103906000f080158015620001c2573d6000803e3d6000fd5b50601280546001600160a01b0319166001600160a01b03928316179055604051428152908416906000907fa2e29fe96457476993f3188189d22408c86df0c977ec90a31b979c899800d0659060200160405180910390a360408051600081526001600160801b03841660208201527fec6b0785fd83ba51c66ca8c8bb1e4fbdd02a0cced0457a21583fdf399eb3e000910160405180910390a150505050620002f0565b6104d28062004c9b83390190565b80516001600160a01b03811681146200028b57600080fd5b919050565b60008060008060808587031215620002a757600080fd5b620002b28562000273565b9350620002c26020860162000273565b60408601519093506001600160801b0381168114620002e057600080fd5b6060959095015193969295505050565b61499b80620003006000396000f3fe60806040526004361061038b5760003560e01c806384271a6c116101dc578063bd45c4e711610102578063d8f1bd68116100a0578063f340fa011161006f578063f340fa0114610b98578063f75c266414610bab578063f830e7b414610bcb578063fadd10a214610beb57600080fd5b8063d8f1bd6814610b0e578063dfde3fdb14610b2e578063e0a73a9314610b5e578063e9523c9714610b8357600080fd5b8063c1e26e33116100dc578063c1e26e3314610aae578063c3294bb5146105bb578063c34c08e514610ace578063d72dd3b414610aee57600080fd5b8063bd45c4e714610a7b578063bf5d3f2414610a8e578063c0ab8899146109af57600080fd5b8063ab818db71161017a578063afdd2aed11610149578063afdd2aed146109f9578063b041758714610a19578063b63b38d014610a46578063b854bb5614610a5b57600080fd5b8063ab818db71461098f578063ac61b46f146109af578063ada82c7d146109c4578063aeb79211146109d957600080fd5b806395ec1be8116101b657806395ec1be8146105bb57806397f8a94f146109045780639a295d4914610924578063a86529d81461094457600080fd5b806384271a6c1461087557806389168e1814610895578063908c07c5146108b557600080fd5b806354b09ac5116102c1578063682c20581161025f578063732a8eda1161022e578063732a8eda146107c357806374bdda60146107fb578063796a9e43146108285780637a67bbf91461085557600080fd5b8063682c2058146107095780636c0cf7b71461073b5780636e6e8a021461078357806370480275146107a357600080fd5b80635c975abb1161029b5780635c975abb146106665780635ffdc9ca14610680578063667cb4b7146106c957806366c96b37146106e957600080fd5b806354b09ac5146106105780635689f039146106305780635b7b018c1461064657600080fd5b80632898bff81161032e578063304281cb11610308578063304281cb1461053c5780633083d598146105bb578063439b3e1c146105d05780634a578150146105f057600080fd5b80632898bff8146104d8578063295a5212146104f85780632e1a7d4d1461051c57600080fd5b80631785f53c1161036a5780631785f53c1461043a57806322b6a4e11461045a57806324d7806c146104885780632687b2b1146104b857600080fd5b80626a5fa11461039057806314bfd6d0146103e057806316c38b3c14610418575b600080fd5b34801561039c57600080fd5b506103cb6103ab366004613b0a565b805160208183018101805160048252928201919093012091525460ff1681565b60405190151581526020015b60405180910390f35b3480156103ec57600080fd5b506104006103fb366004613b3e565b610c0b565b6040516001600160a01b0390911681526020016103d7565b34801561042457600080fd5b50610438610433366004613b65565b610c35565b005b34801561044657600080fd5b50610438610455366004613b9e565b610c80565b34801561046657600080fd5b5061047a610475366004613b3e565b610e43565b6040516103d7929190613c11565b34801561049457600080fd5b506103cb6104a3366004613b9e565b60096020526000908152604090205460ff1681565b3480156104c457600080fd5b506104386104d3366004613cc9565b610ef2565b3480156104e457600080fd5b506104386104f3366004613d66565b611207565b34801561050457600080fd5b5061050e600d5481565b6040519081526020016103d7565b34801561052857600080fd5b50610438610537366004613b3e565b611244565b34801561054857600080fd5b50610595610557366004613b0a565b805180820160209081018051600180835293830192909401919091209290528154908201546002909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016103d7565b3480156105c757600080fd5b5061050e600181565b3480156105dc57600080fd5b506104386105eb366004613d66565b611302565b3480156105fc57600080fd5b5061043861060b366004613d8f565b61139e565b34801561061c57600080fd5b5061050e61062b366004613e86565b611a8f565b34801561063c57600080fd5b5061050e600f5481565b34801561065257600080fd5b50610438610661366004613b9e565b611ad6565b34801561067257600080fd5b50600e546103cb9060ff1681565b34801561068c57600080fd5b506106b461069b366004613b3e565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016103d7565b3480156106d557600080fd5b506104386106e4366004613ec1565b611b5c565b3480156106f557600080fd5b5061050e610704366004613ef4565b611d69565b34801561071557600080fd5b506011546001600160801b03165b6040516001600160801b0390911681526020016103d7565b34801561074757600080fd5b5061050e610756366004613f44565b81516020818401810180516008825292820194820194909420919093529091526000908152604090205481565b34801561078f57600080fd5b5061043861079e366004613f88565b611db7565b3480156107af57600080fd5b506104386107be366004613b9e565b611f12565b3480156107cf57600080fd5b5061050e6107de366004613b0a565b805160208183018101805160078252928201919093012091525481565b34801561080757600080fd5b5061050e610816366004613b9e565b60106020526000908152604090205481565b34801561083457600080fd5b50610848610843366004613b0a565b611ffe565b6040516103d79190614048565b34801561086157600080fd5b50610438610870366004614095565b612078565b34801561088157600080fd5b50610438610890366004613e86565b612140565b3480156108a157600080fd5b506104386108b03660046140eb565b6123b7565b3480156108c157600080fd5b506106b46108d0366004613f44565b8151602081840181018051600682529282019482019490942091909352909152600090815260409020805460019091015482565b34801561091057600080fd5b5061040061091f366004613f44565b6124a7565b34801561093057600080fd5b5061043861093f366004614184565b6124ee565b34801561095057600080fd5b506103cb61095f3660046141ee565b81516020818401810180516002825292820194820194909420919093529091526000908152604090205460ff1681565b34801561099b57600080fd5b5061050e6109aa366004614232565b6126e1565b3480156109bb57600080fd5b5061050e600281565b3480156109d057600080fd5b5061043861279d565b3480156109e557600080fd5b506104386109f4366004614265565b6127de565b348015610a0557600080fd5b50610438610a143660046142d3565b6129f7565b348015610a2557600080fd5b50610a39610a34366004613b9e565b612c58565b6040516103d7919061435d565b348015610a5257600080fd5b50610438612cf2565b348015610a6757600080fd5b506103cb610a76366004613f44565b612d79565b610438610a89366004614370565b612df1565b348015610a9a57600080fd5b50610438610aa93660046143e6565b61316a565b348015610aba57600080fd5b50610438610ac9366004613b0a565b61320b565b348015610ada57600080fd5b50601254610400906001600160a01b031681565b348015610afa57600080fd5b50610438610b09366004613b3e565b61338d565b348015610b1a57600080fd5b50610438610b29366004613f88565b6133c1565b348015610b3a57600080fd5b506103cb610b49366004613b3e565b60146020526000908152604090205460ff1681565b348015610b6a57600080fd5b50601154600160801b90046001600160801b0316610723565b348015610b8f57600080fd5b50610848613516565b610438610ba6366004613b9e565b613578565b348015610bb757600080fd5b50600b54610400906001600160a01b031681565b348015610bd757600080fd5b50600c54610400906001600160a01b031681565b348015610bf757600080fd5b5061050e610c06366004613b0a565b6135e6565b600a8181548110610c1b57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526009602052604090205460ff16610c6d5760405162461bcd60e51b8152600401610c649061441d565b60405180910390fd5b600e805460ff1916911515919091179055565b600b546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610c6490614441565b6001600160a01b03811660009081526009602052604090205460ff16610ccf57600080fd5b6001600160a01b0381166000908152600960205260408120805460ff19169055600a54905b610cff600183614479565b811015610dcc57826001600160a01b0316600a8281548110610d2357610d23614490565b6000918252602090912001546001600160a01b03161415610dba57600a610d4b600184614479565b81548110610d5b57610d5b614490565b600091825260209091200154600a80546001600160a01b039092169183908110610d8757610d87614490565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dcc565b80610dc4816144a6565b915050610cf4565b50600a805480610dde57610dde6144c1565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03841681527f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b910160405180910390a15050565b601360205260009081526040902080546001820180546001600160a01b039092169291610e6f906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9b906144d7565b8015610ee85780601f10610ebd57610100808354040283529160200191610ee8565b820191906000526020600020905b815481529060010190602001808311610ecb57829003601f168201915b5050505050905082565b3360009081526009602052604090205460ff16610f215760405162461bcd60e51b8152600401610c649061441d565b85610f5c5760405162461bcd60e51b815260206004820152600b60248201526a195b5c1d1e48185c1c125160aa1b6044820152606401610c64565b6001600160a01b038516610fa55760405162461bcd60e51b815260206004820152601060248201526f7a65726f20617070206164647265737360801b6044820152606401610c64565b600060018888604051610fb9929190614512565b90815260405190819003602001902080549091506001600160a01b03161561100f5760405162461bcd60e51b8152602060048201526009602482015268185c1c08195e1a5cdd60ba1b6044820152606401610c64565b6001600160a01b0386166000908152602081905260409020611032908989613909565b5080546001600160a01b038088166001600160a01b031992831617835560018084018054928916929093169190911790915560028201859055600090611079908490614522565b6001600160401b0381111561109057611090613a16565b6040519080825280602002602001820160405280156110b9578160200160208202803683370190505b50905086816000815181106110d0576110d0614490565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b838110156111685784848281811061110d5761110d614490565b90506020020160208101906111229190613b9e565b8261112e836001614522565b8151811061113e5761113e614490565b6001600160a01b039092166020928302919091019091015280611160816144a6565b9150506110f3565b506111ad89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506001915061360e9050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf58b8b896040516111f493929190614563565b60405180910390a3505050505050505050565b3360009081526009602052604090205460ff166112365760405162461bcd60e51b8152600401610c649061441d565b6001600160801b0316600f55565b3360009081526010602052604081208054839290611263908490614479565b909155505060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a26000336001600160a01b0316826040515b60006040518083038185875af1925050503d80600081146112eb576040519150601f19603f3d011682016040523d82523d6000602084013e6112f0565b606091505b50509050806112fe57600080fd5b5050565b3360009081526009602052604090205460ff166113315760405162461bcd60e51b8152600401610c649061441d565b60115460408051600160801b9092046001600160801b039081168352831660208301527fec6b0785fd83ba51c66ca8c8bb1e4fbdd02a0cced0457a21583fdf399eb3e000910160405180910390a1601180546001600160801b03928316600160801b029216919091179055565b6016546001146113ad57600080fd5b6000601655600e5460ff16156113ee5760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b806020015181608001516000611409600d5460029081161490565b61148a5760028083161461148a57600f546001600160a01b03841660009081526010602052604090205410156114785760405162461bcd60e51b81526020600482015260146024820152731b195cdcc81d1a185b881b5a5b88189d5919d95d60621b6044820152606401610c64565b620186a05a6114879190614522565b90505b600b546001600160a01b031633146114b45760405162461bcd60e51b8152600401610c6490614441565b60208401516001600160a01b03871615806114e05750806001600160a01b0316876001600160a01b0316145b61151d5760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b60048660405161152d9190614587565b9081526040519081900360200190205460ff16156115795760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b600d546001908116146115fa576002866040516115969190614587565b90815260408051602092819003830190206001600160a01b038c166000908152925290205460ff166115fa5760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600061161486600001518388604001518960600151611a8f565b60008181526014602052604090205490915060ff16156116675760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b60006060601260009054906101000a90046001600160a01b03166001600160a01b031663978802398d8d878c604001518d606001516040518663ffffffff1660e01b81526004016116bc9594939291906145a3565b6000604051808303816000875af19250505080156116fc57506040513d6000823e601f3d908101601f191682016040526116f991908101906145e1565b60015b61176857611708614678565b806308c379a0141561172f575061171d614694565b806117285750611731565b905061176e565b505b3d80801561175b576040519150601f19603f3d011682016040523d82523d6000602084013e611760565b606091505b50905061176e565b90925090505b8b6001600160a01b0316846001600160a01b031689600001517f0a2dd9a3c77dd69c3b4a5c5ef91fe5f43dfa5365029792e918b9db16ad2c35aa8b604001518c6060015187876040516117c4949392919061471d565b60405180910390a45080156117f1576000828152601460205260409020805460ff1916600117905561197b565b6001600160a01b0389166118bd576040805180820182526001600160a01b038d8116825260208083018e815260008781526013835294909420835181546001600160a01b03191693169290921782559251805192939192611858926001850192019061398d565b509050508a6001600160a01b0316836001600160a01b031688600001517fdad73de9dcb4c7934ccf673a532ca1547846f401631886090cb5c83c2e9ccd498a604001518b606001518f6040516118b09392919061474e565b60405180910390a461197b565b601580549060006118cd836144a6565b91905055508660400151896001600160a01b0316846001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c963a35fe8bf60e01b8f8f604051602401611927929190613c11565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506000808e60155460405161197295949392919061476d565b60405180910390a45b505081159050611a80576011546000906119a590600160801b90046001600160801b03163a614522565b5a6119b09084614479565b6119ba91906147bb565b6001600160a01b038516600090815260106020526040902054909150818111611a185760405162461bcd60e51b815260206004820152601060248201526f1b9bc8195b9bdd59da08189d5919d95d60821b6044820152606401610c64565b611a228282614479565b6001600160a01b03861660009081526010602052604081209190915560118054849290611a599084906001600160801b03166147da565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050505b50506001601655505050505050565b604080516020808201969096526001600160a01b03949094168482015260608401929092526080808401919091528151808403909101815260a09092019052805191012090565b600b546001600160a01b03163314611b005760405162461bcd60e51b8152600401610c6490614441565b600c80546001600160a01b0319166001600160a01b03838116918217909255600b54604051428152919216907f587ad0bc9a6955b6c850bc4f90ab8c66b32e2a6919d4244e459ac74ffa4a88849060200160405180910390a350565b6001600160a01b03821660009081526020819052604081208054611b7f906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611bab906144d7565b8015611bf85780601f10611bcd57610100808354040283529160200191611bf8565b820191906000526020600020905b815481529060010190602001808311611bdb57829003601f168201915b505050505090506000600182604051611c119190614587565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611c4857506001600160a01b03841615155b611c645760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b0316331480611c89575060018101546001600160a01b031633145b611ca55760405162461bcd60e51b8152600401610c649061482c565b6001600160a01b03831660009081526020819052604090208054611cc8906144d7565b159050611d0b5760405162461bcd60e51b81526020600482015260116024820152701b995dc8185c1c081a5cc81a5b9a5d1959607a1b6044820152606401610c64565b80546001600160a01b0319166001600160a01b038481169182178355604051908616907fd037ce9f8e96b2c7cdea421a50a484949e5f9e1e4914834059493cbfbf65862290611d5b90869061435d565b60405180910390a350505050565b6000611dae85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792508691506137509050565b95945050505050565b6001600160a01b03821660009081526020819052604081208054611dda906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e06906144d7565b8015611e535780601f10611e2857610100808354040283529160200191611e53565b820191906000526020600020905b815481529060010190602001808311611e3657829003601f168201915b505050505090506000600182604051611e6c9190614587565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611ea357506001600160a01b03841615155b611ebf5760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b0316331480611ee4575060018101546001600160a01b031633145b611f005760405162461bcd60e51b8152600401610c649061482c565b611f0c8284600161360e565b50505050565b600b546001600160a01b03163314611f3c5760405162461bcd60e51b8152600401610c6490614441565b6001600160a01b03811660009081526009602052604090205460ff1615611f6257600080fd5b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba910160405180910390a150565b60606003826040516120109190614587565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561206c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161204e575b50505050509050919050565b3360009081526009602052604090205460ff166120a75760405162461bcd60e51b8152600401610c649061441d565b60005b82811015611f0c573063bf5d3f248585848181106120ca576120ca614490565b90506020028101906120dc919061484c565b856040518463ffffffff1660e01b81526004016120fb93929190614892565b600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050508080612138906144a6565b9150506120aa565b600061214e85858585611a8f565b60008181526014602052604090205490915060ff16156121a15760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b600081815260136020526040902080546001600160a01b03166121f85760405162461bcd60e51b815260206004820152600f60248201526e1b9bc81c995d1c9e481c9958dbdc99608a1b6044820152606401610c64565b80546001820180546001600160a01b039092169160009190612219906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612245906144d7565b80156122925780601f1061226757610100808354040283529160200191612292565b820191906000526020600020905b81548152906001019060200180831161227557829003601f168201915b505086546001600160a01b031916875550506040805160208101918290526000908190529293506122c89260018701925061398d565b50601254604051639788023960e01b81526000916001600160a01b03169063978802399061230290869086908d908d908d906004016145a3565b6000604051808303816000875af1158015612321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261234991908101906145e1565b5090508061235657600080fd5b60008581526014602052604090819020805460ff19166001179055516001600160a01b038916908a907f819e22d91cf6246af3647f0722340d66b71cae69d9c6b1cbbf015ed0ec46c9c4906111f4908b908b90918252602082015260400190565b3360009081526009602052604090205460ff166123e65760405162461bcd60e51b8152600401610c649061441d565b8483811480156123f557508082145b6123fe57600080fd5b60005b8181101561249d57604051806040016040528087878481811061242657612426614490565b90506020020135815260200185858481811061244457612444614490565b90506020020135815250600560008a8a8581811061246457612464614490565b60209081029290920135835250818101929092526040016000208251815591015160019091015580612495816144a6565b915050612401565b5050505050505050565b815160208184018101805160038252928201918501919091209190528054829081106124d257600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526009602052604090205460ff1661251d5760405162461bcd60e51b8152600401610c649061441d565b6001600160a01b03861660009081526020819052604081208054612540906144d7565b80601f016020809104026020016040519081016040528092919081815260200182805461256c906144d7565b80156125b95780601f1061258e576101008083540402835291602001916125b9565b820191906000526020600020905b81548152906001019060200180831161259c57829003601f168201915b5050505050905060006001826040516125d29190614587565b90815260405190819003602001902080549091506001600160a01b0390811690891614801561260957506001600160a01b03881615155b6126255760405162461bcd60e51b8152600401610c6490614805565b8483811461263257600080fd5b876007846040516126439190614587565b9081526040519081900360200190205560005b818110156126d55785858281811061267057612670614490565b905060200201356008856040516126879190614587565b908152602001604051809103902060008a8a858181106126a9576126a9614490565b9050602002013581526020019081526020016000208190555080806126cd906144a6565b915050612656565b50505050505050505050565b6001600160a01b03831660009081526020819052604081208054829190612707906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612733906144d7565b80156127805780601f1061275557610100808354040283529160200191612780565b820191906000526020600020905b81548152906001019060200180831161276357829003601f168201915b50505050509050612792818585613750565b9150505b9392505050565b601180546fffffffffffffffffffffffffffffffff198116909155600b546040516001600160801b03909216916000916001600160a01b03169083906112ae565b6001600160a01b03851660009081526020819052604081208054612801906144d7565b80601f016020809104026020016040519081016040528092919081815260200182805461282d906144d7565b801561287a5780601f1061284f5761010080835404028352916020019161287a565b820191906000526020600020905b81548152906001019060200180831161285d57829003601f168201915b5050505050905060006001826040516128939190614587565b90815260405190819003602001902080549091506001600160a01b039081169088161480156128ca57506001600160a01b03871615155b6128e65760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b031633148061290b575060018101546001600160a01b031633145b6129275760405162461bcd60e51b8152600401610c649061482c565b6001600160a01b03861615612954576001810180546001600160a01b0319166001600160a01b0388161790555b6002810185905582156129a1576129a1828585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506001925061360e915050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf584886040516129e69291906148b8565b60405180910390a350505050505050565b3360009081526009602052604090205460ff16612a265760405162461bcd60e51b8152600401610c649061441d565b6001600160a01b03871660009081526020819052604081208054612a49906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612a75906144d7565b8015612ac25780601f10612a9757610100808354040283529160200191612ac2565b820191906000526020600020905b815481529060010190602001808311612aa557829003601f168201915b505050505090506000600182604051612adb9190614587565b90815260405190819003602001902080549091506001600160a01b03908116908a16148015612b1257506001600160a01b03891615155b612b2e5760405162461bcd60e51b8152600401610c6490614805565b600280820154811614612b725760405162461bcd60e51b815260206004820152600c60248201526b199b1859c81b9bdd081cd95d60a21b6044820152606401610c64565b868581148015612b8157508084145b612b8a57600080fd5b6000600684604051612b9c9190614587565b9081526020016040518091039020905060005b82811015612c4a5760405180604001604052808a8a84818110612bd457612bd4614490565b905060200201358152602001888884818110612bf257612bf2614490565b905060200201358152508260008d8d85818110612c1157612c11614490565b60209081029290920135835250818101929092526040016000208251815591015160019091015580612c42816144a6565b915050612baf565b505050505050505050505050565b60006020819052908152604090208054612c71906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612c9d906144d7565b8015612cea5780601f10612cbf57610100808354040283529160200191612cea565b820191906000526020600020905b815481529060010190602001808311612ccd57829003601f168201915b505050505081565b600c546001600160a01b03163314612d0957600080fd5b600c54600b546040514281526001600160a01b0392831692909116907fa2e29fe96457476993f3188189d22408c86df0c977ec90a31b979c899800d0659060200160405180910390a3600c8054600b80546001600160a01b03199081166001600160a01b03841617909155169055565b600080600884604051612d8c9190614587565b908152604080516020928190038301902060008681529252902054905060018082161415612dbe576001915050612deb565b600784604051612dce9190614587565b9081526040519081900360200190205490506001808216145b9150505b92915050565b601654600114612e0057600080fd5b6000601655600e5460ff1615612e415760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b6001600160a01b0383161580612e5f57506001600160a01b03831633145b612e9c5760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b3360009081526020819052604081208054612eb6906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612ee2906144d7565b8015612f2f5780601f10612f0457610100808354040283529160200191612f2f565b820191906000526020600020905b815481529060010190602001808311612f1257829003601f168201915b50505050509050600481604051612f469190614587565b9081526040519081900360200190205460ff1615612f925760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b6000612fa3600d5460019081161490565b90508061301557600282604051612fba9190614587565b9081526040805160209281900383019020336000908152925290205460ff166130155760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600d546002908116146130ee5760006001836040516130349190614587565b90815260200160405180910390209050818015613059575080546001600160a01b0316155b8061306d575080546001600160a01b031633145b6130895760405162461bcd60e51b8152600401610c6490614805565b60018085161480156130a4575080546001600160a01b031633145b156130b3578060020154841793505b600280851614156130dc5760006130cb84878a613750565b90506130d68161383d565b506130ec565b34156130ec576130ec600061383d565b505b601580549060006130fe836144a6565b919050555083886001600160a01b0316336001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c98a8a8a8989601554604051613153969594939291906148da565b60405180910390a450506001601655505050505050565b3360009081526009602052604090205460ff166131995760405162461bcd60e51b8152600401610c649061441d565b80600484846040516131ac929190614512565b908152604051908190036020018120805492151560ff19909316929092179091557f8450ad9faca1edf7a8a033ed0adf98a354d14b22658565ca76f3e11e881947c1906131fe90859085908590614892565b60405180910390a1505050565b600060028260405161321d9190614587565b90815260200160405180910390209050600060038360405161323f9190614587565b9081526040519081900360200190208054909150806000805b828110156133355784818154811061327257613272614490565b60009182526020808320909101546001600160a01b03168083529088905260409091205490925060ff16156132b357806132ab816144a6565b915050613258565b826132bd8161492a565b9350508483815481106132d2576132d2614490565b9060005260206000200160009054906101000a90046001600160a01b031685828154811061330257613302614490565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613258565b50815b838110156133845784805480613350576133506144c1565b600082815260209020810160001990810180546001600160a01b03191690550190558061337c816144a6565b915050613338565b50505050505050565b3360009081526009602052604090205460ff166133bc5760405162461bcd60e51b8152600401610c649061441d565b600d55565b6001600160a01b038216600090815260208190526040812080546133e4906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054613410906144d7565b801561345d5780601f106134325761010080835404028352916020019161345d565b820191906000526020600020905b81548152906001019060200180831161344057829003601f168201915b5050505050905060006001826040516134769190614587565b90815260405190819003602001902080549091506001600160a01b039081169085161480156134ad57506001600160a01b03841615155b6134c95760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b03163314806134ee575060018101546001600160a01b031633145b61350a5760405162461bcd60e51b8152600401610c649061482c565b611f0c8284600061360e565b6060600a80548060200260200160405190810160405280929190818152602001828054801561356e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613550575b5050505050905090565b6001600160a01b038116600090815260106020526040812080543492906135a0908490614522565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b60006003826040516135f89190614587565b9081526040519081900360200190205492915050565b60006002846040516136209190614587565b9081526020016040518091039020905060006003856040516136429190614587565b90815260405190819003602001902090506000805b85518110156133845785818151811061367257613672614490565b6020908102919091018101516001600160a01b03811660009081529186905260409091205490925060ff16151585151514156136ad5761373e565b84156136df5782546001810184556000848152602090200180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b03821660008181526020869052604090819020805460ff1916881515179055517f5059f2158bd5a3ba277fdb58bf30871e09bae3987abede6055be2e87bbf7f79690613735908a908990614941565b60405180910390a25b80613748816144a6565b915050613657565b6000806006856040516137639190614587565b9081526040805160209281900383018120600088815290845282902081830190925281548082526001909201549281018390529250906137a38787612d79565b156137c6576137b281866147bb565b6137bc9083614522565b9350505050612796565b60008681526005602090815260408083208151808301909252805480835260019091015492820183905290929091908286116138025782613804565b855b905060008286116138155782613817565b855b9050613823818b6147bb565b61382d9083614522565b9c9b505050505050505050505050565b803410156138815760405162461bcd60e51b81526020600482015260116024820152706e6f20656e6f756768207372632066656560781b6044820152606401610c64565b80156138e957600b546040516000916001600160a01b03169083908381818185875af1925050503d80600081146138d4576040519150601f19603f3d011682016040523d82523d6000602084013e6138d9565b606091505b50509050806138e757600080fd5b505b80341115613906576000336138fe8334614479565b6040516112ae565b50565b828054613915906144d7565b90600052602060002090601f016020900481019282613937576000855561397d565b82601f106139505782800160ff1982351617855561397d565b8280016001018555821561397d579182015b8281111561397d578235825591602001919060010190613962565b50613989929150613a01565b5090565b828054613999906144d7565b90600052602060002090601f0160209004810192826139bb576000855561397d565b82601f106139d457805160ff191683800117855561397d565b8280016001018555821561397d579182015b8281111561397d5782518255916020019190600101906139e6565b5b808211156139895760008155600101613a02565b634e487b7160e01b600052604160045260246000fd5b60a081018181106001600160401b0382111715613a4b57613a4b613a16565b60405250565b601f8201601f191681016001600160401b0381118282101715613a7657613a76613a16565b6040525050565b60006001600160401b03821115613a9657613a96613a16565b50601f01601f191660200190565b6000613aaf83613a7d565b604051613abc8282613a51565b809250848152858585011115613ad157600080fd5b8484602083013760006020868301015250509392505050565b600082601f830112613afb57600080fd5b61279683833560208501613aa4565b600060208284031215613b1c57600080fd5b81356001600160401b03811115613b3257600080fd5b612de784828501613aea565b600060208284031215613b5057600080fd5b5035919050565b801515811461390657600080fd5b600060208284031215613b7757600080fd5b813561279681613b57565b80356001600160a01b0381168114613b9957600080fd5b919050565b600060208284031215613bb057600080fd5b61279682613b82565b60005b83811015613bd4578181015183820152602001613bbc565b83811115611f0c5750506000910152565b60008151808452613bfd816020860160208601613bb9565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090613c3590830184613be5565b949350505050565b60008083601f840112613c4f57600080fd5b5081356001600160401b03811115613c6657600080fd5b602083019150836020828501011115613c7e57600080fd5b9250929050565b60008083601f840112613c9757600080fd5b5081356001600160401b03811115613cae57600080fd5b6020830191508360208260051b8501011115613c7e57600080fd5b600080600080600080600060a0888a031215613ce457600080fd5b87356001600160401b0380821115613cfb57600080fd5b613d078b838c01613c3d565b9099509750879150613d1b60208b01613b82565b9650613d2960408b01613b82565b955060608a0135945060808a0135915080821115613d4657600080fd5b50613d538a828b01613c85565b989b979a50959850939692959293505050565b600060208284031215613d7857600080fd5b81356001600160801b038116811461279657600080fd5b6000806000806000858703610120811215613da957600080fd5b613db287613b82565b955060208701356001600160401b0380821115613dce57600080fd5b818901915089601f830112613de257600080fd5b613df18a833560208501613aa4565b9650613dff60408a01613b82565b95506060890135915080821115613e1557600080fd5b50613e2289828a01613aea565b93505060a0607f1982011215613e3757600080fd5b50604051613e4481613a2c565b60808701358152613e5760a08801613b82565b602082015260c0870135604082015260e087013560608201526101009096013560808701525092959194509290565b60008060008060808587031215613e9c57600080fd5b84359350613eac60208601613b82565b93969395505050506040820135916060013590565b60008060408385031215613ed457600080fd5b613edd83613b82565b9150613eeb60208401613b82565b90509250929050565b60008060008060608587031215613f0a57600080fd5b84356001600160401b03811115613f2057600080fd5b613f2c87828801613c3d565b90989097506020870135966040013595509350505050565b60008060408385031215613f5757600080fd5b82356001600160401b03811115613f6d57600080fd5b613f7985828601613aea565b95602094909401359450505050565b60008060408385031215613f9b57600080fd5b613fa483613b82565b91506020808401356001600160401b0380821115613fc157600080fd5b818601915086601f830112613fd557600080fd5b813581811115613fe757613fe7613a16565b8060051b9150604051613ffc85840182613a51565b8181529183018401918481018984111561401557600080fd5b938501935b838510156140385761402b85613b82565b815293850193850161401a565b5080955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b818110156140895783516001600160a01b031683529284019291840191600101614064565b50909695505050505050565b6000806000604084860312156140aa57600080fd5b83356001600160401b038111156140c057600080fd5b6140cc86828701613c85565b90945092505060208401356140e081613b57565b809150509250925092565b6000806000806000806060878903121561410457600080fd5b86356001600160401b038082111561411b57600080fd5b6141278a838b01613c85565b9098509650602089013591508082111561414057600080fd5b61414c8a838b01613c85565b9096509450604089013591508082111561416557600080fd5b5061417289828a01613c85565b979a9699509497509295939492505050565b6000806000806000806080878903121561419d57600080fd5b6141a687613b82565b95506020870135945060408701356001600160401b03808211156141c957600080fd5b6141d58a838b01613c85565b9096509450606089013591508082111561416557600080fd5b6000806040838503121561420157600080fd5b82356001600160401b0381111561421757600080fd5b61422385828601613aea565b925050613eeb60208401613b82565b60008060006060848603121561424757600080fd5b61425084613b82565b95602085013595506040909401359392505050565b60008060008060006080868803121561427d57600080fd5b61428686613b82565b945061429460208701613b82565b93506040860135925060608601356001600160401b038111156142b657600080fd5b6142c288828901613c85565b969995985093965092949392505050565b60008060008060008060006080888a0312156142ee57600080fd5b6142f788613b82565b965060208801356001600160401b038082111561431357600080fd5b61431f8b838c01613c85565b909850965060408a013591508082111561433857600080fd5b6143448b838c01613c85565b909650945060608a0135915080821115613d4657600080fd5b6020815260006127966020830184613be5565b60008060008060008060a0878903121561438957600080fd5b61439287613b82565b955060208701356001600160401b038111156143ad57600080fd5b6143b989828a01613c3d565b90965094506143cc905060408801613b82565b925060608701359150608087013590509295509295509295565b6000806000604084860312156143fb57600080fd5b83356001600160401b0381111561441157600080fd5b6140cc86828701613c3d565b6020808252600a908201526937b7363c9030b236b4b760b11b604082015260600190565b6020808252600890820152676f6e6c79204d504360c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561448b5761448b614463565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156144ba576144ba614463565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181811c908216806144eb57607f821691505b6020821081141561450c57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6000821982111561453557614535614463565b500190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061457760408301858761453a565b9050826020830152949350505050565b60008251614599818460208701613bb9565b9190910192915050565b600060018060a01b03808816835260a060208401526145c560a0840188613be5565b9516604083015250606081019290925260809091015292915050565b600080604083850312156145f457600080fd5b82516145ff81613b57565b60208401519092506001600160401b0381111561461b57600080fd5b8301601f8101851361462c57600080fd5b805161463781613a7d565b6040516146448282613a51565b82815287602084860101111561465957600080fd5b61466a836020830160208701613bb9565b809450505050509250929050565b600060033d11156146915760046000803e5060005160e01c5b90565b600060443d10156146a25790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156146d157505050505090565b82850191508151818111156146e95750505050505090565b843d87010160208285010111156147035750505050505090565b61471260208286010187613a51565b509095945050505050565b84815283602082015282151560408201526080606082015260006147446080830184613be5565b9695505050505050565b838152826020820152606060408201526000611dae6060830184613be5565b60a08152600061478060a0830188613be5565b6001600160a01b03871660208401526040830186905282810360608401526147a88186613be5565b9150508260808301529695505050505050565b60008160001904831182151516156147d5576147d5614463565b500290565b60006001600160801b038083168185168083038211156147fc576147fc614463565b01949350505050565b6020808252600d908201526c185c1c081b9bdd08195e1a5cdd609a1b604082015260600190565b602080825260069082015265199bdc989a5960d21b604082015260600190565b6000808335601e1984360301811261486357600080fd5b8301803591506001600160401b0382111561487d57600080fd5b602001915036819003821315613c7e57600080fd5b6040815260006148a660408301858761453a565b90508215156020830152949350505050565b6040815260006148cb6040830185613be5565b90508260208301529392505050565b60a0815260006148ee60a08301888a61453a565b6001600160a01b03871660208401526040830186905282810360608401526149168186613be5565b915050826080830152979650505050505050565b60008161493957614939614463565b506000190190565b6040815260006149546040830185613be5565b90508215156020830152939250505056fea264697066735822122074626b04c31d14d798a2104cc2d8f566235c4b1a0e86ea403d2fbdaeab89e80364736f6c634300080a0033608060405234801561001057600080fd5b50600380546001600160a01b031916331790556104a0806100326000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806302d05d3f146100465780639788023914610076578063d0496d6a14610097575b600080fd5b600354610059906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610089610084366004610221565b6100d7565b60405161006d9291906102f7565b6000546001546002546100b2926001600160a01b0316919083565b604080516001600160a01b03909416845260208401929092529082015260600161006d565b6003546000906060906001600160a01b031633146101135760006040518060600160405280602a8152602001610441602a9139915091506101fa565b604080516060810182526001600160a01b0380881680835260208301889052918301869052600080546001600160a01b031916909217909155600186905560028590559051639abaf47960e01b815290891690639abaf4799061017c908a908a90600401610333565b6000604051808303816000875af115801561019b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101c39190810190610378565b60408051606081018252600080825260208201819052910181905280546001600160a01b0319168155600181905560025590925090505b965096945050505050565b80356001600160a01b038116811461021c57600080fd5b919050565b60008060008060008060a0878903121561023a57600080fd5b61024387610205565b9550602087013567ffffffffffffffff8082111561026057600080fd5b818901915089601f83011261027457600080fd5b81358181111561028357600080fd5b8a602082850101111561029557600080fd5b6020830197508096505050506102ad60408801610205565b925060608701359150608087013590509295509295509295565b60005b838110156102e25781810151838201526020016102ca565b838111156102f1576000848401525b50505050565b8215158152604060208201526000825180604084015261031e8160608501602087016102c7565b601f01601f1916919091016060019392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561038b57600080fd5b8251801515811461039b57600080fd5b602084015190925067ffffffffffffffff808211156103b957600080fd5b818501915085601f8301126103cd57600080fd5b8151818111156103df576103df610362565b604051601f8201601f19908116603f0116810190838211818310171561040757610407610362565b8160405282815288602084870101111561042057600080fd5b6104318360208301602088016102c7565b8095505050505050925092905056fe416e7943616c6c4578656375746f723a2063616c6c6572206973206e6f74207468652063726561746f72a2646970667358221220b2ca45af7b105d65c7d8bb6f2afd0254fd93719de9bf9b49c913d283dbd23d2664736f6c634300080a0033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000099c5be48d2f47a1b518de27246baba8ea96319bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

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

000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000099c5be48d2f47a1b518de27246baba8ea96319bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : _admin (address): 0xfA9dA51631268A30Ec3DDd1CcBf46c65FAD99251
Arg [1] : _mpc (address): 0x99c5bE48D2f47a1b518DE27246BabA8EA96319BD
Arg [2] : _premium (uint128): 0
Arg [3] : _mode (uint256): 1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [1] : 00000000000000000000000099c5be48d2f47a1b518de27246baba8ea96319bd
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed ByteCode Sourcemap

1928:25875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3753:43;;;;;;;;;;-1:-1:-1;3753:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:14:1;;1960:22;1942:41;;1930:2;1915:18;3753:43:0;;;;;;;;4140:23;;;;;;;;;;-1:-1:-1;4140:23:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2343:32:1;;;2325:51;;2313:2;2298:18;4140:23:0;2179:203:1;8383:87:0;;;;;;;;;;-1:-1:-1;8383:87:0;;;;;:::i;:::-;;:::i;:::-;;17901:421;;;;;;;;;;-1:-1:-1;17901:421:0;;;;;:::i;:::-;;:::i;4513:54::-;;;;;;;;;;-1:-1:-1;4513:54:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4094:39::-;;;;;;;;;;-1:-1:-1;4094:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18500:908;;;;;;;;;;-1:-1:-1;18500:908:0;;;;;:::i;:::-;;:::i;16456:116::-;;;;;;;;;;-1:-1:-1;16456:116:0;;;;;:::i;:::-;;:::i;4231:19::-;;;;;;;;;;;;;;;;;;;6301:25:1;;;6289:2;6274:18;4231:19:0;6155:177:1;15013:237:0;;;;;;;;;;-1:-1:-1;15013:237:0;;;;;:::i;:::-;;:::i;3565:45::-;;;;;;;;;;-1:-1:-1;3565:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3565:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;6595:15:1;;;6577:34;;6647:15;;;;6642:2;6627:18;;6620:43;6679:18;;;6672:34;6527:2;6512:18;3565:45:0;6337:375:1;2898:53:0;;;;;;;;;;;;2948:3;2898:53;;16161:160;;;;;;;;;;-1:-1:-1;16161:160:0;;;;;:::i;:::-;;:::i;11354:1998::-;;;;;;;;;;-1:-1:-1;11354:1998:0;;;;;:::i;:::-;;:::i;13538:205::-;;;;;;;;;;-1:-1:-1;13538:205:0;;;;;:::i;:::-;;:::i;4284:31::-;;;;;;;;;;;;;;;;16724:139;;;;;;;;;;-1:-1:-1;16724:139:0;;;;;:::i;:::-;;:::i;4257:18::-;;;;;;;;;;-1:-1:-1;4257:18:0;;;;;;;;3803:54;;;;;;;;;;-1:-1:-1;3803:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8852:25:1;;;8908:2;8893:18;;8886:34;;;;8825:18;3803:54:0;8678:248:1;20452:516:0;;;;;;;;;;-1:-1:-1;20452:516:0;;;;;:::i;:::-;;:::i;26184:223::-;;;;;;;;;;-1:-1:-1;26184:223:0;;;;;:::i;:::-;;:::i;17233:100::-;;;;;;;;;;-1:-1:-1;17305:8:0;:20;-1:-1:-1;;;;;17305:20:0;17233:100;;;-1:-1:-1;;;;;9912:47:1;;;9894:66;;9882:2;9867:18;17233:100:0;9748:218:1;4017:68:0;;;;;;;;;;-1:-1:-1;4017:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4017:68:0;;;;;;;;;21007:404;;;;;;;;;;-1:-1:-1;21007:404:0;;;;;:::i;:::-;;:::i;17673:190::-;;;;;;;;;;-1:-1:-1;17673:190:0;;;;;:::i;:::-;;:::i;3961:49::-;;;;;;;;;;-1:-1:-1;3961:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4322:50;;;;;;;;;;-1:-1:-1;4322:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;22777:148;;;;;;;;;;-1:-1:-1;22777:148:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15840:207::-;;;;;;;;;;-1:-1:-1;15840:207:0;;;;;:::i;:::-;;:::i;13793:764::-;;;;;;;;;;-1:-1:-1;13793:764:0;;;;;:::i;:::-;;:::i;23803:460::-;;;;;;;;;;-1:-1:-1;23803:460:0;;;;;:::i;:::-;;:::i;3882:72::-;;;;;;;;;;-1:-1:-1;3882:72:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3882:72:0;;;;;;;;;;;;;;;3691:55;;;;;;;;;;-1:-1:-1;3691:55:0;;;;;:::i;:::-;;:::i;25176:672::-;;;;;;;;;;-1:-1:-1;25176:672:0;;;;;:::i;:::-;;:::i;3617:67::-;;;;;;;;;;-1:-1:-1;3617:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3617:67:0;;;;;;;;;;;25883:266;;;;;;;;;;-1:-1:-1;25883:266:0;;;;;:::i;:::-;;:::i;2958:54::-;;;;;;;;;;;;3004:8;2958:54;;15368:210;;;;;;;;;;;;;:::i;19557:719::-;;;;;;;;;;-1:-1:-1;19557:719:0;;;;;:::i;:::-;;:::i;24308:829::-;;;;;;;;;;-1:-1:-1;24308:829:0;;;;;:::i;:::-;;:::i;3450:47::-;;;;;;;;;;-1:-1:-1;3450:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16898:200::-;;;;;;;;;;;;;:::i;26455:376::-;;;;;;;;;;-1:-1:-1;26455:376:0;;;;;:::i;:::-;;:::i;9461:1429::-;;;;;;:::i;:::-;;:::i;15621:167::-;;;;;;;;;;-1:-1:-1;15621:167:0;;;;;:::i;:::-;;:::i;23006:751::-;;;;;;;;;;-1:-1:-1;23006:751:0;;;;;:::i;:::-;;:::i;4473:31::-;;;;;;;;;;-1:-1:-1;4473:31:0;;;;-1:-1:-1;;;;;4473:31:0;;;16606:82;;;;;;;;;;-1:-1:-1;16606:82:0;;;;;:::i;:::-;;:::i;21453:408::-;;;;;;;;;;-1:-1:-1;21453:408:0;;;;;:::i;:::-;;:::i;4576:45::-;;;;;;;;;;-1:-1:-1;4576:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17546:92;;;;;;;;;;-1:-1:-1;17614:8:0;:16;-1:-1:-1;;;17614:16:0;;-1:-1:-1;;;;;17614:16:0;17546:92;;18362:97;;;;;;;;;;;;;:::i;14724:153::-;;;;;;:::i;:::-;;:::i;4172:18::-;;;;;;;;;;-1:-1:-1;4172:18:0;;;;-1:-1:-1;;;;;4172:18:0;;;4197:25;;;;;;;;;;-1:-1:-1;4197:25:0;;;;-1:-1:-1;;;;;4197:25:0;;;22577:149;;;;;;;;;;-1:-1:-1;22577:149:0;;;;;:::i;:::-;;:::i;4140:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4140:23:0;;-1:-1:-1;4140:23:0;:::o;8383:87::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;;;;;;;;;8446:6:::1;:16:::0;;-1:-1:-1;;8446:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8383:87::o;17901:421::-;7040:3;;-1:-1:-1;;;;;7040:3:0;7026:10;:17;7018:38;;;;-1:-1:-1;;;7018:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17974:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;17966:24;;;::::0;::::1;;-1:-1:-1::0;;;;;18001:15:0;::::1;18019:5;18001:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;18001:23:0::1;::::0;;18052:6:::1;:13:::0;;18076:181:::1;18100:10;18109:1;18100:6:::0;:10:::1;:::i;:::-;18096:1;:14;18076:181;;;18149:6;-1:-1:-1::0;;;;;18136:19:0::1;:6;18143:1;18136:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18136:9:0::1;:19;18132:114;;;18188:6;18195:10;18204:1;18195:6:::0;:10:::1;:::i;:::-;18188:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18176:6:::1;:9:::0;;-1:-1:-1;;;;;18188:18:0;;::::1;::::0;18183:1;;18176:9;::::1;;;;;:::i;:::-;;;;;;;;;:30;;;;;-1:-1:-1::0;;;;;18176:30:0::1;;;;;-1:-1:-1::0;;;;;18176:30:0::1;;;;;;18225:5;;18132:114;18112:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18076:181;;;;18267:6;:12;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18267:12:0;;;;;;;-1:-1:-1;;;;;;18267:12:0::1;::::0;;;;;;;;18295:19:::1;::::0;-1:-1:-1;;;;;2343:32:1;;2325:51;;18295:19:0::1;::::0;2298:18:1;18295:19:0::1;;;;;;;17955:367;17901:421:::0;:::o;4513:54::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4513:54:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18500:908::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;18714:24;18706:48:::1;;;::::0;-1:-1:-1;;;18706:48:0;;20882:2:1;18706:48:0::1;::::0;::::1;20864:21:1::0;20921:2;20901:18;;;20894:30;-1:-1:-1;;;20940:18:1;;;20933:41;20991:18;;18706:48:0::1;20680:335:1::0;18706:48:0::1;-1:-1:-1::0;;;;;18773:18:0;::::1;18765:47;;;::::0;-1:-1:-1;;;18765:47:0;;21222:2:1;18765:47:0::1;::::0;::::1;21204:21:1::0;21261:2;21241:18;;;21234:30;-1:-1:-1;;;21280:18:1;;;21273:46;21336:18;;18765:47:0::1;21020:340:1::0;18765:47:0::1;18825:24;18852:9;18862:6;;18852:17;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;18888:10;;18852:17;;-1:-1:-1;;;;;;18888:10:0::1;:24:::0;18880:46:::1;;;::::0;-1:-1:-1;;;18880:46:0;;21845:2:1;18880:46:0::1;::::0;::::1;21827:21:1::0;21884:1;21864:18;;;21857:29;-1:-1:-1;;;21902:18:1;;;21895:39;21951:18;;18880:46:0::1;21643:332:1::0;18880:46:0::1;-1:-1:-1::0;;;;;18939:19:0;::::1;:13;:19:::0;;;::::1;::::0;;;;;;:28:::1;::::0;18961:6;;18939:28:::1;:::i;:::-;-1:-1:-1::0;18980:17:0;;-1:-1:-1;;;;;18980:17:0;;::::1;-1:-1:-1::0;;;;;;18980:17:0;;::::1;;::::0;;;19008:15;;::::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;19043:15:::1;::::0;::::1;:24:::0;;;18980:10:::1;::::0;19123:19:::1;::::0;19125:10;;19123:19:::1;:::i;:::-;-1:-1:-1::0;;;;;19109:34:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;19109:34:0::1;;19080:63;;19169:4;19154:9;19164:1;19154:12;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1::0;;;;;19154:19:0::1;;;-1:-1:-1::0;;;;;19154:19:0::1;;;::::0;::::1;19189:9;19184:105;19204:21:::0;;::::1;19184:105;;;19264:10;;19275:1;19264:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19247:9:::0;19257:3:::1;:1:::0;19259::::1;19257:3;:::i;:::-;19247:14;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19247:30:0;;::::1;:14;::::0;;::::1;::::0;;;;;;;:30;19227:3;::::1;::::0;::::1;:::i;:::-;;;;19184:105;;;;19299:41;19316:6;;19299:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;19324:9:0;;-1:-1:-1;19335:4:0::1;::::0;-1:-1:-1;19299:16:0::1;::::0;-1:-1:-1;19299:41:0:i:1;:::-;19385:6;-1:-1:-1::0;;;;;19358:42:0::1;19379:4;-1:-1:-1::0;;;;;19358:42:0::1;;19371:6;;19393;19358:42;;;;;;;;:::i;:::-;;;;;;;;18695:713;;18500:908:::0;;;;;;;:::o;16456:116::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16535:29:0::1;:16;:29:::0;16456:116::o;15013:237::-;15084:10;15068:27;;;;:15;:27;;;;;:38;;15099:7;;15068:27;:38;;15099:7;;15068:38;:::i;:::-;;;;-1:-1:-1;;15122:29:0;;6301:25:1;;;15131:10:0;;15122:29;;6289:2:1;6274:18;15122:29:0;;;;;;;15163:12;15180:10;-1:-1:-1;;;;;15180:15:0;15203:7;15180:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15162:53;;;15234:7;15226:16;;;;;;15057:193;15013:237;:::o;16161:160::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;16248:8:::1;:16:::0;16234:41:::1;::::0;;-1:-1:-1;;;16248:16:0;;::::1;-1:-1:-1::0;;;;;16248:16:0;;::::1;23145:34:1::0;;23215:15;;23210:2;23195:18;;23188:43;16234:41:0::1;::::0;23065:18:1;16234:41:0::1;;;;;;;16286:8;:27:::0;;-1:-1:-1;;;;;16286:27:0;;::::1;-1:-1:-1::0;;;16286:27:0::1;::::0;::::1;::::0;;;::::1;::::0;;16161:160::o;11354:1998::-;4717:8;;4729:1;4717:13;4709:22;;;;;;4753:1;4742:8;:12;7309:6:::1;::::0;::::1;;7308:7;7300:26;;;::::0;-1:-1:-1;;;7300:26:0;;23444:2:1;7300:26:0::1;::::0;::::1;23426:21:1::0;23483:1;23463:18;;;23456:29;-1:-1:-1;;;23501:18:1;;;23494:36;23547:18;;7300:26:0::1;23242:329:1::0;7300:26:0::1;11560:4:::2;:9;;;11571:4;:10;;;7542:15;7631:23;7638:4;;3229:8;13459:18:::0;;;13458:33;;13360:139;7631:23:::2;7626:267;;3004:8;13459:18:::0;;;13458:33;7671:211:::2;;7766:16;::::0;-1:-1:-1;;;;;7740:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;;:42:::2;;7732:75;;;::::0;-1:-1:-1;;;7732:75:0;;23778:2:1;7732:75:0::2;::::0;::::2;23760:21:1::0;23817:2;23797:18;;;23790:30;-1:-1:-1;;;23836:18:1;;;23829:50;23896:18;;7732:75:0::2;23576:344:1::0;7732:75:0::2;3408:6;7836:9;:30;;;;:::i;:::-;7826:40;;7671:211;7040:3:::3;::::0;-1:-1:-1;;;;;7040:3:0::3;7026:10;:17;7018:38;;;;-1:-1:-1::0;;;7018:38:0::3;;;;;;;:::i;:::-;11618:9:::4;::::0;::::4;::::0;-1:-1:-1;;;;;11648:23:0;::::4;::::0;;:45:::4;;;11688:5;-1:-1:-1::0;;;;;11675:18:0::4;:9;-1:-1:-1::0;;;;;11675:18:0::4;;11648:45;11640:72;;;::::0;-1:-1:-1;;;11640:72:0;;24127:2:1;11640:72:0::4;::::0;::::4;24109:21:1::0;24166:2;24146:18;;;24139:30;-1:-1:-1;;;24185:18:1;;;24178:44;24239:18;;11640:72:0::4;23925:338:1::0;11640:72:0::4;11734:12;11747:6;11734:20;;;;;;:::i;:::-;::::0;;;::::4;::::0;;;;;::::4;::::0;;;;::::4;;11733:21;11725:43;;;::::0;-1:-1:-1;;;11725:43:0;;24751:2:1;11725:43:0::4;::::0;::::4;24733:21:1::0;24790:1;24770:18;;;24763:29;-1:-1:-1;;;24808:18:1;;;24801:39;24857:18;;11725:43:0::4;24549:332:1::0;11725:43:0::4;11793:4;::::0;3183:3:::4;13459:18:::0;;;13458:33;11781:122:::4;;11844:16;11861:6;11844:24;;;;;;:::i;:::-;::::0;;;::::4;::::0;;::::4;::::0;;;;;;;;-1:-1:-1;;;;;11844:29:0;::::4;;::::0;;;;;;;;::::4;;11836:55;;;::::0;-1:-1:-1;;;11836:55:0;;25088:2:1;11836:55:0::4;::::0;::::4;25070:21:1::0;25127:2;25107:18;;;25100:30;-1:-1:-1;;;25146:18:1;;;25139:43;25199:18;;11836:55:0::4;24886:337:1::0;11836:55:0::4;11915:14;11932:60;11943:4;:11;;;11956:5;11963:4;:16;;;11981:4;:10;;;11932;:60::i;:::-;12012:21;::::0;;;:13:::4;:21;::::0;;;;;11915:77;;-1:-1:-1;12012:21:0::4;;12011:22;12003:49;;;::::0;-1:-1:-1;;;12003:49:0;;25430:2:1;12003:49:0::4;::::0;::::4;25412:21:1::0;25469:2;25449:18;;;25442:30;-1:-1:-1;;;25488:18:1;;;25481:44;25542:18;;12003:49:0::4;25228:338:1::0;12003:49:0::4;12065:12;12103:19;12141:8;;;;;;;;;-1:-1:-1::0;;;;;12141:8:0::4;-1:-1:-1::0;;;;;12141:16:0::4;;12158:3;12163:5;12170;12177:4;:16;;;12195:4;:10;;;12141:65;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;-1:-1:-1::0;;12141:65:0::4;::::0;::::4;;::::0;::::4;::::0;;;::::4;::::0;::::4;:::i;:::-;;;12137:345;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;12380:6:::0;-1:-1:-1;12137:345:0::4;;;;;;::::0;;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12460:6:0;-1:-1:-1;12137:345:0::4;;;12285:4:::0;;-1:-1:-1;12291:3:0;-1:-1:-1;12137:345:0::4;12532:3;-1:-1:-1::0;;;;;12501:82:0::4;12525:5;-1:-1:-1::0;;;;;12501:82:0::4;12512:4;:11;;;12501:82;12537:4;:16;;;12555:4;:10;;;12567:7;12576:6;12501:82;;;;;;;;;:::i;:::-;;;;;;;;12088:507;12611:7;12607:738;;;12635:21;::::0;;;:13:::4;:21;::::0;;;;:28;;-1:-1:-1;;12635:28:0::4;12659:4;12635:28;::::0;;12607:738:::4;;;-1:-1:-1::0;;;;;12685:23:0;::::4;12681:664;;12752:22;::::0;;;;::::4;::::0;;-1:-1:-1;;;;;12752:22:0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;-1:-1:-1;12725:24:0;;;:16:::4;:24:::0;;;;;;:49;;;;-1:-1:-1;;;;;;12725:49:0::4;::::0;::::4;::::0;;;::::4;::::0;;;;;;12752:22;;12725:24;;:49:::4;::::0;-1:-1:-1;12725:49:0;::::4;::::0;::::4;::::0;::::4;:::i;:::-;;;;;12835:3;-1:-1:-1::0;;;;;12794:82:0::4;12828:5;-1:-1:-1::0;;;;;12794:82:0::4;12815:4;:11;;;12794:82;12840:4;:16;;;12858:4;:10;;;12870:5;12794:82;;;;;;;;:::i;:::-;;;;;;;;12681:664;;;13005:5;:7:::0;;;:5:::4;:7;::::0;::::4;:::i;:::-;;;;;;13222:4;:16;;;13085:9;-1:-1:-1::0;;;;;13032:301:0::4;13061:5;-1:-1:-1::0;;;;;13032:301:0::4;;13136:25;;;13163:3;13168:5;13113:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1::0;;;;;13113:61:0::4;;;;;;;-1:-1:-1::0;;;;;13113:61:0::4;;;;;;;;;;;13201:1;13257::::0;13302:6:::4;13327:5;;13032:301;;;;;;;;;;:::i;:::-;;;;;;;;12681:664;-1:-1:-1::0;;7964:11:0;;;-1:-1:-1;7960:351:0::2;;8051:8;:16:::0;7992:17:::2;::::0;8037:30:::2;::::0;-1:-1:-1;;;8051:16:0;::::2;-1:-1:-1::0;;;;;8051:16:0::2;8037:11;:30;:::i;:::-;8023:9;8013:19;::::0;:7;:19:::2;:::i;:::-;8012:56;;;;:::i;:::-;-1:-1:-1::0;;;;;8100:22:0;::::2;8083:14;8100:22:::0;;;:15:::2;:22;::::0;;;;;7992:76;;-1:-1:-1;8145:18:0;;::::2;8137:47;;;::::0;-1:-1:-1;;;8137:47:0;;29633:2:1;8137:47:0::2;::::0;::::2;29615:21:1::0;29672:2;29652:18;;;29645:30;-1:-1:-1;;;29691:18:1;;;29684:46;29747:18;;8137:47:0::2;29431:340:1::0;8137:47:0::2;8224:18;8233:9:::0;8224:6;:18:::2;:::i;:::-;-1:-1:-1::0;;;;;8199:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;:43;;;;8257:8:::2;:42:::0;;8289:9;;8199:22;8257:42:::2;::::0;8289:9;;-1:-1:-1;;;;;8257:42:0::2;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;8257:42:0::2;;;;;-1:-1:-1::0;;;;;8257:42:0::2;;;;;;7977:334;;7960:351;-1:-1:-1::0;;4788:1:0;4777:8;:12;-1:-1:-1;;;;;;11354:1998:0:o;13538:205::-;13686:48;;;;;;;30265:25:1;;;;-1:-1:-1;;;;;30326:32:1;;;;30306:18;;;30299:60;30375:18;;;30368:34;;;;30418:18;;;;30411:34;;;;13686:48:0;;;;;;;;;;30237:19:1;;;;13686:48:0;;13676:59;;;;;;13538:205::o;16724:139::-;7040:3;;-1:-1:-1;;;;;7040:3:0;7026:10;:17;7018:38;;;;-1:-1:-1;;;7018:38:0;;;;;;;:::i;:::-;16785:10:::1;:17:::0;;-1:-1:-1;;;;;;16785:17:0::1;-1:-1:-1::0;;;;;16785:17:0;;::::1;::::0;;::::1;::::0;;;16828:3:::1;::::0;16818:37:::1;::::0;16839:15:::1;6301:25:1::0;;16785:17:0;;16828:3:::1;::::0;16818:37:::1;::::0;6289:2:1;6274:18;16818:37:0::1;;;;;;;16724:139:::0;:::o;20452:516::-;-1:-1:-1;;;;;20549:22:0;;20526:20;20549:22;;;;;;;;;;20526:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20582:24;20609:9;20619:6;20609:17;;;;;;:::i;:::-;;;;;;;;;;;;;;20647:10;;20609:17;;-1:-1:-1;;;;;;20647:10:0;;;:21;;;;:46;;;;-1:-1:-1;;;;;;20672:21:0;;;;20647:46;20639:72;;;;-1:-1:-1;;;20639:72:0;;;;;;;:::i;:::-;20744:3;;-1:-1:-1;;;;;20744:3:0;20730:10;:17;;:50;;-1:-1:-1;20765:15:0;;;;-1:-1:-1;;;;;20765:15:0;20751:10;:29;20730:50;20722:69;;;;-1:-1:-1;;;20722:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20816:22:0;;:13;:22;;;;;;;;;;20810:36;;;;;:::i;:::-;:41;;-1:-1:-1;20802:71:0;;;;-1:-1:-1;;;20802:71:0;;31334:2:1;20802:71:0;;;31316:21:1;31373:2;31353:18;;;31346:30;-1:-1:-1;;;31392:18:1;;;31385:47;31449:18;;20802:71:0;31132:341:1;20802:71:0;20886:20;;-1:-1:-1;;;;;;20886:20:0;-1:-1:-1;;;;;20886:20:0;;;;;;;;20924:36;;;;;;;;;;20935:6;;20924:36;:::i;:::-;;;;;;;;20515:453;;20452:516;;:::o;26184:223::-;26327:7;26354:45;26367:6;;26354:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26375:10:0;;-1:-1:-1;26387:11:0;;-1:-1:-1;26354:12:0;;-1:-1:-1;26354:45:0:i;:::-;26347:52;26184:223;-1:-1:-1;;;;;26184:223:0:o;21007:404::-;-1:-1:-1;;;;;21115:19:0;;21092:20;21115:19;;;;;;;;;;21092:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21145:24;21172:9;21182:6;21172:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21210:10;;21172:17;;-1:-1:-1;;;;;;21210:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21232:18:0;;;;21210:40;21202:66;;;;-1:-1:-1;;;21202:66:0;;;;;;;:::i;:::-;21301:3;;-1:-1:-1;;;;;21301:3:0;21287:10;:17;;:50;;-1:-1:-1;21322:15:0;;;;-1:-1:-1;;;;;21322:15:0;21308:10;:29;21287:50;21279:69;;;;-1:-1:-1;;;21279:69:0;;;;;;;:::i;:::-;21361:42;21378:6;21386:10;21398:4;21361:16;:42::i;:::-;21081:330;;21007:404;;:::o;17673:190::-;7040:3;;-1:-1:-1;;;;;7040:3:0;7026:10;:17;7018:38;;;;-1:-1:-1;;;7018:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17744:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;17743:16;17735:25;;;::::0;::::1;;-1:-1:-1::0;;;;;17771:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;17771:22:0::1;17789:4;17771:22:::0;;::::1;::::0;;;17804:6:::1;:19:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;17804:19:0::1;::::0;::::1;::::0;;17839:16;;2325:51:1;;;17839:16:0::1;::::0;2298:18:1;17839:16:0::1;;;;;;;17673:190:::0;:::o;22777:148::-;22854:16;22890:19;22910:6;22890:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22883:34;;;;;;;;;;;;;;;22890:27;22883:34;;;22890:27;22883:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22883:34:0;;;;;;;;;;;;;;;;;;;;;;;22777:148;;;:::o;15840:207::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;15937:9:::1;15932:108;15952:18:::0;;::::1;15932:108;;;15992:4;:17;16010:7:::0;;16018:1;16010:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;16022:5;15992:36;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15972:3;;;;;:::i;:::-;;;;15932:108;;13793:764:::0;13902:14;13919:48;13930:7;13939:5;13946:12;13960:6;13919:10;:48::i;:::-;13987:21;;;;:13;:21;;;;;;13902:65;;-1:-1:-1;13987:21:0;;13986:22;13978:49;;;;-1:-1:-1;;;13978:49:0;;25430:2:1;13978:49:0;;;25412:21:1;25469:2;25449:18;;;25442:30;-1:-1:-1;;;25488:18:1;;;25481:44;25542:18;;13978:49:0;25228:338:1;13978:49:0;14040:25;14068:24;;;:16;:24;;;;;14111:9;;-1:-1:-1;;;;;14111:9:0;14103:51;;;;-1:-1:-1;;;14103:51:0;;32540:2:1;14103:51:0;;;32522:21:1;32579:2;32559:18;;;32552:30;-1:-1:-1;;;32598:18:1;;;32591:45;32653:18;;14103:51:0;32338:339:1;14103:51:0;14181:9;;;14222:11;;14201:32;;-1:-1:-1;;;;;14181:9:0;;;;14167:11;;14222;14201:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14271:22:0;;-1:-1:-1;;;;;;14271:22:0;;;-1:-1:-1;;14304:16:0;;;;;;;;;;14291:1;14304:16;;;;14201:32;;-1:-1:-1;14304:16:0;;14271:22;14304:11;;;-1:-1:-1;14304:16:0;:::i;:::-;-1:-1:-1;14351:8:0;;:57;;-1:-1:-1;;;14351:57:0;;14334:12;;-1:-1:-1;;;;;14351:8:0;;:16;;:57;;14368:3;;14373:5;;14380;;14387:12;;14401:6;;14351:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14351:57:0;;;;;;;;;;;;:::i;:::-;14333:75;;;14427:7;14419:16;;;;;;14448:21;;;;:13;:21;;;;;;;:28;;-1:-1:-1;;14448:28:0;14472:4;14448:28;;;14492:57;-1:-1:-1;;;;;14492:57:0;;;14512:7;;14492:57;;;;14528:12;;14542:6;;8852:25:1;;;8908:2;8893:18;;8886:34;8840:2;8825:18;;8678:248;23803:460:0;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;24006:11;24043:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;24073:29:0;;::::1;24043:59;24035:68;;;::::0;::::1;;24121:9;24116:140;24140:6;24136:1;:10;24116:140;;;24201:43;;;;;;;;24214:9;;24224:1;24214:12;;;;;;;:::i;:::-;;;;;;;24201:43;;;;24228:12;;24241:1;24228:15;;;;;;;:::i;:::-;;;;;;;24201:43;;::::0;24168:14:::1;:30;24183:11;;24195:1;24183:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;24168:30:::0;;-1:-1:-1;24168:30:0;;::::1;::::0;;;;;;-1:-1:-1;24168:30:0;:76;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;24148:3;::::1;::::0;::::1;:::i;:::-;;;;24116:140;;;;23978:285;23803:460:::0;;;;;;:::o;3691:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3691:55:0;;-1:-1:-1;3691:55:0;;-1:-1:-1;3691:55:0:o;25176:672::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25400:19:0;::::1;25377:20;25400:19:::0;;;::::1;::::0;;;;;;25377:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25430:24;25457:9;25467:6;25457:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;25493:10;;25457:17;;-1:-1:-1;;;;;;25493:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;25515:18:0;::::1;::::0;::::1;25493:40;25485:66;;;;-1:-1:-1::0;;;25485:66:0::1;;;;;;;:::i;:::-;25581:11:::0;25618:32;;::::1;25610:41;;;::::0;::::1;;25690:15;25664;25680:6;25664:23;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:41;25723:9:::1;25718:123;25742:6;25738:1;:10;25718:123;;;25811:15;;25827:1;25811:18;;;;;;;:::i;:::-;;;;;;;25770:14;25785:6;25770:22;;;;;;:::i;:::-;;;;;;;;;;;;;:38;25793:11;;25805:1;25793:14;;;;;;;:::i;:::-;;;;;;;25770:38;;;;;;;;;;;:59;;;;25750:3;;;;;:::i;:::-;;;;25718:123;;;;25366:482;;;25176:672:::0;;;;;;:::o;25883:266::-;-1:-1:-1;;;;;26059:19:0;;26016:7;26059:19;;;;;;;;;;26036:42;;26016:7;;26059:19;26036:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26096:45;26109:6;26117:10;26129:11;26096:12;:45::i;:::-;26089:52;;;25883:266;;;;;;:::o;15368:210::-;15434:8;:20;;-1:-1:-1;;15465:24:0;;;;;15518:3;;:25;;-1:-1:-1;;;;;15434:20:0;;;;15419:12;;-1:-1:-1;;;;;15518:3:0;;15434:20;;15518:25;22708:205:1;19557:719:0;-1:-1:-1;;;;;19745:19:0;;19722:20;19745:19;;;;;;;;;;19722:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19775:24;19802:9;19812:6;19802:17;;;;;;:::i;:::-;;;;;;;;;;;;;;19840:10;;19802:17;;-1:-1:-1;;;;;;19840:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;19862:18:0;;;;19840:40;19832:66;;;;-1:-1:-1;;;19832:66:0;;;;;;;:::i;:::-;19931:3;;-1:-1:-1;;;;;19931:3:0;19917:10;:17;;:50;;-1:-1:-1;19952:15:0;;;;-1:-1:-1;;;;;19952:15:0;19938:10;:29;19917:50;19909:69;;;;-1:-1:-1;;;19909:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19995:20:0;;;19991:77;;20032:15;;;:24;;-1:-1:-1;;;;;;20032:24:0;-1:-1:-1;;;;;20032:24:0;;;;;19991:77;20078:15;;;:24;;;20117:21;;20113:96;;20155:42;20172:6;20180:10;;20155:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20192:4:0;;-1:-1:-1;20155:16:0;;-1:-1:-1;;20155:42:0:i;:::-;20253:6;-1:-1:-1;;;;;20226:42:0;20247:4;-1:-1:-1;;;;;20226:42:0;;20239:6;20261;20226:42;;;;;;;:::i;:::-;;;;;;;;19711:565;;19557:719;;;;;:::o;24308:829::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24539:19:0;::::1;24516:20;24539:19:::0;;;::::1;::::0;;;;;;24516:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24569:24;24596:9;24606:6;24596:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;24634:10;;24596:17;;-1:-1:-1;;;;;;24634:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;24656:18:0;::::1;::::0;::::1;24634:40;24626:66;;;;-1:-1:-1::0;;;24626:66:0::1;;;;;;;:::i;:::-;24718:15;::::0;;::::1;::::0;13459:18;;13458:33;24703:69:::1;;;::::0;-1:-1:-1;;;24703:69:0;;33179:2:1;24703:69:0::1;::::0;::::1;33161:21:1::0;33218:2;33198:18;;;33191:30;-1:-1:-1;;;33237:18:1;;;33230:42;33289:18;;24703:69:0::1;32977:336:1::0;24703:69:0::1;24802:11:::0;24839:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;24869:29:0;;::::1;24839:59;24831:68;;;::::0;::::1;;24912:49;24964:13;24978:6;24964:21;;;;;;:::i;:::-;;;;;;;;;;;;;24912:73;;25001:9;24996:134;25020:6;25016:1;:10;24996:134;;;25075:43;;;;;;;;25088:9;;25098:1;25088:12;;;;;;;:::i;:::-;;;;;;;25075:43;;;;25102:12;;25115:1;25102:15;;;;;;;:::i;:::-;;;;;;;25075:43;;::::0;25048:8:::1;:24;25057:11;;25069:1;25057:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;25048:24:::0;;-1:-1:-1;25048:24:0;;::::1;::::0;;;;;;-1:-1:-1;25048:24:0;:70;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;25028:3;::::1;::::0;::::1;:::i;:::-;;;;24996:134;;;;24505:632;;;;24308:829:::0;;;;;;;:::o;3450:47::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16898:200::-;16960:10;;-1:-1:-1;;;;;16960:10:0;16946;:24;16938:33;;;;;;17001:10;;16996:3;;16987:42;;17013:15;6301:25:1;;-1:-1:-1;;;;;17001:10:0;;;;16996:3;;;;16987:42;;6289:2:1;6274:18;16987:42:0;;;;;;;17046:10;;;17040:3;:16;;-1:-1:-1;;;;;;17040:16:0;;;-1:-1:-1;;;;;17046:10:0;;17040:16;;;;17067:23;;;16898:200::o;26455:376::-;26546:4;26563:16;26582:14;26597:6;26582:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:34;;;;;;;;;;-1:-1:-1;3102:3:0;13459:18;;;13458:33;26627:89;;;26700:4;26693:11;;;;;26627:89;26737:15;26753:6;26737:23;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;3102:3:0;13459:18;;;13458:33;26778:45;26771:52;;;26455:376;;;;;:::o;9461:1429::-;4717:8;;4729:1;4717:13;4709:22;;;;;;4753:1;4742:8;:12;7309:6:::1;::::0;::::1;;7308:7;7300:26;;;::::0;-1:-1:-1;;;7300:26:0;;23444:2:1;7300:26:0::1;::::0;::::1;23426:21:1::0;23483:1;23463:18;;;23456:29;-1:-1:-1;;;23501:18:1;;;23494:36;23547:18;;7300:26:0::1;23242:329:1::0;7300:26:0::1;-1:-1:-1::0;;;;;9675:23:0;::::2;::::0;;:50:::2;;-1:-1:-1::0;;;;;;9702:23:0;::::2;9715:10;9702:23;9675:50;9667:77;;;::::0;-1:-1:-1;;;9667:77:0;;24127:2:1;9667:77:0::2;::::0;::::2;24109:21:1::0;24166:2;24146:18;;;24139:30;-1:-1:-1;;;24185:18:1;;;24178:44;24239:18;;9667:77:0::2;23925:338:1::0;9667:77:0::2;9792:10;9755:20;9778:25:::0;;;::::2;::::0;;;;;;9755:48;;::::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9825:12;9838:6;9825:20;;;;;;:::i;:::-;::::0;;;::::2;::::0;;;;;::::2;::::0;;;;::::2;;9824:21;9816:43;;;::::0;-1:-1:-1;;;9816:43:0;;24751:2:1;9816:43:0::2;::::0;::::2;24733:21:1::0;24790:1;24770:18;;;24763:29;-1:-1:-1;;;24808:18:1;;;24801:39;24857:18;;9816:43:0::2;24549:332:1::0;9816:43:0::2;9872:24;9899:33;9906:4;;3183:3;13459:18:::0;;;13458:33;;13360:139;9899:33:::2;9872:60;;9948:19;9943:115;;9992:16;10009:6;9992:24;;;;;;:::i;:::-;::::0;;;::::2;::::0;;::::2;::::0;;;;;;;;10017:10:::2;9992:36;::::0;;;;;;;;::::2;;9984:62;;;::::0;-1:-1:-1;;;9984:62:0;;25088:2:1;9984:62:0::2;::::0;::::2;25070:21:1::0;25127:2;25107:18;;;25100:30;-1:-1:-1;;;25146:18:1;;;25139:43;25199:18;;9984:62:0::2;24886:337:1::0;9984:62:0::2;10082:4;::::0;3229:8:::2;13459:18:::0;;;13458:33;10070:697:::2;;10115:24;10142:9;10152:6;10142:17;;;;;;:::i;:::-;;;;;;;;;;;;;10115:44;;10201:19;:47;;;;-1:-1:-1::0;10224:10:0;;-1:-1:-1;;;;;10224:10:0::2;:24:::0;10201:47:::2;10200:94;;;-1:-1:-1::0;10284:10:0;;-1:-1:-1;;;;;10284:10:0::2;10270;:24;10200:94;10174:169;;;;-1:-1:-1::0;;;10174:169:0::2;;;;;;;:::i;:::-;2948:3;13459:18:::0;;;13458:33;10364:67:::2;;;;-1:-1:-1::0;10407:10:0;;-1:-1:-1;;;;;10407:10:0::2;10421;10407:24;10364:67;10360:133;;;10462:6;:15;;;10452:25;;;;10360:133;3004:8;13459:18:::0;;;13458:33;10509:247:::2;;;10569:12;10584:46;10597:6:::0;10605:10;10617:5;10584:12:::2;:46::i;:::-;10569:61;;10649:17;10661:4;10649:11;:17::i;:::-;10550:132;10509:247;;;10692:9;:13:::0;10688:68:::2;;10726:14;10738:1;10726:11;:14::i;:::-;10100:667;10070:697;10779:5;:7:::0;;;:5:::2;:7;::::0;::::2;:::i;:::-;;;;;;10848:10;10825:3;-1:-1:-1::0;;;;;10802:80:0::2;10813:10;-1:-1:-1::0;;;;;10802:80:0::2;;10830:5;;10837:9;10860:6;10868;10876:5;;10802:80;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;4788:1:0;4777:8;:12;-1:-1:-1;;;;;;9461:1429:0:o;15621:167::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;15732:5:::1;15709:12;15722:6;;15709:20;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:28;;;::::1;;-1:-1:-1::0;;15709:28:0;;::::1;::::0;;;::::1;::::0;;;15753:27:::1;::::0;::::1;::::0;15766:6;;;;15774:5;;15753:27:::1;:::i;:::-;;;;;;;;15621:167:::0;;;:::o;23006:751::-;23078:48;23129:16;23146:6;23129:24;;;;;;:::i;:::-;;;;;;;;;;;;;23078:75;;23164:34;23201:19;23221:6;23201:27;;;;;;:::i;:::-;;;;;;;;;;;;;;23260:23;;23201:27;;-1:-1:-1;23260:23:0;23239:18;;23357:286;23381:8;23377:1;:12;23357:286;;;23415:16;23432:1;23415:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23415:19:0;23453:21;;;;;;;;;;;;23415:19;;-1:-1:-1;23453:21:0;;23449:183;;;23495:3;;;;:::i;:::-;;;;23357:286;;23449:183;23539:10;;;;:::i;:::-;;;;23590:16;23607:8;23590:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23590:26:0;23568:16;23585:1;23568:19;;;;;;;;:::i;:::-;;;;;;;;;:48;;;;;-1:-1:-1;;;;;23568:48:0;;;;;-1:-1:-1;;;;;23568:48:0;;;;;;23357:286;;;-1:-1:-1;23670:8:0;23653:97;23684:10;23680:1;:14;23653:97;;;23716:16;:22;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;23716:22:0;;;;;-1:-1:-1;;;;;;23716:22:0;;;;;;23696:3;;;;:::i;:::-;;;;23653:97;;;;23067:690;;;;;23006:751;:::o;16606:82::-;7170:10;7162:19;;;;:7;:19;;;;;;;;7154:42;;;;-1:-1:-1;;;7154:42:0;;;;;;;:::i;:::-;16668:4:::1;:12:::0;16606:82::o;21453:408::-;-1:-1:-1;;;;;21564:19:0;;21541:20;21564:19;;;;;;;;;;21541:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21594:24;21621:9;21631:6;21621:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21659:10;;21621:17;;-1:-1:-1;;;;;;21659:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21681:18:0;;;;21659:40;21651:66;;;;-1:-1:-1;;;21651:66:0;;;;;;;:::i;:::-;21750:3;;-1:-1:-1;;;;;21750:3:0;21736:10;:17;;:50;;-1:-1:-1;21771:15:0;;;;-1:-1:-1;;;;;21771:15:0;21757:10;:29;21736:50;21728:69;;;;-1:-1:-1;;;21728:69:0;;;;;;;:::i;:::-;21810:43;21827:6;21835:10;21847:5;21810:16;:43::i;18362:97::-;18409:16;18445:6;18438:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18438:13:0;;;;;;;;;;;;;;;;;;;;;;;18362:97;:::o;14724:153::-;-1:-1:-1;;;;;14787:25:0;;;;;;:15;:25;;;;;:38;;14816:9;;14787:25;:38;;14816:9;;14787:38;:::i;:::-;;;;-1:-1:-1;;14841:28:0;;14859:9;6301:25:1;;-1:-1:-1;;;;;14841:28:0;;;;;6289:2:1;6274:18;14841:28:0;;;;;;;14724:153;:::o;22577:149::-;22657:7;22684:19;22704:6;22684:27;;;;;;:::i;:::-;;;;;;;;;;;;;;:34;;22577:149;-1:-1:-1;;22577:149:0:o;21869:654::-;21978:42;22023:16;22040:6;22023:24;;;;;;:::i;:::-;;;;;;;;;;;;;21978:69;;22058:34;22095:19;22115:6;22095:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;22133:12:0;;22156:360;22180:10;:17;22176:1;:21;22156:360;;;22226:10;22237:1;22226:13;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;22258:15:0;;;;;;;;;;;;;;;22226:13;;-1:-1:-1;22258:15:0;;:24;;;;;;22254:73;;;22303:8;;22254:73;22345:5;22341:73;;;22371:27;;;;;;;-1:-1:-1;22371:27:0;;;;;;;;;-1:-1:-1;;;;;;22371:27:0;-1:-1:-1;;;;;22371:27:0;;;;;22341:73;-1:-1:-1;;;;;22428:15:0;;;;;;;;;;;;;;;:23;;-1:-1:-1;;22428:23:0;;;;;;;22471:33;;;;;22484:6;;22428:23;;22471:33;:::i;:::-;;;;;;;;22156:360;22199:3;;;;:::i;:::-;;;;22156:360;;26839:961;26981:7;27001:30;27034:13;27048:6;27034:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:33;;;;;;;;;;27001:66;;;;;;;;;;;;;;;;;;;;;;27034:21;-1:-1:-1;27001:66:0;27201:38;27220:6;27034:33;27201:18;:38::i;:::-;27197:127;;;27280:32;27294:18;27280:11;:32;:::i;:::-;27263:49;;:14;:49;:::i;:::-;27256:56;;;;;;;27197:127;27336:31;27370:26;;;:14;:26;;;;;;;;27336:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27550:32;;;27549:69;;27603:15;27549:69;;;27586:14;27549:69;27530:88;;27629:19;27673;27652:18;:40;27651:85;;27717:19;27651:85;;;27696:18;27651:85;27629:107;-1:-1:-1;27767:25:0;27629:107;27767:11;:25;:::i;:::-;27756:36;;:8;:36;:::i;:::-;27749:43;26839:961;-1:-1:-1;;;;;;;;;;;;26839:961:0:o;8478:426::-;8554:4;8541:9;:17;;8533:47;;;;-1:-1:-1;;;8533:47:0;;34620:2:1;8533:47:0;;;34602:21:1;34659:2;34639:18;;;34632:30;-1:-1:-1;;;34678:18:1;;;34671:47;34735:18;;8533:47:0;34418:341:1;8533:47:0;8595:8;;8591:127;;8650:3;;:25;;8633:12;;-1:-1:-1;;;;;8650:3:0;;8666:4;;8633:12;8650:25;8633:12;8650:25;8666:4;8650:3;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8632:43;;;8698:7;8690:16;;;;;;8605:113;8591:127;8744:4;8732:9;:16;8728:169;;;8793:12;8810:10;8833:16;8845:4;8833:9;:16;:::i;:::-;8810:44;;;22708:205:1;8728:169:0;8478:426;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:127:1;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:225;232:4;224:6;220:17;303:6;291:10;288:22;-1:-1:-1;;;;;255:10:1;252:34;249:62;246:88;;;314:18;;:::i;:::-;350:2;343:22;-1:-1:-1;146:225:1:o;376:249::-;486:2;467:13;;-1:-1:-1;;463:27:1;451:40;;-1:-1:-1;;;;;506:34:1;;542:22;;;503:62;500:88;;;568:18;;:::i;:::-;604:2;597:22;-1:-1:-1;;376:249:1:o;630:187::-;679:4;-1:-1:-1;;;;;704:6:1;701:30;698:56;;;734:18;;:::i;:::-;-1:-1:-1;800:2:1;779:15;-1:-1:-1;;775:29:1;806:4;771:40;;630:187::o;822:421::-;887:5;917:36;946:6;917:36;:::i;:::-;982:2;976:9;994:31;1022:2;1014:6;994:31;:::i;:::-;1043:6;1034:15;;1073:6;1065;1058:22;1113:3;1104:6;1099:3;1095:16;1092:25;1089:45;;;1130:1;1127;1120:12;1089:45;1180:6;1175:3;1168:4;1160:6;1156:17;1143:44;1235:1;1228:4;1219:6;1211;1207:19;1203:30;1196:41;;;822:421;;;;;:::o;1248:222::-;1291:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:55;;1362:1;1359;1352:12;1311:55;1384:80;1460:3;1451:6;1438:20;1431:4;1423:6;1419:17;1384:80;:::i;1475:322::-;1544:6;1597:2;1585:9;1576:7;1572:23;1568:32;1565:52;;;1613:1;1610;1603:12;1565:52;1653:9;1640:23;-1:-1:-1;;;;;1678:6:1;1675:30;1672:50;;;1718:1;1715;1708:12;1672:50;1741;1783:7;1774:6;1763:9;1759:22;1741:50;:::i;1994:180::-;2053:6;2106:2;2094:9;2085:7;2081:23;2077:32;2074:52;;;2122:1;2119;2112:12;2074:52;-1:-1:-1;2145:23:1;;1994:180;-1:-1:-1;1994:180:1:o;2387:118::-;2473:5;2466:13;2459:21;2452:5;2449:32;2439:60;;2495:1;2492;2485:12;2510:241;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;2674:9;2661:23;2693:28;2715:5;2693:28;:::i;2756:173::-;2824:20;;-1:-1:-1;;;;;2873:31:1;;2863:42;;2853:70;;2919:1;2916;2909:12;2853:70;2756:173;;;:::o;2934:186::-;2993:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3085:29;3104:9;3085:29;:::i;3310:258::-;3382:1;3392:113;3406:6;3403:1;3400:13;3392:113;;;3482:11;;;3476:18;3463:11;;;3456:39;3428:2;3421:10;3392:113;;;3523:6;3520:1;3517:13;3514:48;;;-1:-1:-1;;3558:1:1;3540:16;;3533:27;3310:258::o;3573:257::-;3614:3;3652:5;3646:12;3679:6;3674:3;3667:19;3695:63;3751:6;3744:4;3739:3;3735:14;3728:4;3721:5;3717:16;3695:63;:::i;:::-;3812:2;3791:15;-1:-1:-1;;3787:29:1;3778:39;;;;3819:4;3774:50;;3573:257;-1:-1:-1;;3573:257:1:o;3835:314::-;-1:-1:-1;;;;;4010:32:1;;3992:51;;4079:2;4074;4059:18;;4052:30;;;-1:-1:-1;;4099:44:1;;4124:18;;4116:6;4099:44;:::i;:::-;4091:52;3835:314;-1:-1:-1;;;;3835:314:1:o;4154:348::-;4206:8;4216:6;4270:3;4263:4;4255:6;4251:17;4247:27;4237:55;;4288:1;4285;4278:12;4237:55;-1:-1:-1;4311:20:1;;-1:-1:-1;;;;;4343:30:1;;4340:50;;;4386:1;4383;4376:12;4340:50;4423:4;4415:6;4411:17;4399:29;;4475:3;4468:4;4459:6;4451;4447:19;4443:30;4440:39;4437:59;;;4492:1;4489;4482:12;4437:59;4154:348;;;;;:::o;4507:367::-;4570:8;4580:6;4634:3;4627:4;4619:6;4615:17;4611:27;4601:55;;4652:1;4649;4642:12;4601:55;-1:-1:-1;4675:20:1;;-1:-1:-1;;;;;4707:30:1;;4704:50;;;4750:1;4747;4740:12;4704:50;4787:4;4779:6;4775:17;4763:29;;4847:3;4840:4;4830:6;4827:1;4823:14;4815:6;4811:27;4807:38;4804:47;4801:67;;;4864:1;4861;4854:12;4879:965;5013:6;5021;5029;5037;5045;5053;5061;5114:3;5102:9;5093:7;5089:23;5085:33;5082:53;;;5131:1;5128;5121:12;5082:53;5171:9;5158:23;-1:-1:-1;;;;;5241:2:1;5233:6;5230:14;5227:34;;;5257:1;5254;5247:12;5227:34;5296:59;5347:7;5338:6;5327:9;5323:22;5296:59;:::i;:::-;5374:8;;-1:-1:-1;5270:85:1;-1:-1:-1;5270:85:1;;-1:-1:-1;5428:38:1;5462:2;5447:18;;5428:38;:::i;:::-;5418:48;;5485:38;5519:2;5508:9;5504:18;5485:38;:::i;:::-;5475:48;;5570:2;5559:9;5555:18;5542:32;5532:42;;5627:3;5616:9;5612:19;5599:33;5583:49;;5657:2;5647:8;5644:16;5641:36;;;5673:1;5670;5663:12;5641:36;;5712:72;5776:7;5765:8;5754:9;5750:24;5712:72;:::i;:::-;4879:965;;;;-1:-1:-1;4879:965:1;;-1:-1:-1;4879:965:1;;;;5686:98;;-1:-1:-1;;;4879:965:1:o;5849:301::-;5908:6;5961:2;5949:9;5940:7;5936:23;5932:32;5929:52;;;5977:1;5974;5967:12;5929:52;6016:9;6003:23;-1:-1:-1;;;;;6059:5:1;6055:46;6048:5;6045:57;6035:85;;6116:1;6113;6106:12;6717:1378;6862:6;6870;6878;6886;6894;6938:9;6929:7;6925:23;6968:3;6964:2;6960:12;6957:32;;;6985:1;6982;6975:12;6957:32;7008:29;7027:9;7008:29;:::i;:::-;6998:39;;7088:2;7077:9;7073:18;7060:32;-1:-1:-1;;;;;7152:2:1;7144:6;7141:14;7138:34;;;7168:1;7165;7158:12;7138:34;7206:6;7195:9;7191:22;7181:32;;7251:7;7244:4;7240:2;7236:13;7232:27;7222:55;;7273:1;7270;7263:12;7222:55;7296:74;7362:7;7357:2;7344:16;7339:2;7335;7331:11;7296:74;:::i;:::-;7286:84;;7389:38;7423:2;7412:9;7408:18;7389:38;:::i;:::-;7379:48;;7480:2;7469:9;7465:18;7452:32;7436:48;;7509:2;7499:8;7496:16;7493:36;;;7525:1;7522;7515:12;7493:36;;7548:52;7592:7;7581:8;7570:9;7566:24;7548:52;:::i;:::-;7538:62;-1:-1:-1;;7635:4:1;-1:-1:-1;;7616:17:1;;7612:28;7609:48;;;7653:1;7650;7643:12;7609:48;;7686:2;7680:9;7698:32;7723:6;7698:32;:::i;:::-;7782:3;7771:9;7767:19;7754:33;7746:6;7739:49;7821:40;7855:4;7844:9;7840:20;7821:40;:::i;:::-;7816:2;7804:15;;7797:65;7923:3;7908:19;;7895:33;7890:2;7878:15;;7871:58;7990:3;7975:19;;7962:33;7957:2;7945:15;;7938:58;8058:3;8043:19;;;8030:33;8024:3;8012:16;;8005:59;-1:-1:-1;6717:1378:1;;;;-1:-1:-1;6717:1378:1;7808:6;6717:1378::o;8100:391::-;8186:6;8194;8202;8210;8263:3;8251:9;8242:7;8238:23;8234:33;8231:53;;;8280:1;8277;8270:12;8231:53;8316:9;8303:23;8293:33;;8345:38;8379:2;8368:9;8364:18;8345:38;:::i;:::-;8100:391;;8335:48;;-1:-1:-1;;;;8430:2:1;8415:18;;8402:32;;8481:2;8466:18;8453:32;;8100:391::o;8931:260::-;8999:6;9007;9060:2;9048:9;9039:7;9035:23;9031:32;9028:52;;;9076:1;9073;9066:12;9028:52;9099:29;9118:9;9099:29;:::i;:::-;9089:39;;9147:38;9181:2;9170:9;9166:18;9147:38;:::i;:::-;9137:48;;8931:260;;;;;:::o;9196:547::-;9285:6;9293;9301;9309;9362:2;9350:9;9341:7;9337:23;9333:32;9330:52;;;9378:1;9375;9368:12;9330:52;9418:9;9405:23;-1:-1:-1;;;;;9443:6:1;9440:30;9437:50;;;9483:1;9480;9473:12;9437:50;9522:59;9573:7;9564:6;9553:9;9549:22;9522:59;:::i;:::-;9600:8;;9496:85;;-1:-1:-1;9682:2:1;9667:18;;9654:32;;9733:2;9718:18;9705:32;;-1:-1:-1;9196:547:1;-1:-1:-1;;;;9196:547:1:o;9971:390::-;10049:6;10057;10110:2;10098:9;10089:7;10085:23;10081:32;10078:52;;;10126:1;10123;10116:12;10078:52;10166:9;10153:23;-1:-1:-1;;;;;10191:6:1;10188:30;10185:50;;;10231:1;10228;10221:12;10185:50;10254;10296:7;10287:6;10276:9;10272:22;10254:50;:::i;:::-;10244:60;10351:2;10336:18;;;;10323:32;;-1:-1:-1;;;;9971:390:1:o;10366:1067::-;10459:6;10467;10520:2;10508:9;10499:7;10495:23;10491:32;10488:52;;;10536:1;10533;10526:12;10488:52;10559:29;10578:9;10559:29;:::i;:::-;10549:39;;10607:2;10660;10649:9;10645:18;10632:32;-1:-1:-1;;;;;10724:2:1;10716:6;10713:14;10710:34;;;10740:1;10737;10730:12;10710:34;10778:6;10767:9;10763:22;10753:32;;10823:7;10816:4;10812:2;10808:13;10804:27;10794:55;;10845:1;10842;10835:12;10794:55;10881:2;10868:16;10903:2;10899;10896:10;10893:36;;;10909:18;;:::i;:::-;10955:2;10952:1;10948:10;10938:20;;10987:2;10981:9;10999:40;11035:2;11031;11027:11;11019:6;10999:40;:::i;:::-;11074:18;;;11150:11;;;11146:20;;;11108:15;;;11178:19;;;11175:39;;;11210:1;11207;11200:12;11175:39;11234:11;;;;11254:148;11270:6;11265:3;11262:15;11254:148;;;11336:23;11355:3;11336:23;:::i;:::-;11324:36;;11287:12;;;;11380;;11254:148;;;11258:3;11421:6;11411:16;;;;;;;10366:1067;;;;;:::o;11438:658::-;11609:2;11661:21;;;11731:13;;11634:18;;;11753:22;;;11580:4;;11609:2;11832:15;;;;11806:2;11791:18;;;11580:4;11875:195;11889:6;11886:1;11883:13;11875:195;;;11954:13;;-1:-1:-1;;;;;11950:39:1;11938:52;;12045:15;;;;12010:12;;;;11986:1;11904:9;11875:195;;;-1:-1:-1;12087:3:1;;11438:658;-1:-1:-1;;;;;;11438:658:1:o;12101:578::-;12205:6;12213;12221;12274:2;12262:9;12253:7;12249:23;12245:32;12242:52;;;12290:1;12287;12280:12;12242:52;12330:9;12317:23;-1:-1:-1;;;;;12355:6:1;12352:30;12349:50;;;12395:1;12392;12385:12;12349:50;12434:70;12496:7;12487:6;12476:9;12472:22;12434:70;:::i;:::-;12523:8;;-1:-1:-1;12408:96:1;-1:-1:-1;;12608:2:1;12593:18;;12580:32;12621:28;12580:32;12621:28;:::i;:::-;12668:5;12658:15;;;12101:578;;;;;:::o;12684:1088::-;12842:6;12850;12858;12866;12874;12882;12935:2;12923:9;12914:7;12910:23;12906:32;12903:52;;;12951:1;12948;12941:12;12903:52;12991:9;12978:23;-1:-1:-1;;;;;13061:2:1;13053:6;13050:14;13047:34;;;13077:1;13074;13067:12;13047:34;13116:70;13178:7;13169:6;13158:9;13154:22;13116:70;:::i;:::-;13205:8;;-1:-1:-1;13090:96:1;-1:-1:-1;13293:2:1;13278:18;;13265:32;;-1:-1:-1;13309:16:1;;;13306:36;;;13338:1;13335;13328:12;13306:36;13377:72;13441:7;13430:8;13419:9;13415:24;13377:72;:::i;:::-;13468:8;;-1:-1:-1;13351:98:1;-1:-1:-1;13556:2:1;13541:18;;13528:32;;-1:-1:-1;13572:16:1;;;13569:36;;;13601:1;13598;13591:12;13569:36;;13640:72;13704:7;13693:8;13682:9;13678:24;13640:72;:::i;:::-;12684:1088;;;;-1:-1:-1;12684:1088:1;;-1:-1:-1;12684:1088:1;;13731:8;;12684:1088;-1:-1:-1;;;12684:1088:1:o;13777:916::-;13917:6;13925;13933;13941;13949;13957;14010:3;13998:9;13989:7;13985:23;13981:33;13978:53;;;14027:1;14024;14017:12;13978:53;14050:29;14069:9;14050:29;:::i;:::-;14040:39;;14126:2;14115:9;14111:18;14098:32;14088:42;;14181:2;14170:9;14166:18;14153:32;-1:-1:-1;;;;;14245:2:1;14237:6;14234:14;14231:34;;;14261:1;14258;14251:12;14231:34;14300:70;14362:7;14353:6;14342:9;14338:22;14300:70;:::i;:::-;14389:8;;-1:-1:-1;14274:96:1;-1:-1:-1;14477:2:1;14462:18;;14449:32;;-1:-1:-1;14493:16:1;;;14490:36;;;14522:1;14519;14512:12;14698:396;14776:6;14784;14837:2;14825:9;14816:7;14812:23;14808:32;14805:52;;;14853:1;14850;14843:12;14805:52;14893:9;14880:23;-1:-1:-1;;;;;14918:6:1;14915:30;14912:50;;;14958:1;14955;14948:12;14912:50;14981;15023:7;15014:6;15003:9;14999:22;14981:50;:::i;:::-;14971:60;;;15050:38;15084:2;15073:9;15069:18;15050:38;:::i;15099:322::-;15176:6;15184;15192;15245:2;15233:9;15224:7;15220:23;15216:32;15213:52;;;15261:1;15258;15251:12;15213:52;15284:29;15303:9;15284:29;:::i;:::-;15274:39;15360:2;15345:18;;15332:32;;-1:-1:-1;15411:2:1;15396:18;;;15383:32;;15099:322;-1:-1:-1;;;15099:322:1:o;15426:654::-;15539:6;15547;15555;15563;15571;15624:3;15612:9;15603:7;15599:23;15595:33;15592:53;;;15641:1;15638;15631:12;15592:53;15664:29;15683:9;15664:29;:::i;:::-;15654:39;;15712:38;15746:2;15735:9;15731:18;15712:38;:::i;:::-;15702:48;;15797:2;15786:9;15782:18;15769:32;15759:42;;15852:2;15841:9;15837:18;15824:32;-1:-1:-1;;;;;15871:6:1;15868:30;15865:50;;;15911:1;15908;15901:12;15865:50;15950:70;16012:7;16003:6;15992:9;15988:22;15950:70;:::i;:::-;15426:654;;;;-1:-1:-1;15426:654:1;;-1:-1:-1;16039:8:1;;15924:96;15426:654;-1:-1:-1;;;15426:654:1:o;16085:1163::-;16252:6;16260;16268;16276;16284;16292;16300;16353:3;16341:9;16332:7;16328:23;16324:33;16321:53;;;16370:1;16367;16360:12;16321:53;16393:29;16412:9;16393:29;:::i;:::-;16383:39;;16473:2;16462:9;16458:18;16445:32;-1:-1:-1;;;;;16537:2:1;16529:6;16526:14;16523:34;;;16553:1;16550;16543:12;16523:34;16592:70;16654:7;16645:6;16634:9;16630:22;16592:70;:::i;:::-;16681:8;;-1:-1:-1;16566:96:1;-1:-1:-1;16769:2:1;16754:18;;16741:32;;-1:-1:-1;16785:16:1;;;16782:36;;;16814:1;16811;16804:12;16782:36;16853:72;16917:7;16906:8;16895:9;16891:24;16853:72;:::i;:::-;16944:8;;-1:-1:-1;16827:98:1;-1:-1:-1;17032:2:1;17017:18;;17004:32;;-1:-1:-1;17048:16:1;;;17045:36;;;17077:1;17074;17067:12;17253:219;17402:2;17391:9;17384:21;17365:4;17422:44;17462:2;17451:9;17447:18;17439:6;17422:44;:::i;17477:696::-;17583:6;17591;17599;17607;17615;17623;17676:3;17664:9;17655:7;17651:23;17647:33;17644:53;;;17693:1;17690;17683:12;17644:53;17716:29;17735:9;17716:29;:::i;:::-;17706:39;;17796:2;17785:9;17781:18;17768:32;-1:-1:-1;;;;;17815:6:1;17812:30;17809:50;;;17855:1;17852;17845:12;17809:50;17894:59;17945:7;17936:6;17925:9;17921:22;17894:59;:::i;:::-;17972:8;;-1:-1:-1;17868:85:1;-1:-1:-1;18026:38:1;;-1:-1:-1;18060:2:1;18045:18;;18026:38;:::i;:::-;18016:48;;18111:2;18100:9;18096:18;18083:32;18073:42;;18162:3;18151:9;18147:19;18134:33;18124:43;;17477:696;;;;;;;;:::o;18178:540::-;18255:6;18263;18271;18324:2;18312:9;18303:7;18299:23;18295:32;18292:52;;;18340:1;18337;18330:12;18292:52;18380:9;18367:23;-1:-1:-1;;;;;18405:6:1;18402:30;18399:50;;;18445:1;18442;18435:12;18399:50;18484:59;18535:7;18526:6;18515:9;18511:22;18484:59;:::i;18954:334::-;19156:2;19138:21;;;19195:2;19175:18;;;19168:30;-1:-1:-1;;;19229:2:1;19214:18;;19207:40;19279:2;19264:18;;18954:334::o;19293:331::-;19495:2;19477:21;;;19534:1;19514:18;;;19507:29;-1:-1:-1;;;19567:2:1;19552:18;;19545:38;19615:2;19600:18;;19293:331::o;19629:127::-;19690:10;19685:3;19681:20;19678:1;19671:31;19721:4;19718:1;19711:15;19745:4;19742:1;19735:15;19761:125;19801:4;19829:1;19826;19823:8;19820:34;;;19834:18;;:::i;:::-;-1:-1:-1;19871:9:1;;19761:125::o;19891:127::-;19952:10;19947:3;19943:20;19940:1;19933:31;19983:4;19980:1;19973:15;20007:4;20004:1;19997:15;20023:135;20062:3;-1:-1:-1;;20083:17:1;;20080:43;;;20103:18;;:::i;:::-;-1:-1:-1;20150:1:1;20139:13;;20023:135::o;20163:127::-;20224:10;20219:3;20215:20;20212:1;20205:31;20255:4;20252:1;20245:15;20279:4;20276:1;20269:15;20295:380;20374:1;20370:12;;;;20417;;;20438:61;;20492:4;20484:6;20480:17;20470:27;;20438:61;20545:2;20537:6;20534:14;20514:18;20511:38;20508:161;;;20591:10;20586:3;20582:20;20579:1;20572:31;20626:4;20623:1;20616:15;20654:4;20651:1;20644:15;20508:161;;20295:380;;;:::o;21365:273::-;21550:6;21542;21537:3;21524:33;21506:3;21576:16;;21601:13;;;21576:16;21365:273;-1:-1:-1;21365:273:1:o;21980:128::-;22020:3;22051:1;22047:6;22044:1;22041:13;22038:39;;;22057:18;;:::i;:::-;-1:-1:-1;22093:9:1;;21980:128::o;22113:267::-;22202:6;22197:3;22190:19;22254:6;22247:5;22240:4;22235:3;22231:14;22218:43;-1:-1:-1;22306:1:1;22281:16;;;22299:4;22277:27;;;22270:38;;;;22362:2;22341:15;;;-1:-1:-1;;22337:29:1;22328:39;;;22324:50;;22113:267::o;22385:318::-;22572:2;22561:9;22554:21;22535:4;22592:62;22650:2;22639:9;22635:18;22627:6;22619;22592:62;:::i;:::-;22584:70;;22690:6;22685:2;22674:9;22670:18;22663:34;22385:318;;;;;;:::o;24268:276::-;24399:3;24437:6;24431:13;24453:53;24499:6;24494:3;24487:4;24479:6;24475:17;24453:53;:::i;:::-;24522:16;;;;;24268:276;-1:-1:-1;;24268:276:1:o;25571:560::-;25793:4;25839:1;25835;25830:3;25826:11;25822:19;25880:2;25872:6;25868:15;25857:9;25850:34;25920:3;25915:2;25904:9;25900:18;25893:31;25941:45;25981:3;25970:9;25966:19;25958:6;25941:45;:::i;:::-;26022:15;;26017:2;26002:18;;25995:43;-1:-1:-1;26069:2:1;26054:18;;26047:34;;;;26112:3;26097:19;;;26090:35;25933:53;25571:560;-1:-1:-1;;25571:560:1:o;26136:812::-;26221:6;26229;26282:2;26270:9;26261:7;26257:23;26253:32;26250:52;;;26298:1;26295;26288:12;26250:52;26330:9;26324:16;26349:28;26371:5;26349:28;:::i;:::-;26445:2;26430:18;;26424:25;26396:5;;-1:-1:-1;;;;;;26461:30:1;;26458:50;;;26504:1;26501;26494:12;26458:50;26527:22;;26580:4;26572:13;;26568:27;-1:-1:-1;26558:55:1;;26609:1;26606;26599:12;26558:55;26638:2;26632:9;26660:32;26689:2;26660:32;:::i;:::-;26721:2;26715:9;26733:31;26761:2;26753:6;26733:31;:::i;:::-;26788:2;26780:6;26773:18;26828:7;26823:2;26818;26814;26810:11;26806:20;26803:33;26800:53;;;26849:1;26846;26839:12;26800:53;26862:55;26914:2;26909;26901:6;26897:15;26892:2;26888;26884:11;26862:55;:::i;:::-;26936:6;26926:16;;;;;;26136:812;;;;;:::o;26953:179::-;26988:3;27030:1;27012:16;27009:23;27006:120;;;27076:1;27073;27070;27055:23;-1:-1:-1;27113:1:1;27107:8;27102:3;27098:18;27006:120;26953:179;:::o;27137:671::-;27176:3;27218:4;27200:16;27197:26;27194:39;;;27137:671;:::o;27194:39::-;27260:2;27254:9;-1:-1:-1;;27325:16:1;27321:25;;27318:1;27254:9;27297:50;27376:4;27370:11;27400:16;-1:-1:-1;;;;;27506:2:1;27499:4;27491:6;27487:17;27484:25;27479:2;27471:6;27468:14;27465:45;27462:58;;;27513:5;;;;;27137:671;:::o;27462:58::-;27550:6;27544:4;27540:17;27529:28;;27586:3;27580:10;27613:2;27605:6;27602:14;27599:27;;;27619:5;;;;;;27137:671;:::o;27599:27::-;27703:2;27684:16;27678:4;27674:27;27670:36;27663:4;27654:6;27649:3;27645:16;27641:27;27638:69;27635:82;;;27710:5;;;;;;27137:671;:::o;27635:82::-;27726:57;27777:4;27768:6;27760;27756:19;27752:30;27746:4;27726:57;:::i;:::-;-1:-1:-1;27799:3:1;;27137:671;-1:-1:-1;;;;;27137:671:1:o;27813:442::-;28038:6;28027:9;28020:25;28081:6;28076:2;28065:9;28061:18;28054:34;28138:6;28131:14;28124:22;28119:2;28108:9;28104:18;28097:50;28183:3;28178:2;28167:9;28163:18;28156:31;28001:4;28204:45;28244:3;28233:9;28229:19;28221:6;28204:45;:::i;:::-;28196:53;27813:442;-1:-1:-1;;;;;;27813:442:1:o;28260:359::-;28463:6;28452:9;28445:25;28506:6;28501:2;28490:9;28486:18;28479:34;28549:2;28544;28533:9;28529:18;28522:30;28426:4;28569:44;28609:2;28598:9;28594:18;28586:6;28569:44;:::i;28624:629::-;28911:3;28900:9;28893:22;28874:4;28938:45;28978:3;28967:9;28963:19;28955:6;28938:45;:::i;:::-;-1:-1:-1;;;;;29019:32:1;;29014:2;28999:18;;28992:60;29083:2;29068:18;;29061:34;;;29131:22;;;29126:2;29111:18;;29104:50;29171:32;29135:6;29188;29171:32;:::i;:::-;29163:40;;;29240:6;29234:3;29223:9;29219:19;29212:35;28624:629;;;;;;;;:::o;29258:168::-;29298:7;29364:1;29360;29356:6;29352:14;29349:1;29346:21;29341:1;29334:9;29327:17;29323:45;29320:71;;;29371:18;;:::i;:::-;-1:-1:-1;29411:9:1;;29258:168::o;29776:253::-;29816:3;-1:-1:-1;;;;;29905:2:1;29902:1;29898:10;29935:2;29932:1;29928:10;29966:3;29962:2;29958:12;29953:3;29950:21;29947:47;;;29974:18;;:::i;:::-;30010:13;;29776:253;-1:-1:-1;;;;29776:253:1:o;30456:337::-;30658:2;30640:21;;;30697:2;30677:18;;;30670:30;-1:-1:-1;;;30731:2:1;30716:18;;30709:43;30784:2;30769:18;;30456:337::o;30798:329::-;31000:2;30982:21;;;31039:1;31019:18;;;31012:29;-1:-1:-1;;;31072:2:1;31057:18;;31050:36;31118:2;31103:18;;30798:329::o;31478:522::-;31556:4;31562:6;31622:11;31609:25;31716:2;31712:7;31701:8;31685:14;31681:29;31677:43;31657:18;31653:68;31643:96;;31735:1;31732;31725:12;31643:96;31762:33;;31814:20;;;-1:-1:-1;;;;;;31846:30:1;;31843:50;;;31889:1;31886;31879:12;31843:50;31922:4;31910:17;;-1:-1:-1;31953:14:1;31949:27;;;31939:38;;31936:58;;;31990:1;31987;31980:12;32005:328;32186:2;32175:9;32168:21;32149:4;32206:62;32264:2;32253:9;32249:18;32241:6;32233;32206:62;:::i;:::-;32198:70;;32318:6;32311:14;32304:22;32299:2;32288:9;32284:18;32277:50;32005:328;;;;;;:::o;32682:290::-;32859:2;32848:9;32841:21;32822:4;32879:44;32919:2;32908:9;32904:18;32896:6;32879:44;:::i;:::-;32871:52;;32959:6;32954:2;32943:9;32939:18;32932:34;32682:290;;;;;:::o;33318:649::-;33607:3;33596:9;33589:22;33570:4;33634:63;33692:3;33681:9;33677:19;33669:6;33661;33634:63;:::i;:::-;-1:-1:-1;;;;;33733:32:1;;33728:2;33713:18;;33706:60;33797:2;33782:18;;33775:34;;;33845:22;;;33840:2;33825:18;;33818:50;33885:32;33849:6;33902;33885:32;:::i;:::-;33877:40;;;33954:6;33948:3;33937:9;33933:19;33926:35;33318:649;;;;;;;;;:::o;33972:136::-;34011:3;34039:5;34029:39;;34048:18;;:::i;:::-;-1:-1:-1;;;34084:18:1;;33972:136::o;34113:300::-;34284:2;34273:9;34266:21;34247:4;34304:44;34344:2;34333:9;34329:18;34321:6;34304:44;:::i;:::-;34296:52;;34398:6;34391:14;34384:22;34379:2;34368:9;34364:18;34357:50;34113:300;;;;;:::o

Swarm Source

ipfs://b2ca45af7b105d65c7d8bb6f2afd0254fd93719de9bf9b49c913d283dbd23d26
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.