Contract 0x0000fee6275dab194ab538a01dd8b18b02b20000

 

Contract Overview

Balance:
1 wei

EtherValue:
Less Than $0.01 (@ $2,519.80/ETH)

Token:
Ad
Crypto.com
Txn Hash Method
Block
From
To
Value
0xc47ddc22d0704ea1e6c4d521eae84aa047c040022db3dc22b1173f8675e19b12Small Ape Callba...126417672021-06-15 22:25:5211 hrs 17 mins ago0xe2d83239393b985c708e96476626f663493a85ac IN  0x0000fee6275dab194ab538a01dd8b18b02b200000 Ether00
0x9ed94551a14173806f9fb83e87a1d208c2293c144c59b90aa94f4403ff4e0252Small Ape Callba...126205622021-06-12 15:53:353 days 17 hrs ago0xe2d83239393b985c708e96476626f663493a85ac IN  0x0000fee6275dab194ab538a01dd8b18b02b200000 Ether00
0xef8536d62ed1a180bce2dcbdb251d1b98c32542dbb580562fddd19c3872281a4Small Ape Callba...126084472021-06-10 18:37:255 days 15 hrs ago0xe2d83239393b985c708e96476626f663493a85ac IN  0x0000fee6275dab194ab538a01dd8b18b02b200000 Ether00
0x09f56bc7eccfcdaa1f8e980670c6522955d9784441d67fe03ef1134cf4bd4765Small Ape Callba...125953582021-06-08 17:54:287 days 15 hrs ago0xe2d83239393b985c708e96476626f663493a85ac IN  0x0000fee6275dab194ab538a01dd8b18b02b200000 Ether00
0x86acfcf4acdef8a44b97780ee5b295ccdd878ba607ff1a7654cf63d842d5ec1dSmall Ape Callba...125671252021-06-04 9:18:1312 days 25 mins ago0xe2d83239393b985c708e96476626f663493a85ac IN  0x0000fee6275dab194ab538a01dd8b18b02b200000 Ether00
0xe87f7051a27eeb3c9fd4b38a515ebe31bd5cd5f37ce0e574ec22385bfd51fe15Small Ape Callba...125527742021-06-02 4:05:4714 days 5 hrs ago0xe2d83239393b985c708e96476626f663493a85ac IN  0x0000fee6275dab194ab538a01dd8b18b02b200000 Ether00
0x3ea65b758fe257b546bd46b695b134c482e4f0476c3f7ae5d7284853b1a5933b0x60806040124337952021-05-14 17:10:5132 days 16 hrs ago0x48f6ab6b58abb4258488db1e30e7f99f0deecf7f IN  Contract Creation0 Ether0.40409759130
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x97841147c6b5fb821ad9d733df635af65a108c2e103a19c26f22cf9c7b6eedd4126447312021-06-16 9:38:484 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000 0x00000000454a11ca3a574738c0aab442b62d5d45125.697662210063445022 Ether
0x97841147c6b5fb821ad9d733df635af65a108c2e103a19c26f22cf9c7b6eedd4126447312021-06-16 9:38:484 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000F2Pool Old0.057671653086279176 Ether
0x97841147c6b5fb821ad9d733df635af65a108c2e103a19c26f22cf9c7b6eedd4126447312021-06-16 9:38:484 mins ago Bancor: Converter 571 0x0000fee6275dab194ab538a01dd8b18b02b200000.105929380403280104 Ether
0x97841147c6b5fb821ad9d733df635af65a108c2e103a19c26f22cf9c7b6eedd4126447312021-06-16 9:38:484 mins ago 0x: Exchange v3 0x0000fee6275dab194ab538a01dd8b18b02b200000.00162810753399 Ether
0x97841147c6b5fb821ad9d733df635af65a108c2e103a19c26f22cf9c7b6eedd4126447312021-06-16 9:38:484 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000 0x: Exchange v30.00162810753399 Ether
0x97841147c6b5fb821ad9d733df635af65a108c2e103a19c26f22cf9c7b6eedd4126447312021-06-16 9:38:484 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000 Wrapped Ether0.0247017 Ether
0x97841147c6b5fb821ad9d733df635af65a108c2e103a19c26f22cf9c7b6eedd4126447312021-06-16 9:38:484 mins ago 0x00000000454a11ca3a574738c0aab442b62d5d45 0x0000fee6275dab194ab538a01dd8b18b02b20000125.674106182746444094 Ether
0x270e665f6421d25fb5d5c66bee80b7d67e5e1b1951508b5dad8dd7f012d966e2126441052021-06-16 7:16:122 hrs 27 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000Ethermine0.007846706487824669 Ether
0x270e665f6421d25fb5d5c66bee80b7d67e5e1b1951508b5dad8dd7f012d966e2126441052021-06-16 7:16:122 hrs 27 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b200000xe2d83239393b985c708e96476626f663493a85ac0.001961676621956168 Ether
0x270e665f6421d25fb5d5c66bee80b7d67e5e1b1951508b5dad8dd7f012d966e2126441052021-06-16 7:16:122 hrs 27 mins ago Wrapped Ether 0x0000fee6275dab194ab538a01dd8b18b02b200000.009808383109780837 Ether
0x55289be89e728f88f587dcb4690cebd876530ca4322e9a4425c9887582821c56126440602021-06-16 7:05:532 hrs 37 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000Spark Pool0.004860199525559124 Ether
0x55289be89e728f88f587dcb4690cebd876530ca4322e9a4425c9887582821c56126440602021-06-16 7:05:532 hrs 37 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b200000xe2d83239393b985c708e96476626f663493a85ac0.001215049881389781 Ether
0x55289be89e728f88f587dcb4690cebd876530ca4322e9a4425c9887582821c56126440602021-06-16 7:05:532 hrs 37 mins ago Wrapped Ether 0x0000fee6275dab194ab538a01dd8b18b02b200000.006075249406948905 Ether
0xd12acfa547168e55abf781796e9e34001d704cfa84c34d350cd42896ab71a623126440462021-06-16 7:01:292 hrs 41 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000Ethermine0.015679806280469884 Ether
0xd12acfa547168e55abf781796e9e34001d704cfa84c34d350cd42896ab71a623126440462021-06-16 7:01:292 hrs 41 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b200000xe2d83239393b985c708e96476626f663493a85ac0.003919951570117471 Ether
0xd12acfa547168e55abf781796e9e34001d704cfa84c34d350cd42896ab71a623126440462021-06-16 7:01:292 hrs 41 mins ago Wrapped Ether 0x0000fee6275dab194ab538a01dd8b18b02b200000.019599757850587355 Ether
0xedfb897ad3a1c2879b2d28cbfc22c9ed4df6983c88ddf3542c0b70f0a0663470126439672021-06-16 6:43:013 hrs ago 0x0000fee6275dab194ab538a01dd8b18b02b20000UUPool0.006162978187872032 Ether
0xedfb897ad3a1c2879b2d28cbfc22c9ed4df6983c88ddf3542c0b70f0a0663470126439672021-06-16 6:43:013 hrs ago 0x0000fee6275dab194ab538a01dd8b18b02b200000xe2d83239393b985c708e96476626f663493a85ac0.001540744546968008 Ether
0xedfb897ad3a1c2879b2d28cbfc22c9ed4df6983c88ddf3542c0b70f0a0663470126439672021-06-16 6:43:013 hrs ago Wrapped Ether 0x0000fee6275dab194ab538a01dd8b18b02b200000.00770372273484004 Ether
0xedeb24c01ab827b777ce78e31e795e50a3bd02ab4f0d3cbe7e6ecd1fbad3619a126439632021-06-16 6:41:243 hrs 1 min ago 0x0000fee6275dab194ab538a01dd8b18b02b20000Spark Pool0.004859843144271753 Ether
0xedeb24c01ab827b777ce78e31e795e50a3bd02ab4f0d3cbe7e6ecd1fbad3619a126439632021-06-16 6:41:243 hrs 1 min ago 0x0000fee6275dab194ab538a01dd8b18b02b200000xe2d83239393b985c708e96476626f663493a85ac0.001214960786067939 Ether
0xedeb24c01ab827b777ce78e31e795e50a3bd02ab4f0d3cbe7e6ecd1fbad3619a126439632021-06-16 6:41:243 hrs 1 min ago Wrapped Ether 0x0000fee6275dab194ab538a01dd8b18b02b200000.006074803930339692 Ether
0x5c869afdd8152a4c87c4d300c04ba3b990d15ee0d71da9b948827685d4616d58126439592021-06-16 6:40:063 hrs 3 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b20000Spark Pool0.006472756060770728 Ether
0x5c869afdd8152a4c87c4d300c04ba3b990d15ee0d71da9b948827685d4616d58126439592021-06-16 6:40:063 hrs 3 mins ago 0x0000fee6275dab194ab538a01dd8b18b02b200000xe2d83239393b985c708e96476626f663493a85ac0.001618189015192683 Ether
0x5c869afdd8152a4c87c4d300c04ba3b990d15ee0d71da9b948827685d4616d58126439592021-06-16 6:40:063 hrs 3 mins ago Wrapped Ether 0x0000fee6275dab194ab538a01dd8b18b02b200000.008090945075963411 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ApeBotV3

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-05-14
*/

pragma solidity = 0.8.4;
pragma experimental ABIEncoderV2;

// Leak alpha for fun and profit with https://twitter.com/mevalphaleak

contract IAlphaLeakConstants {
    address internal constant TOKEN_ETH   = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address internal constant TOKEN_WETH  = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address internal constant TOKEN_WBTC  = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;
    address internal constant TOKEN_DAI   = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
    address internal constant TOKEN_USDC  = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address internal constant TOKEN_USDT  = 0xdAC17F958D2ee523a2206206994597C13D831ec7;

    address internal constant PROXY_DYDX  = 0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e;
    address internal constant ORACLE_USDC = 0x986b5E1e1755e3C2440e960477f25201B0a8bbD4;
    address internal constant ORACLE_DAI  = 0x773616E4d11A78F511299002da57A0a94577F1f4;

    uint256 internal constant FLAG_FLASH_DYDY_WETH     = 0x1;
    uint256 internal constant FLAG_FLASH_DYDY_USDC     = 0x2;
    uint256 internal constant FLAG_FLASH_DYDY_DAI      = 0x4;
    uint256 internal constant FLAG_EXIT_WETH           = 0x8;

    uint256 internal constant FLAG_WETH_ACCOUNTING     = 0x10;
    uint256 internal constant FLAG_USDC_ACCOUNTING     = 0x20;
    uint256 internal constant FLAG_DAI_ACCOUNTING      = 0x40;

    uint256 internal constant FLAG_RETURN_WETH         = 0x1000;
    uint256 internal constant FLAG_RETURN_USDC         = 0x2000;
    uint256 internal constant FLAG_RETURN_DAI          = 0x4000;
    uint256 internal constant FLAG_RETURN_CUSTOM       = 0x8000;
    uint256 internal constant FLAG_RETURN_CUSTOM_SHIFT = 0x100000000000000000000;

    uint256 internal constant WRAP_FLAG_TRANSFORM_ETH_TO_WETH_AFTER_APE = 0x1;
    uint256 internal constant WRAP_FLAG_TRANSFORM_WETH_TO_ETH_AFTER_APE = 0x2;
    uint256 internal constant WRAP_FLAG_PAY_COINBASE                    = 0x4;
    uint256 internal constant WRAP_FLAG_PAY_COINBASE_BIT_SHIFT          = 0x100000000000000000000000000000000;
}

// All funds left on this contract will be immediately lost to snipers
// This contract is completely permision-less and allows anyone to execute any arbitrary logic
// Overall goal is to make a contract which allows to execute all types of nested flash loans

// Third version of apeBot which is better gas optimised and performs internal call during flash-loan callbacks
// Introduced support of apeBank(0x00000000454a11ca3a574738c0aab442b62d5d45)
contract ApeBotV3 is IAlphaLeakConstants {
    string public constant name = "https://twitter.com/mevalphaleak";

    fallback() external payable {}

    function smallApeCallback(bytes calldata data) external payable {
        // Added to support apeBank(0x00000000454a11ca3a574738c0aab442b62d5d45) flash loans natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(data,(uint256[])));
    }
    function largeApeCallback(
        address,
        uint wethToReturn,
        uint wbtcToReturn,
        uint daiToReturn,
        uint usdcToReturn,
        uint usdtToReturn,
        bytes calldata data
    ) external payable {
        // Added to support apeBank(0x00000000454a11ca3a574738c0aab442b62d5d45) flash loans natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(data,(uint256[])));

        // Since largeApeCallback function was used, bot operator is too lazy to return funds using generalised logic
        uint256 selfBalance = address(this).balance;
        if (selfBalance > 1) {
            msg.sender.call{value:(selfBalance == msg.value ? selfBalance : selfBalance - 1)}(new bytes(0));
        }
        if (wethToReturn > 0) {
            uint256 tokenBalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
            if (tokenBalance > 1) {
                IERC20Token(TOKEN_WETH).transfer(
                    msg.sender,
                    tokenBalance == wethToReturn ? tokenBalance : tokenBalance - 1
                );
            }
        }
        if (wbtcToReturn > 0) {
            uint256 tokenBalance = IERC20Token(TOKEN_WBTC).balanceOf(address(this));
            if (tokenBalance > 1) {
                IERC20Token(TOKEN_WBTC).transfer(
                    msg.sender,
                    tokenBalance == wbtcToReturn ? tokenBalance : tokenBalance - 1
                );
            }
        }
        if (daiToReturn > 0) {
            uint256 tokenBalance = IERC20Token(TOKEN_DAI).balanceOf(address(this));
            if (tokenBalance > 1) {
                IERC20Token(TOKEN_DAI).transfer(
                    msg.sender,
                    tokenBalance == daiToReturn ? tokenBalance : tokenBalance - 1
                );
            }
        }
        if (usdcToReturn > 0) {
            uint256 tokenBalance = IERC20Token(TOKEN_USDC).balanceOf(address(this));
            if (tokenBalance > 1) {
                IERC20Token(TOKEN_USDC).transfer(
                    msg.sender,
                    tokenBalance == usdcToReturn ? tokenBalance : tokenBalance - 1
                );
            }
        }
        if (usdtToReturn > 0) {
            uint256 tokenBalance = IERC20Token(TOKEN_USDT).balanceOf(address(this));
            if (tokenBalance > 1) {
                IERC20Token(TOKEN_USDT).transfer(
                    msg.sender,
                    tokenBalance == usdtToReturn ? tokenBalance : tokenBalance - 1
                );
            }
        }
    }
    function callFunction(
        address,
        Types.AccountInfo memory,
        bytes calldata data
    ) external {
        // Added to support DyDx flash loans natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(data,(uint256[])));
    }
    function executeOperation(
        address,
        uint256,
        uint256,
        bytes calldata _params
    ) external {
        // Added to support AAVE v1 flash loans natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(_params,(uint256[])));
    }
    function executeOperation(
        address[] calldata,
        uint256[] calldata,
        uint256[] calldata,
        address,
        bytes calldata params
    ) external returns (bool)
    {
        // Added to support AAVE v2 flash loans natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(params,(uint256[])));
        return true;
    }

    function uniswapV2Call(
        address,
        uint,
        uint,
        bytes calldata data
    ) external {
        // Added to support uniswap v2 flash swaps natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(data,(uint256[])));
    }
    function uniswapV3FlashCallback(
        uint256,
        uint256,
        bytes calldata data
    ) external {
        // Added to support uniswap v3 flash loans natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(data,(uint256[])));
    }
    function uniswapV3MintCallback(
        uint256,
        uint256,
        bytes calldata data
    ) external {
        // Added to support uniswap v3 flash mints natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(data,(uint256[])));
    }
    function uniswapV3SwapCallback(
        int256,
        int256,
        bytes calldata data
    ) external {
        // Added to support uniswap v3 flash swaps natively
        // Security checks aren't necessary since I'm an ape
        eldddhzr(abi.decode(data,(uint256[])));
    }
    function callbackWithReturn(address tokenToReturn, uint256 balanceToReturn, bytes calldata data) external payable {
        eldddhzr(abi.decode(data,(uint256[])));
        if (tokenToReturn != TOKEN_ETH) {
            IERC20Token(tokenToReturn).transfer(msg.sender, balanceToReturn);
        } else {
            msg.sender.call{value:balanceToReturn}(new bytes(0));
        }
    }


    // Function signature 0x00000000
    // Was main entry point for origin apeBot: https://etherscan.io/address/0x666f80a198412bcb987c430831b57ad61facb666#code
    // Still keeping to make backend migration to the newer version easier for me
    function wfjizxua(
        uint256 actionFlags,
        uint256[] calldata actionData
    ) public payable returns(int256 ethProfitDelta) {
        int256[4] memory balanceDeltas;
        balanceDeltas[0] = int256(address(this).balance - msg.value);
        if ((actionFlags & (FLAG_WETH_ACCOUNTING | FLAG_USDC_ACCOUNTING | FLAG_DAI_ACCOUNTING)) > 0) {
            // In general ACCOUNTING flags should be used only during simulation and not production to avoid wasting gas on oracle calls
            if ((actionFlags & FLAG_WETH_ACCOUNTING) > 0) {
                balanceDeltas[1] = int256(IERC20Token(TOKEN_WETH).balanceOf(address(this)));
            }
            if ((actionFlags & FLAG_USDC_ACCOUNTING) > 0) {
                balanceDeltas[2] = int256(IERC20Token(TOKEN_USDC).balanceOf(address(this)));
            }
            if ((actionFlags & FLAG_DAI_ACCOUNTING) > 0) {
                balanceDeltas[3] = int256(IERC20Token(TOKEN_DAI).balanceOf(address(this)));
            }
        }

        if ((actionFlags & (FLAG_FLASH_DYDY_WETH | FLAG_FLASH_DYDY_USDC | FLAG_FLASH_DYDY_DAI)) > 0) {
            // This simple logic only supports single token flashloans
            // For multiple tokens or multiple providers you should use general purpose logic using 'ape' function
            if ((actionFlags & FLAG_FLASH_DYDY_WETH) > 0) {
                uint256 balanceToFlash = IERC20Token(TOKEN_WETH).balanceOf(PROXY_DYDX);
                wrapWithDyDx(
                    TOKEN_WETH,
                    balanceToFlash - 1,
                    IERC20Token(TOKEN_WETH).allowance(address(this), PROXY_DYDX) < balanceToFlash,
                    abi.encode(actionData)
                );
            } else if ((actionFlags & FLAG_FLASH_DYDY_USDC) > 0) {
                uint256 balanceToFlash = IERC20Token(TOKEN_USDC).balanceOf(PROXY_DYDX);
                wrapWithDyDx(
                    TOKEN_USDC,
                    balanceToFlash - 1,
                    IERC20Token(TOKEN_USDC).allowance(address(this), PROXY_DYDX) < balanceToFlash,
                    abi.encode(actionData)
                );
            } else if ((actionFlags & FLAG_FLASH_DYDY_DAI) > 0) {
                uint256 balanceToFlash = IERC20Token(TOKEN_DAI).balanceOf(PROXY_DYDX);
                wrapWithDyDx(
                    TOKEN_DAI,
                    balanceToFlash - 1,
                    IERC20Token(TOKEN_DAI).allowance(address(this), PROXY_DYDX) < balanceToFlash,
                    abi.encode(actionData)
                );
            }
        } else {
            eldddhzr(actionData);
        }

        if ((actionFlags & FLAG_EXIT_WETH) > 0) {
            uint wethbalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
            if (wethbalance > 1) WETH9(TOKEN_WETH).withdraw(wethbalance - 1);
        }

        ethProfitDelta = int256(address(this).balance) - balanceDeltas[0];
        if ((actionFlags & (FLAG_WETH_ACCOUNTING | FLAG_USDC_ACCOUNTING | FLAG_DAI_ACCOUNTING)) > 0) {
            // In general ACCOUNTING flags should be used only during simulation and not production to avoid wasting gas on oracle calls
            if ((actionFlags & FLAG_WETH_ACCOUNTING) > 0) {
                ethProfitDelta += int256(IERC20Token(TOKEN_WETH).balanceOf(address(this))) - balanceDeltas[1];
            }
            if ((actionFlags & FLAG_USDC_ACCOUNTING) > 0) {
                ethProfitDelta += (int256(IERC20Token(TOKEN_USDC).balanceOf(address(this))) - balanceDeltas[2]) * IChainlinkAggregator(ORACLE_USDC).latestAnswer() / (1 ether);
            }
            if ((actionFlags & FLAG_DAI_ACCOUNTING) > 0) {
                ethProfitDelta += (int256(IERC20Token(TOKEN_DAI).balanceOf(address(this))) - balanceDeltas[3]) * IChainlinkAggregator(ORACLE_DAI).latestAnswer() / (1 ether);
            }
        }


        uint selfBalance = address(this).balance;
        if (selfBalance > 1 && msg.sender != address(this)) {
            msg.sender.call{value:selfBalance - 1}(new bytes(0));
        }
        if ((actionFlags & (FLAG_RETURN_WETH | FLAG_RETURN_USDC | FLAG_RETURN_DAI | FLAG_RETURN_CUSTOM)) > 0 && msg.sender != address(this)) {
            // Majority of simple atomic arbs should just need ETH
            if ((actionFlags & FLAG_RETURN_WETH) > 0) {
                uint tokenBalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
                if (tokenBalance > 1) IERC20Token(TOKEN_WETH).transfer(msg.sender, tokenBalance - 1);
            }
            if ((actionFlags & FLAG_RETURN_USDC) > 0) {
                uint tokenBalance = IERC20Token(TOKEN_USDC).balanceOf(address(this));
                if (tokenBalance > 1) IERC20Token(TOKEN_USDC).transfer(msg.sender, tokenBalance - 1);
            }
            if ((actionFlags & FLAG_RETURN_DAI) > 0) {
                uint tokenBalance = IERC20Token(TOKEN_DAI).balanceOf(address(this));
                if (tokenBalance > 1) IERC20Token(TOKEN_DAI).transfer(msg.sender, tokenBalance - 1);
            }
            if ((actionFlags & FLAG_RETURN_CUSTOM) > 0) {
                address tokenAddr = address(uint160(actionFlags / FLAG_RETURN_CUSTOM_SHIFT));
                if (tokenAddr != TOKEN_ETH) {
                    // We've already returned ETH above
                    uint tokenBalance = IERC20Token(tokenAddr).balanceOf(address(this));
                    if (tokenBalance > 1) IERC20Token(tokenAddr).transfer(msg.sender, tokenBalance - 1);
                }
            }
        }
    }

    // Function signature 0x0000000f
    function eldddhzr(uint256[] memory actionData) public {
        ape(actionData);

        if ((actionData[0] & (WRAP_FLAG_TRANSFORM_ETH_TO_WETH_AFTER_APE | WRAP_FLAG_TRANSFORM_WETH_TO_ETH_AFTER_APE | WRAP_FLAG_PAY_COINBASE)) > 0) {
            uint256 wrapFlags = actionData[0];
            if ((wrapFlags & WRAP_FLAG_TRANSFORM_WETH_TO_ETH_AFTER_APE) > 0) {
                uint wethbalance = IERC20Token(TOKEN_WETH).balanceOf(address(this));
                if (wethbalance > 1) WETH9(TOKEN_WETH).withdraw(wethbalance - 1);
                if ((wrapFlags & WRAP_FLAG_PAY_COINBASE) > 0) {
                    block.coinbase.call{value:(wrapFlags / WRAP_FLAG_PAY_COINBASE_BIT_SHIFT)}(new bytes(0));
                }
            } else {
                uint selfBalance = address(this).balance;
                if ((wrapFlags & WRAP_FLAG_PAY_COINBASE) > 0) {
                    uint amountToPay = wrapFlags / WRAP_FLAG_PAY_COINBASE_BIT_SHIFT;
                    if (selfBalance < amountToPay) {
                        WETH9(TOKEN_WETH).withdraw(amountToPay - selfBalance);
                        selfBalance = 0;
                    } else {
                        selfBalance -= amountToPay;
                    }
                    block.coinbase.call{value:amountToPay}(new bytes(0));
                }
                if (((wrapFlags & WRAP_FLAG_TRANSFORM_ETH_TO_WETH_AFTER_APE) > 0) && selfBalance > 1) {
                    WETH9(TOKEN_WETH).deposit{value: selfBalance - 1}();
                }
            }
        }
    }

    function ape(uint256[] memory data) internal {
        // data[0] was used for wrapFlags inside 0x0000000f function
        uint callId = 1;
        for (; callId < data.length;) {
            assembly {
                let callInfo := mload(add(data, mul(add(callId, 1), 0x20)))
                let callLength := and(div(callInfo, 0x1000000000000000000000000000000000000000000000000000000), 0xffff)
                let p := mload(0x40)   // Find empty storage location using "free memory pointer"
                // Place signature at begining of empty storage, hacky logic to compute shift here
                let callSignDataShiftResult := mul(and(callInfo, 0xffffffff0000000000000000000000000000000000000000000000), 0x10000000000)
                switch callSignDataShiftResult
                case 0 {
                    callLength := mul(callLength, 0x20)
                    callSignDataShiftResult := add(data, mul(0x20, add(callId, 3)))
                    for { let i := 0 } lt(i, callLength) { i := add(i, 0x20) } {
                        mstore(add(p, i), mload(add(callSignDataShiftResult, i)))
                    }
                }
                default {
                    mstore(p, callSignDataShiftResult)
                    callLength := add(mul(callLength, 0x20), 4)
                    callSignDataShiftResult := add(data, sub(mul(0x20, add(callId, 3)), 4))
                    for { let i := 4 } lt(i, callLength) { i := add(i, 0x20) } {
                        mstore(add(p, i), mload(add(callSignDataShiftResult, i)))
                    }
                }

                mstore(0x40, add(p, add(callLength, 0x20)))
                // new free pointer position after the output values of the called function.

                let callContract := and(callInfo, 0xffffffffffffffffffffffffffffffffffffffff)
                // Re-use callSignDataShiftResult as success
                switch and(callInfo, 0xf000000000000000000000000000000000000000000000000000000000000000)
                case 0x1000000000000000000000000000000000000000000000000000000000000000 {
                    callSignDataShiftResult := delegatecall(
                                    and(div(callInfo, 0x10000000000000000000000000000000000000000), 0xffffff), // allowed gas to use
                                    callContract, // contract to execute
                                    p,    // Inputs are at location p
                                    callLength, //Inputs size
                                    p,    //Store output over input
                                    0x20) //Output is 32 bytes long
                }
                default {
                    callSignDataShiftResult := call(
                                    and(div(callInfo, 0x10000000000000000000000000000000000000000), 0xffffff), // allowed gas to use
                                    callContract, // contract to execute
                                    mload(add(data, mul(add(callId, 2), 0x20))), // wei value amount
                                    p,    // Inputs are at location p
                                    callLength, //Inputs size
                                    p,    //Store output over input
                                    0x20) //Output is 32 bytes long
                }

                callSignDataShiftResult := and(div(callInfo, 0x10000000000000000000000000000000000000000000000000000000000), 0xff)
                if gt(callSignDataShiftResult, 0) {
                    // We're copying call result as input to some futher call
                    mstore(add(data, mul(callSignDataShiftResult, 0x20)), mload(p))
                }
                callId := add(callId, add(and(div(callInfo, 0x1000000000000000000000000000000000000000000000000000000), 0xffff), 2))
                mstore(0x40, p) // Set storage pointer to empty space
            }
        }
    }

    // Executing DyDx flash-loans with generalised logic above is quite inefficient, this helper function attempts to decrease gas cost a bit
    function wrapWithDyDx(address requiredToken, uint256 requiredBalance, bool requiredApprove, bytes memory data) public {
        Types.ActionArgs[] memory operations = new Types.ActionArgs[](3);
        operations[0] = Types.ActionArgs({
            actionType: Types.ActionType.Withdraw,
            accountId: 0,
            amount: Types.AssetAmount({
                sign: false,
                denomination: Types.AssetDenomination.Wei,
                ref: Types.AssetReference.Delta,
                value: requiredBalance
            }),
            primaryMarketId: marketIdFromTokenAddress(requiredToken),
            secondaryMarketId: 0,
            otherAddress: address(this),
            otherAccountId: 0,
            data: ""
        });
        operations[1] = Types.ActionArgs({
            actionType: Types.ActionType.Call,
            accountId: 0,
            amount: Types.AssetAmount({
                sign: false,
                denomination: Types.AssetDenomination.Wei,
                ref: Types.AssetReference.Delta,
                value: 0
            }),
            primaryMarketId: 0,
            secondaryMarketId: 0,
            otherAddress: address(this),
            otherAccountId: 0,
            data: data
        });
        operations[2] = Types.ActionArgs({
            actionType: Types.ActionType.Deposit,
            accountId: 0,
            amount: Types.AssetAmount({
                sign: true,
                denomination: Types.AssetDenomination.Wei,
                ref: Types.AssetReference.Delta,
                value: requiredBalance + (requiredToken == TOKEN_WETH ? 1 : 2)
            }),
            primaryMarketId: marketIdFromTokenAddress(requiredToken),
            secondaryMarketId: 0,
            otherAddress: address(this),
            otherAccountId: 0,
            data: ""
        });

        Types.AccountInfo[] memory accountInfos = new Types.AccountInfo[](1);
        accountInfos[0] = Types.AccountInfo({
            owner: address(this),
            number: 1
        });
        if (requiredApprove) {
          // Approval might be already set or can be set inside of callback function
          IERC20Token(requiredToken).approve(
            PROXY_DYDX,
            0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
          );
        }
        ISoloMargin(PROXY_DYDX).operate(accountInfos, operations);
    }
    function marketIdFromTokenAddress(address tokenAddress) internal pure returns (uint256 resultId) {
        assembly {
            switch tokenAddress
            case 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 {
                resultId := 0
            }
            case 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 {
                resultId := 2
            }
            case 0x6B175474E89094C44Da98b954EedeAC495271d0F {
                resultId := 3
            }
            default {
                revert(0, 0)
            }
        }
    }
}


interface ISoloMargin {
    function operate(Types.AccountInfo[] memory accounts, Types.ActionArgs[] memory actions) external;
    function getMarketTokenAddress(uint256 marketId) external view returns (address);
}
interface IERC20Token {
    function balanceOf(address _owner) external view returns (uint256);
    function allowance(address _owner, address _spender) external view returns (uint256);
    function transfer(address _to, uint256 _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function approve(address _spender, uint256 _value) external returns (bool success);
}
interface WETH9 {
    function deposit() external payable;
    function withdraw(uint wad) external;
}
interface IGasToken {
    function free(uint256 value) external returns (uint256);
}
interface IChainlinkAggregator {
  function latestAnswer() external view returns (int256);
}

library Types {
    enum ActionType {
        Deposit,   // supply tokens
        Withdraw,  // borrow tokens
        Transfer,  // transfer balance between accounts
        Buy,       // buy an amount of some token (externally)
        Sell,      // sell an amount of some token (externally)
        Trade,     // trade tokens against another account
        Liquidate, // liquidate an undercollateralized or expiring account
        Vaporize,  // use excess tokens to zero-out a completely negative account
        Call       // send arbitrary data to an address
    }

    enum AssetDenomination {
        Wei, // the amount is denominated in wei
        Par  // the amount is denominated in par
    }

    enum AssetReference {
        Delta, // the amount is given as a delta from the current value
        Target // the amount is given as an exact number to end up at
    }

    struct AssetAmount {
        bool sign; // true if positive
        AssetDenomination denomination;
        AssetReference ref;
        uint256 value;
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }

    struct ActionArgs {
        ActionType actionType;
        uint256 accountId;
        AssetAmount amount;
        uint256 primaryMarketId;
        uint256 secondaryMarketId;
        address otherAddress;
        uint256 otherAccountId;
        bytes data;
    }

    struct AccountInfo {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }
}

Contract Security Audit

Contract ABI

[{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Types.AccountInfo","name":"","type":"tuple"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenToReturn","type":"address"},{"internalType":"uint256","name":"balanceToReturn","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callbackWithReturn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"actionData","type":"uint256[]"}],"name":"eldddhzr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"_params","type":"bytes"}],"name":"executeOperation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"wethToReturn","type":"uint256"},{"internalType":"uint256","name":"wbtcToReturn","type":"uint256"},{"internalType":"uint256","name":"daiToReturn","type":"uint256"},{"internalType":"uint256","name":"usdcToReturn","type":"uint256"},{"internalType":"uint256","name":"usdtToReturn","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"largeApeCallback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"smallApeCallback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV2Call","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3FlashCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3MintCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"actionFlags","type":"uint256"},{"internalType":"uint256[]","name":"actionData","type":"uint256[]"}],"name":"wfjizxua","outputs":[{"internalType":"int256","name":"ethProfitDelta","type":"int256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"requiredToken","type":"address"},{"internalType":"uint256","name":"requiredBalance","type":"uint256"},{"internalType":"bool","name":"requiredApprove","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"wrapWithDyDx","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506137a2806100206000396000f3fe6080604052600436106100cc5760003560e01c8063adecd10211610079578063e9cbafb011610056578063e9cbafb014610220578063ee8725581461016a578063f0b3045f1461023b578063fa461e331461022057005b8063adecd102146101ed578063b3ab09951461020d578063d34879971461022057005b806310d1e85c116100b257806310d1e85c1461016a5780638b4187131461018a578063920f5c84146101aa5780639c4d7762146101da57005b80156100ce5780600f146100f457806306fdde0314610114575b005b6100e16100dc366004613117565b61024e565b6040519081526020015b60405180910390f35b34801561010057600080fd5b506100cc61010f366004612fbb565b6114e4565b34801561012057600080fd5b5061015d6040518060400160405280602081526020017f68747470733a2f2f747769747465722e636f6d2f6d6576616c7068616c65616b81525081565b6040516100eb91906133b9565b34801561017657600080fd5b506100cc610185366004612dfe565b6118e3565b34801561019657600080fd5b506100cc6101a5366004612c1a565b6118f9565b3480156101b657600080fd5b506101ca6101c5366004612ee6565b61190e565b60405190151581526020016100eb565b6100cc6101e8366004612db2565b61192f565b3480156101f957600080fd5b506100cc610208366004612cda565b611a83565b6100cc61021b366004612e64565b611ff2565b34801561022c57600080fd5b506100cc6101a53660046130de565b6100cc610249366004613086565b612840565b6000610258612ac6565b610262344761364f565b8152607085161561046b576010851615610317576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b1580156102d957600080fd5b505afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031191906130c6565b60208201525b60208516156103c1576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b15801561038357600080fd5b505afa158015610397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bb91906130c6565b60408201525b604085161561046b576040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b15801561042d57600080fd5b505afa158015610441573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046591906130c6565b60608201525b60078516156108d757600185161561063a576040517f70a08231000000000000000000000000000000000000000000000000000000008152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b1580156104f757600080fd5b505afa15801561050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052f91906130c6565b905061063473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261055460018461364f565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6024820152849073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063dd62ed3e906044015b60206040518083038186803b1580156105d457600080fd5b505afa1580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c91906130c6565b108888604051602001610620929190613366565b604051602081830303815290604052611a83565b50610913565b6002851615610786576040517f70a08231000000000000000000000000000000000000000000000000000000008152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600482015260009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b1580156106bd57600080fd5b505afa1580156106d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f591906130c6565b905061063473a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4861071a60018461364f565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6024820152849073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489063dd62ed3e906044016105bc565b60048516156108d2576040517f70a08231000000000000000000000000000000000000000000000000000000008152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e6004820152600090736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b15801561080957600080fd5b505afa15801561081d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084191906130c6565b9050610634736b175474e89094c44da98b954eedeac495271d0f61086660018461364f565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152306004820152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e60248201528490736b175474e89094c44da98b954eedeac495271d0f9063dd62ed3e906044016105bc565b610913565b6109138484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506114e492505050565b6008851615610a3d576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b15801561098257600080fd5b505afa158015610996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ba91906130c6565b90506001811115610a3b5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d6109ea60018461364f565b6040518263ffffffff1660e01b8152600401610a0891815260200190565b600060405180830381600087803b158015610a2257600080fd5b505af1158015610a36573d6000803e3d6000fd5b505050505b505b8051610a4990476135db565b91506070851615610df2576010851615610b145760208101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015610ac557600080fd5b505afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd91906130c6565b610b0791906135db565b610b11908361341b565b91505b6020851615610c8357670de0b6b3a764000073986b5e1e1755e3c2440e960477f25201b0a8bbd473ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8057600080fd5b505afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb891906130c6565b60408084015190517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b158015610c2057600080fd5b505afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906130c6565b610c6291906135db565b610c6c9190613523565b610c7691906134a7565b610c80908361341b565b91505b6040851615610df257670de0b6b3a764000073773616e4d11a78f511299002da57a0a94577f1f473ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2791906130c6565b60608301516040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b158015610d8f57600080fd5b505afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc791906130c6565b610dd191906135db565b610ddb9190613523565b610de591906134a7565b610def908361341b565b91505b47600181118015610e035750333014155b15610e735733610e1460018361364f565b60408051600081526020810191829052610e2d916131e2565b60006040518083038185875af1925050503d8060008114610e6a576040519150601f19603f3d011682016040523d82523d6000602084013e610e6f565b606091505b5050505b61f000861615801590610e865750333014155b156114db5761100086161561100b576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b158015610efb57600080fd5b505afa158015610f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3391906130c6565b905060018111156110095773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263a9059cbb33610f6460018561364f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b158015610fcf57600080fd5b505af1158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190613063565b505b505b61200086161561118b576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b15801561107b57600080fd5b505afa15801561108f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b391906130c6565b905060018111156111895773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4863a9059cbb336110e460018561364f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190613063565b505b505b61400086161561130b576040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b1580156111fb57600080fd5b505afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123391906130c6565b9050600181111561130957736b175474e89094c44da98b954eedeac495271d0f63a9059cbb3361126460018561364f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b1580156112cf57600080fd5b505af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113079190613063565b505b505b6180008616156114db57600061132c6a01000000000000000000008861350f565b905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146114d9576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a082319060240160206040518083038186803b1580156113c757600080fd5b505afa1580156113db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ff91906130c6565b905060018111156114d75773ffffffffffffffffffffffffffffffffffffffff821663a9059cbb3361143260018561364f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190613063565b505b505b505b50509392505050565b6114ed8161284f565b6000600460026001171782600081518110611531577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511611156118e05760008160008151811061157c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060028216111561173b576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b1580156115f857600080fd5b505afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163091906130c6565b905060018111156116b15773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d61166060018461364f565b6040518263ffffffff1660e01b815260040161167e91815260200190565b600060405180830381600087803b15801561169857600080fd5b505af11580156116ac573d6000803e3d6000fd5b505050505b600482161561173557416116d67001000000000000000000000000000000008461350f565b604080516000815260208101918290526116ef916131e2565b60006040518083038185875af1925050503d806000811461172c576040519150601f19603f3d011682016040523d82523d6000602084013e611731565b606091505b5050505b506118de565b47600482161561185a5760006117627001000000000000000000000000000000008461350f565b9050808210156117e95773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2632e1a7d4d611790848461364f565b6040518263ffffffff1660e01b81526004016117ae91815260200190565b600060405180830381600087803b1580156117c857600080fd5b505af11580156117dc573d6000803e3d6000fd5b50505050600091506117f6565b6117f3818361364f565b91505b6040805160008152602081019182905241918391611813916131e2565b60006040518083038185875af1925050503d8060008114611850576040519150601f19603f3d011682016040523d82523d6000602084013e611855565b606091505b505050505b60006001831611801561186d5750600181115b156118dc5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263d0e30db061189760018461364f565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118c257600080fd5b505af11580156118d6573d6000803e3d6000fd5b50505050505b505b505b50565b6118f261010f82840184612fbb565b5050505050565b61190861010f82840184612fbb565b50505050565b600061191f61010f83850185612fbb565b5060019998505050505050505050565b61193e61010f82840184612fbb565b73ffffffffffffffffffffffffffffffffffffffff841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611a1b576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff85169063a9059cbb90604401602060405180830381600087803b1580156119dd57600080fd5b505af11580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a159190613063565b50611908565b6040805160008152602081019182905233918591611a38916131e2565b60006040518083038185875af1925050503d8060008114611a75576040519150601f19603f3d011682016040523d82523d6000602084013e611a7a565b606091505b50505050505050565b60408051600380825260808201909252600091816020015b611aa3612ae4565b815260200190600190039081611a9b575050604080516101008101825260018152600060208083018290528351608081018552828152908101829052808401919091526060808201899052928201529192508101611b0087612a50565b8152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016040518060200160405280600081525081525081600081518110611b7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020908102919091010152604080516101008101909152806008815260200160008152602001604051806080016040528060001515815260200160006001811115611bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600081526020016000815250815260200160008152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020018381525081600181518110611c75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020908102919091010152604080516101008101909152806000815260200160008152602001604051806080016040528060011515815260200160006001811115611ce9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016000815260200173ffffffffffffffffffffffffffffffffffffffff891673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611d2d576002611d30565b60015b611d3d9060ff168961348f565b90528152602001611d4d87612a50565b8152602001600081526020013073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016040518060200160405280600081525081525081600281518110611dc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020908102919091010152604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081611deb57905050905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600181525081600081518110611e7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508315611f66576040517f095ea7b3000000000000000000000000000000000000000000000000000000008152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e60048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015273ffffffffffffffffffffffffffffffffffffffff87169063095ea7b390604401602060405180830381600087803b158015611f2c57600080fd5b505af1158015611f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f649190613063565b505b6040517fa67a6a45000000000000000000000000000000000000000000000000000000008152731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e9063a67a6a4590611fb890849086906004016131fe565b600060405180830381600087803b158015611fd257600080fd5b505af1158015611fe6573d6000803e3d6000fd5b50505050505050505050565b61200161010f82840184612fbb565b47600181111561208457333482146120235761201e60018361364f565b612025565b815b6040805160008152602081019182905261203e916131e2565b60006040518083038185875af1925050503d806000811461207b576040519150601f19603f3d011682016040523d82523d6000602084013e612080565b606091505b5050505b871561220e576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a082319060240160206040518083038186803b1580156120f057600080fd5b505afa158015612104573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212891906130c6565b9050600181111561220c5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc263a9059cbb33838c146121655761216060018561364f565b612167565b835b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b1580156121d257600080fd5b505af11580156121e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220a9190613063565b505b505b8615612398576040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090732260fac5e5542a773aa44fbcfedf7c193bc2c599906370a082319060240160206040518083038186803b15801561227a57600080fd5b505afa15801561228e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b291906130c6565b9050600181111561239657732260fac5e5542a773aa44fbcfedf7c193bc2c59963a9059cbb33838b146122ef576122ea60018561364f565b6122f1565b835b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15801561235c57600080fd5b505af1158015612370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123949190613063565b505b505b8515612522576040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090736b175474e89094c44da98b954eedeac495271d0f906370a082319060240160206040518083038186803b15801561240457600080fd5b505afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c91906130c6565b9050600181111561252057736b175474e89094c44da98b954eedeac495271d0f63a9059cbb33838a146124795761247460018561364f565b61247b565b835b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b1580156124e657600080fd5b505af11580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e9190613063565b505b505b84156126ac576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a082319060240160206040518083038186803b15801561258e57600080fd5b505afa1580156125a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c691906130c6565b905060018111156126aa5773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4863a9059cbb33838914612603576125fe60018561364f565b612605565b835b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a89190613063565b505b505b8315612835576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073dac17f958d2ee523a2206206994597c13d831ec7906370a082319060240160206040518083038186803b15801561271857600080fd5b505afa15801561272c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275091906130c6565b90506001811115611fe65773dac17f958d2ee523a2206206994597c13d831ec763a9059cbb3383881461278d5761278860018561364f565b61278f565b835b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b1580156127fa57600080fd5b505af115801561280e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128329190613063565b50505b505050505050505050565b6118de61010f82840184612fbb565b60015b81518110156118de576020600182010282015161ffff7b01000000000000000000000000000000000000000000000000000000820416604051650100000000007affffffff000000000000000000000000000000000000000000000084160280600081146128f557818352600460208502019350600460038701602002038701915060045b848110156128ef5782810151848201526020016128d7565b50612921565b60209384029360038701028701915060005b8481101561291f578281015184820152602001612907565b505b5060208301820160405273ffffffffffffffffffffffffffffffffffffffff84167ff00000000000000000000000000000000000000000000000000000000000000085167f100000000000000000000000000000000000000000000000000000000000000081146129c1576020848686602060028c01028c01518662ffffff740100000000000000000000000000000000000000008d0416f192506129e8565b60208486868562ffffff740100000000000000000000000000000000000000008c0416f492505b5050507d010000000000000000000000000000000000000000000000000000000000830460ff168015612a1f578151602082028701525b50604052507b01000000000000000000000000000000000000000000000000000000900461ffff1601600201612852565b60008173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28114612aa95773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488114612ab257736b175474e89094c44da98b954eedeac495271d0f8114612abb57600080fd5b60009150612ac0565b60029150612ac0565b600391505b50919050565b60405180608001604052806004906020820280368337509192915050565b604080516101008101825260008082526020820152908101612b28604080516080810190915260008082526020820190815260200160008152602001600081525090565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff81168114612b8b57600080fd5b919050565b60008083601f840112612ba1578182fd5b50813567ffffffffffffffff811115612bb8578182fd5b6020830191508360208260051b8501011115612bd357600080fd5b9250929050565b60008083601f840112612beb578182fd5b50813567ffffffffffffffff811115612c02578182fd5b602083019150836020828501011115612bd357600080fd5b6000806000808486036080811215612c30578485fd5b612c3986612b67565b945060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612c6a578384fd5b506040516040810167ffffffffffffffff8282108183111715612c8f57612c8f61371f565b81604052612c9f60208901612b67565b83526040880135602084015291945060608701359180831115612cc0578485fd5b5050612cce87828801612bda565b95989497509550505050565b60008060008060808587031215612cef578384fd5b612cf885612b67565b935060208086013593506040860135612d108161375e565b9250606086013567ffffffffffffffff80821115612d2c578384fd5b818801915088601f830112612d3f578384fd5b813581811115612d5157612d5161371f565b612d81847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016133cc565b91508082528984828501011115612d96578485fd5b8084840185840137810190920192909252939692955090935050565b60008060008060608587031215612dc7578384fd5b612dd085612b67565b935060208501359250604085013567ffffffffffffffff811115612df2578283fd5b612cce87828801612bda565b600080600080600060808688031215612e15578081fd5b612e1e86612b67565b94506020860135935060408601359250606086013567ffffffffffffffff811115612e47578182fd5b612e5388828901612bda565b969995985093965092949392505050565b60008060008060008060008060e0898b031215612e7f578283fd5b612e8889612b67565b97506020890135965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115612ec6578283fd5b612ed28b828c01612bda565b999c989b5096995094979396929594505050565b600080600080600080600080600060a08a8c031215612f03578283fd5b893567ffffffffffffffff80821115612f1a578485fd5b612f268d838e01612b90565b909b50995060208c0135915080821115612f3e578485fd5b612f4a8d838e01612b90565b909950975060408c0135915080821115612f62578485fd5b612f6e8d838e01612b90565b9097509550859150612f8260608d01612b67565b945060808c0135915080821115612f97578283fd5b50612fa48c828d01612bda565b915080935050809150509295985092959850929598565b60006020808385031215612fcd578182fd5b823567ffffffffffffffff80821115612fe4578384fd5b818501915085601f830112612ff7578384fd5b8135818111156130095761300961371f565b8060051b915061301a8483016133cc565b8181528481019084860184860187018a1015613034578788fd5b8795505b83861015613056578035835260019590950194918601918601613038565b5098975050505050505050565b600060208284031215613074578081fd5b815161307f8161375e565b9392505050565b60008060208385031215613098578182fd5b823567ffffffffffffffff8111156130ae578283fd5b6130ba85828601612bda565b90969095509350505050565b6000602082840312156130d7578081fd5b5051919050565b600080600080606085870312156130f3578182fd5b8435935060208501359250604085013567ffffffffffffffff811115612df2578283fd5b60008060006040848603121561312b578081fd5b83359250602084013567ffffffffffffffff811115613148578182fd5b61315486828701612b90565b9497909650939450505050565b60008151808452613179816020860160208601613666565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80511515825260208101516131bf8161374e565b602083015260408101516131d28161374e565b6040830152606090810151910152565b600082516131f4818460208701613666565b9190910192915050565b6040808252835182820181905260009190606090818501906020808901865b83811015613258578151805173ffffffffffffffffffffffffffffffffffffffff16865283015183860152938601939082019060010161321d565b50508683038188015287518084528184019250600581901b84018201898301885b83811015613355577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087840301865281516101608151600981106132bf576132bf6136f0565b855281870151878601528a8201516132d98c8701826131ab565b508982015160c081818801526080840151915060e0828189015260a0850151925061331d61010089018473ffffffffffffffffffffffffffffffffffffffff169052565b90840151610120880152909201516101408601829052915061334181860183613161565b978701979450505090840190600101613279565b50909b9a5050505050505050505050565b6020815281602082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561339e578081fd5b8260051b808560408501379190910160400190815292915050565b60208152600061307f6020830184613161565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134135761341361371f565b604052919050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561345557613455613692565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561348957613489613692565b50500190565b600082198211156134a2576134a2613692565b500190565b6000826134b6576134b66136c1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561350a5761350a613692565b500590565b60008261351e5761351e6136c1565b500490565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184138284138583048511828216161561356257613562613692565b7f80000000000000000000000000000000000000000000000000000000000000008487128682058812818416161561359c5761359c613692565b8587129250878205871284841616156135b7576135b7613692565b878505871281841616156135cd576135cd613692565b505050929093029392505050565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561361557613615613692565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561364957613649613692565b50500390565b60008282101561366157613661613692565b500390565b60005b83811015613681578181015183820152602001613669565b838111156119085750506000910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600281106118e0576118e06136f0565b80151581146118e057600080fdfea2646970667358221220a7292f0ddab47a3505891ad9884e55103ea16d6553515e2b0dd89b21a3dbddb764736f6c63430008040033

Deployed ByteCode Sourcemap

2584:20351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8540:5599;;;;;;:::i;:::-;;:::i;:::-;;;16445:25:1;;;16433:2;16418:18;8540:5599:0;;;;;;;;14185:1564;;;;;;;;;;-1:-1:-1;14185:1564:0;;;;;:::i;:::-;;:::i;2632:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6696:297::-;;;;;;;;;;-1:-1:-1;6696:297:0;;;;;:::i;:::-;;:::i;5672:295::-;;;;;;;;;;-1:-1:-1;5672:295:0;;;;;:::i;:::-;;:::i;6288:400::-;;;;;;;;;;-1:-1:-1;6288:400:0;;;;;:::i;:::-;;:::i;:::-;;;16274:14:1;;16267:22;16249:41;;16237:2;16222:18;6288:400:0;16204:92:1;7895:389:0;;;;;;:::i;:::-;;:::i;19887:2475::-;;;;;;;;;;-1:-1:-1;19887:2475:0;;;;;:::i;:::-;;:::i;3034:2632::-;;;;;;:::i;:::-;;:::i;7299:293::-;;;;;;;;;;-1:-1:-1;7299:293:0;;;;;:::i;2743:285::-;;;;;;:::i;:::-;;:::i;8540:5599::-;8658:21;8692:30;;:::i;:::-;8759:33;8783:9;8759:21;:33;:::i;:::-;8733:60;;8824:65;8809:81;;8808:87;8804:751;;1285:4;9055:34;;9054:40;9050:156;;9141:48;;;;;9183:4;9141:48;;;11929:74:1;302:42:0;;9141:33;;11902:18:1;;9141:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9115:16;;;:75;9050:156;1349:4;9225:34;;9224:40;9220:156;;9311:48;;;;;9353:4;9311:48;;;11929:74:1;569:42:0;;9311:33;;11902:18:1;;9311:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9285:16;;;:75;9220:156;1413:4;9395:33;;9394:39;9390:154;;9480:47;;;;;9521:4;9480:47;;;11929:74:1;480:42:0;;9480:32;;11902:18:1;;9480:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9454:16;;;:74;9390:154;9587:65;9572:81;;9571:87;9567:1628;;1031:3;9868:34;;9867:40;9863:1268;;9953:45;;;;;749:42;9953:45;;;11929:74:1;9928:22:0;;302:42;;9953:33;;11902:18:1;;9953:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9928:70;-1:-1:-1;10017:250:0;302:42;10085:18;10102:1;9928:70;10085:18;:::i;:::-;10126:60;;;;;10168:4;10126:60;;;12249:34:1;749:42:0;12299:18:1;;;12292:43;10189:14:0;;302:42;;10126:33;;12161:18:1;;10126:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;10237:10;;10226:22;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10017:12;:250::i;:::-;9863:1268;9567:1628;;9863:1268;1094:3;10294:34;;10293:40;10289:842;;10379:45;;;;;749:42;10379:45;;;11929:74:1;10354:22:0;;569:42;;10379:33;;11902:18:1;;10379:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10354:70;-1:-1:-1;10443:250:0;569:42;10511:18;10528:1;10354:70;10511:18;:::i;:::-;10552:60;;;;;10594:4;10552:60;;;12249:34:1;749:42:0;12299:18:1;;;12292:43;10615:14:0;;569:42;;10552:33;;12161:18:1;;10552:60:0;12143:198:1;10289:842:0;1157:3;10720:33;;10719:39;10715:416;;10804:44;;;;;749:42;10804:44;;;11929:74:1;10779:22:0;;480:42;;10804:32;;11902:18:1;;10804:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10779:69;-1:-1:-1;10867:248:0;480:42;10934:18;10951:1;10779:69;10934:18;:::i;:::-;10975:59;;;;;11016:4;10975:59;;;12249:34:1;749:42:0;12299:18:1;;;12292:43;11037:14:0;;480:42;;10975:32;;12161:18:1;;10975:59:0;12143:198:1;10715:416:0;9567:1628;;;11163:20;11172:10;;11163:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11163:8:0;;-1:-1:-1;;;11163:20:0:i;:::-;1220:3;11212:28;;11211:34;11207:213;;11281:48;;;;;11323:4;11281:48;;;11929:74:1;11262:16:0;;302:42;;11281:33;;11902:18:1;;11281:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11262:67;;11362:1;11348:11;:15;11344:64;;;302:42;11365:26;11392:15;11406:1;11392:11;:15;:::i;:::-;11365:43;;;;;;;;;;;;;16445:25:1;;16433:2;16418:18;;16400:76;11365:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11344:64;11207:213;;11481:16;;11449:48;;11456:21;11449:48;:::i;:::-;11432:65;-1:-1:-1;11528:65:0;11513:81;;11512:87;11508:934;;1285:4;11759:34;;11758:40;11754:174;;11896:16;;;;11844:48;;;;;11886:4;11844:48;;;11929:74:1;302:42:0;;11844:33;;11902:18:1;;11844:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11837:75;;;;:::i;:::-;11819:93;;;;:::i;:::-;;;11754:174;1349:4;11947:34;;11946:40;11942:239;;12157:7;838:42;12105:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12085:16;;;;;12033:48;;;;;12075:4;12033:48;;;11929:74:1;569:42:0;;12033:33;;11902:18:1;;12033:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12026:75;;;;:::i;:::-;12025:128;;;;:::i;:::-;:140;;;;:::i;:::-;12007:158;;;;:::i;:::-;;;11942:239;1413:4;12200:33;;12199:39;12195:236;;12407:7;927:42;12356:45;;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12336:16;;;;12285:47;;;;;12326:4;12285:47;;;11929:74:1;480:42:0;;12285:32;;11902:18:1;;12285:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12278:74;;;;:::i;:::-;12277:126;;;;:::i;:::-;:138;;;;:::i;:::-;12259:156;;;;:::i;:::-;;;12195:236;12475:21;12525:1;12511:15;;:46;;;;-1:-1:-1;12530:10:0;12552:4;12530:27;;12511:46;12507:131;;;12574:10;12596:15;12610:1;12596:11;:15;:::i;:::-;12613:12;;;12623:1;12613:12;;;;;;;;;12574:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:131;12668:74;12653:90;;12652:96;;;;:127;;-1:-1:-1;12752:10:0;12774:4;12752:27;;12652:127;12648:1484;;;1479:6;12869:30;;12868:36;12864:248;;12945:48;;;;;12987:4;12945:48;;;11929:74:1;12925:17:0;;302:42;;12945:33;;11902:18:1;;12945:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12925:68;;13031:1;13016:12;:16;13012:84;;;302:42;13034:32;13067:10;13079:16;13094:1;13079:12;:16;:::i;:::-;13034:62;;;;;;;;;;12635:42:1;12623:55;;;13034:62:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;13034:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13012:84;12864:248;;1545:6;13131:30;;13130:36;13126:248;;13207:48;;;;;13249:4;13207:48;;;11929:74:1;13187:17:0;;569:42;;13207:33;;11902:18:1;;13207:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13187:68;;13293:1;13278:12;:16;13274:84;;;569:42;13296:32;13329:10;13341:16;13356:1;13341:12;:16;:::i;:::-;13296:62;;;;;;;;;;12635:42:1;12623:55;;;13296:62:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;13296:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13274:84;13126:248;;1611:6;13393:29;;13392:35;13388:245;;13468:47;;;;;13509:4;13468:47;;;11929:74:1;13448:17:0;;480:42;;13468:32;;11902:18:1;;13468:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13448:67;;13553:1;13538:12;:16;13534:83;;;480:42;13556:31;13588:10;13600:16;13615:1;13600:12;:16;:::i;:::-;13556:61;;;;;;;;;;12635:42:1;12623:55;;;13556:61:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;13556:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13534:83;13388:245;;1677:6;13652:32;;13651:38;13647:474;;13710:17;13746:38;1743:23;13746:11;:38;:::i;:::-;13710:76;-1:-1:-1;13809:22:0;;;213:42;13809:22;13805:301;;13933:47;;;;;13974:4;13933:47;;;11929:74:1;13913:17:0;;13933:32;;;;;;11902:18:1;;13933:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13913:67;;14022:1;14007:12;:16;14003:83;;;14025:31;;;;14057:10;14069:16;14084:1;14069:12;:16;:::i;:::-;14025:61;;;;;;;;;;12635:42:1;12623:55;;;14025:61:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;14025:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14003:83;13805:301;;13647:474;;8540:5599;;;;;;;:::o;14185:1564::-;14250:15;14254:10;14250:3;:15::i;:::-;14415:1;2005:3;1925;1845;14300:85;:110;14283:10;14294:1;14283:13;;;;;;;;;;;;;;;;;;;;;;:128;14282:134;14278:1464;;;14433:17;14453:10;14464:1;14453:13;;;;;;;;;;;;;;;;;;;;;;14433:33;;14543:1;1925:3;14486:9;:53;14485:59;14481:1250;;;14584:48;;;;;14626:4;14584:48;;;11929:74:1;14565:16:0;;302:42;;14584:33;;11902:18:1;;14584:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14565:67;;14669:1;14655:11;:15;14651:64;;;302:42;14672:26;14699:15;14713:1;14699:11;:15;:::i;:::-;14672:43;;;;;;;;;;;;;16445:25:1;;16433:2;16418:18;;16400:76;14672:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14651:64;2005:3;14739:34;;14738:40;14734:176;;14803:14;14830:44;2085:35;14830:9;:44;:::i;:::-;14877:12;;;14887:1;14877:12;;;;;;;;;14803:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14734:176;14481:1250;;;;14969:21;2005:3;15014:34;;15013:40;15009:509;;15078:16;15097:44;2085:35;15097:9;:44;:::i;:::-;15078:63;;15182:11;15168;:25;15164:260;;;302:42;15222:26;15249:25;15263:11;15249;:25;:::i;:::-;15222:53;;;;;;;;;;;;;16445:25:1;;16433:2;16418:18;;16400:76;15222:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15316:1;15302:15;;15164:260;;;15374:26;15389:11;15374:26;;:::i;:::-;;;15164:260;15485:12;;;15495:1;15485:12;;;;;;;;;15446:14;;15472:11;;15446:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15009:509;;15599:1;1845:3;15542:9;:53;15541:59;15540:80;;;;;15619:1;15605:11;:15;15540:80;15536:180;;;302:42;15645:25;15678:15;15692:1;15678:11;:15;:::i;:::-;15645:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15536:180;14481:1250;;14278:1464;;14185:1564;:::o;6696:297::-;6947:38;6956:28;;;;6967:4;6956:28;:::i;6947:38::-;6696:297;;;;;:::o;5672:295::-;5921:38;5930:28;;;;5941:4;5930:28;:::i;5921:38::-;5672:295;;;;:::o;6288:400::-;6476:4;6618:40;6627:30;;;;6638:6;6627:30;:::i;6618:40::-;-1:-1:-1;6676:4:0;6288:400;;;;;;;;;;;:::o;7895:389::-;8020:38;8029:28;;;;8040:4;8029:28;:::i;8020:38::-;8073:26;;;213:42;8073:26;8069:208;;8116:64;;;;;8152:10;8116:64;;;12605:74:1;12695:18;;;12688:34;;;8116:35:0;;;;;;12578:18:1;;8116:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8069:208;;;8252:12;;;8262:1;8252:12;;;;;;;;;8213:10;;8235:15;;8213:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7895:389;;;;:::o;19887:2475::-;20055:25;;;20078:1;20055:25;;;;;;;;;20016:36;;20055:25;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;20107:549:0;;;;;;;;20151:25;20107:549;;-1:-1:-1;20107:549:0;;;;;;;20226:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20107:549;;;;20016:64;;-1:-1:-1;20107:549:0;;20473:39;20498:13;20473:24;:39::i;:::-;20107:549;;;;20546:1;20107:549;;;;20584:4;20107:549;;;;;;20620:1;20107:549;;;;;;;;;;;;;;;;;;;20091:10;20102:1;20091:13;;;;;;;;;;;;;;;;;;;;;;;;;:565;20683:495;;;;;;;;;;20727:21;20683:495;;;;20774:1;20683:495;;;;20798:201;;;;;;;;20841:5;20798:201;;;;;;20879:27;20798:201;;;;;;;;;;;;;;;;;;;;20930:26;20798:201;;;;20982:1;20798:201;;;20683:495;;;;21031:1;20683:495;;;;21066:1;20683:495;;;;21104:4;20683:495;;;;;;21140:1;20683:495;;;;21162:4;20683:495;;;20667:10;20678:1;20667:13;;;;;;;;;;;;;;;;;;;;;;;;;:511;21205:587;;;;;;;;;;-1:-1:-1;21205:587:0;;;;21299:1;21205:587;;;;21323:254;;;;;;;;21366:4;21323:254;;;;;;21403:27;21323:254;;;;;;;;;;;;;;;;;;;;21454:26;21323:254;;;;21525:27;;;302:42;21525:27;:35;;21559:1;21525:35;;;21555:1;21525:35;21506:55;;;;:15;:55;:::i;:::-;21323:254;;21205:587;;;;21609:39;21634:13;21609:24;:39::i;:::-;21205:587;;;;21682:1;21205:587;;;;21720:4;21205:587;;;;;;21756:1;21205:587;;;;;;;;;;;;;;;;;;;21189:10;21200:1;21189:13;;;;;;;;;;;;;;;;;;;;;;;;;:603;21847:26;;;21871:1;21847:26;;;;;;;;;21805:39;;21847:26;;;;-1:-1:-1;;;;;;;;;;;;;;;;;21847:26:0;;;;;;;;;;;;;;;21805:68;;21902:89;;;;;;;;21950:4;21902:89;;;;;;21978:1;21902:89;;;21884:12;21897:1;21884:15;;;;;;;;;;;;;;;;;;;;;:107;;;;22006:15;22002:285;;;22122:153;;;;;749:42;22122:153;;;12605:74:1;22196:66:0;12695:18:1;;;12688:34;22122::0;;;;;;12578:18:1;;22122:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22002:285;22297:57;;;;;749:42;;22297:31;;:57;;22329:12;;22343:10;;22297:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19887:2475;;;;;;:::o;3034:2632::-;3446:38;3455:28;;;;3466:4;3455:28;:::i;3446:38::-;3638:21;3688:1;3674:15;;3670:143;;;3706:10;3744:9;3729:24;;:56;;3770:15;3784:1;3770:11;:15;:::i;:::-;3729:56;;;3756:11;3729:56;3788:12;;;3798:1;3788:12;;;;;;;;;3706:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3670:143;3827:16;;3823:360;;3883:48;;;;;3925:4;3883:48;;;11929:74:1;3860:20:0;;302:42;;3883:33;;11902:18:1;;3883:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3860:71;;3965:1;3950:12;:16;3946:226;;;302:42;3987:32;4042:10;4075:28;;;:62;;4121:16;4136:1;4121:12;:16;:::i;:::-;4075:62;;;4106:12;4075:62;3987:169;;;;;;;;;;12635:42:1;12623:55;;;3987:169:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;3987:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3946:226;3823:360;;4197:16;;4193:360;;4253:48;;;;;4295:4;4253:48;;;11929:74:1;4230:20:0;;391:42;;4253:33;;11902:18:1;;4253:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4230:71;;4335:1;4320:12;:16;4316:226;;;391:42;4357:32;4412:10;4445:28;;;:62;;4491:16;4506:1;4491:12;:16;:::i;:::-;4445:62;;;4476:12;4445:62;4357:169;;;;;;;;;;12635:42:1;12623:55;;;4357:169:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;4357:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4316:226;4193:360;;4567:15;;4563:356;;4622:47;;;;;4663:4;4622:47;;;11929:74:1;4599:20:0;;480:42;;4622:32;;11902:18:1;;4622:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4599:70;;4703:1;4688:12;:16;4684:224;;;480:42;4725:31;4779:10;4812:27;;;:61;;4857:16;4872:1;4857:12;:16;:::i;:::-;4812:61;;;4842:12;4812:61;4725:167;;;;;;;;;;12635:42:1;12623:55;;;4725:167:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;4725:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4684:224;4563:356;;4933:16;;4929:360;;4989:48;;;;;5031:4;4989:48;;;11929:74:1;4966:20:0;;569:42;;4989:33;;11902:18:1;;4989:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4966:71;;5071:1;5056:12;:16;5052:226;;;569:42;5093:32;5148:10;5181:28;;;:62;;5227:16;5242:1;5227:12;:16;:::i;:::-;5181:62;;;5212:12;5181:62;5093:169;;;;;;;;;;12635:42:1;12623:55;;;5093:169:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;5093:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5052:226;4929:360;;5303:16;;5299:360;;5359:48;;;;;5401:4;5359:48;;;11929:74:1;5336:20:0;;658:42;;5359:33;;11902:18:1;;5359:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5336:71;;5441:1;5426:12;:16;5422:226;;;658:42;5463:32;5518:10;5551:28;;;:62;;5597:16;5612:1;5597:12;:16;:::i;:::-;5551:62;;;5582:12;5551:62;5463:169;;;;;;;;;;12635:42:1;12623:55;;;5463:169:0;;;12605:74:1;12695:18;;;12688:34;12578:18;;5463:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5299:360;;3034:2632;;;;;;;;;:::o;2743:285::-;2982:38;2991:28;;;;3002:4;2991:28;:::i;15757:3979::-;15897:1;15909:3820;15925:4;:11;15916:6;:20;15909:3820;;;16034:4;16030:1;16022:6;16018:14;16014:25;16008:4;16004:36;15998:43;16155:6;16095:57;16085:8;16081:72;16077:85;16195:4;16189:11;16487:13;16428:56;16418:8;16414:71;16410:91;16526:23;16572:1;16567:357;;;;16983:23;16980:1;16973:34;17070:1;17063:4;17051:10;17047:21;17043:29;17029:43;;17162:1;17157;17149:6;17145:14;17139:4;17135:25;17131:33;17125:4;17121:44;17094:71;;17202:1;17187:166;17212:10;17209:1;17206:17;17187:166;;;17297:31;;;17291:38;17280:9;;;17273:57;17238:4;17231:12;17187:166;;;17191:14;16519:853;;16567:357;16627:4;16611:21;;;;16713:1;16701:14;;16691:25;16681:36;;;-1:-1:-1;16754:1:0;16739:166;16764:10;16761:1;16758:17;16739:166;;;16849:31;;;16843:38;16832:9;;;16825:57;16790:4;16783:12;16739:166;;;16743:14;16519:853;;17428:4;17416:10;17412:21;17409:1;17405:29;17399:4;17392:43;17583:42;17573:8;17569:57;17727:66;17717:8;17713:81;17817:66;17812:634;;;;19078:4;19009:1;18946:10;18875:1;18809:4;18805:1;18797:6;18793:14;18789:25;18783:4;18779:36;18773:43;18699:12;18629:8;18583:43;18573:8;18569:58;18565:73;18522:561;18495:588;;17706:1422;;17812:634;18396:4;18327:1;18264:10;18193:1;18119:12;18049:8;18003:43;17993:8;17989:58;17985:73;17934:467;17907:494;;17706:1422;-1:-1:-1;;;19193:61:0;19179:76;;19257:4;19175:87;19283:30;;19280:2;;19476:1;19470:8;19462:4;19437:23;19433:34;19427:4;19423:45;19416:63;19280:2;-1:-1:-1;19657:4:0;19650:15;-1:-1:-1;19560:57:0;19546:72;;19620:6;19542:85;19526:106;19629:1;19526:106;15963:3755;;22368:564;22447:16;22507:12;22538:42;22533:95;;;;22647:42;22642:95;;;;22756:42;22751:95;;;;22897:1;22894;22887:12;22533:95;22612:1;22600:13;;22533:95;;22642;22721:1;22709:13;;22642:95;;22751;22830:1;22818:13;;22500:414;;22485:440;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:395::-;278:8;288:6;342:3;335:4;327:6;323:17;319:27;309:2;;367:8;357;350:26;309:2;-1:-1:-1;397:20:1;;440:18;429:30;;426:2;;;479:8;469;462:26;426:2;523:4;515:6;511:17;499:29;;583:3;576:4;566:6;563:1;559:14;551:6;547:27;543:38;540:47;537:2;;;600:1;597;590:12;537:2;299:311;;;;;:::o;615:375::-;666:8;676:6;730:3;723:4;715:6;711:17;707:27;697:2;;755:8;745;738:26;697:2;-1:-1:-1;785:20:1;;828:18;817:30;;814:2;;;867:8;857;850:26;814:2;911:4;903:6;899:17;887:29;;963:3;956:4;947:6;939;935:19;931:30;928:39;925:2;;;980:1;977;970:12;995:1065;1112:6;1120;1128;1136;1180:9;1171:7;1167:23;1210:3;1206:2;1202:12;1199:2;;;1232:6;1224;1217:22;1199:2;1260:29;1279:9;1260:29;:::i;:::-;1250:39;;1382:4;1313:66;1309:2;1305:75;1301:86;1298:2;;;1405:6;1397;1390:22;1298:2;;1443:4;1437:11;1487:4;1479:6;1475:17;1511:18;1579:6;1567:10;1564:22;1559:2;1547:10;1544:18;1541:46;1538:2;;;1590:18;;:::i;:::-;1632:10;1626:4;1619:24;1667:38;1701:2;1690:9;1686:18;1667:38;:::i;:::-;1652:54;;1767:4;1752:20;;1739:34;1734:2;1722:15;;1715:59;1659:6;;-1:-1:-1;1850:2:1;1835:18;;1822:32;;1866:14;;;1863:2;;;1898:6;1890;1883:22;1863:2;;;1942:58;1992:7;1983:6;1972:9;1968:22;1942:58;:::i;:::-;1147:913;;;;-1:-1:-1;2019:8:1;-1:-1:-1;;;;1147:913:1:o;2065:1139::-;2157:6;2165;2173;2181;2234:3;2222:9;2213:7;2209:23;2205:33;2202:2;;;2256:6;2248;2241:22;2202:2;2284:29;2303:9;2284:29;:::i;:::-;2274:39;;2332:2;2381;2370:9;2366:18;2353:32;2343:42;;2435:2;2424:9;2420:18;2407:32;2448:28;2470:5;2448:28;:::i;:::-;2495:5;-1:-1:-1;2551:2:1;2536:18;;2523:32;2574:18;2604:14;;;2601:2;;;2636:6;2628;2621:22;2601:2;2679:6;2668:9;2664:22;2654:32;;2724:7;2717:4;2713:2;2709:13;2705:27;2695:2;;2751:6;2743;2736:22;2695:2;2792;2779:16;2814:2;2810;2807:10;2804:2;;;2820:18;;:::i;:::-;2862:112;2970:2;2901:66;2894:4;2890:2;2886:13;2882:86;2878:95;2862:112;:::i;:::-;2849:125;;2997:2;2990:5;2983:17;3037:7;3032:2;3027;3023;3019:11;3015:20;3012:33;3009:2;;;3063:6;3055;3048:22;3009:2;3123;3118;3114;3110:11;3105:2;3098:5;3094:14;3081:45;3146:14;;3142:23;;;3135:39;;;;2192:1012;;;;-1:-1:-1;2192:1012:1;;-1:-1:-1;;2192:1012:1:o;3209:571::-;3297:6;3305;3313;3321;3374:2;3362:9;3353:7;3349:23;3345:32;3342:2;;;3395:6;3387;3380:22;3342:2;3423:29;3442:9;3423:29;:::i;:::-;3413:39;;3499:2;3488:9;3484:18;3471:32;3461:42;;3554:2;3543:9;3539:18;3526:32;3581:18;3573:6;3570:30;3567:2;;;3618:6;3610;3603:22;3567:2;3662:58;3712:7;3703:6;3692:9;3688:22;3662:58;:::i;3785:640::-;3882:6;3890;3898;3906;3914;3967:3;3955:9;3946:7;3942:23;3938:33;3935:2;;;3989:6;3981;3974:22;3935:2;4017:29;4036:9;4017:29;:::i;:::-;4007:39;;4093:2;4082:9;4078:18;4065:32;4055:42;;4144:2;4133:9;4129:18;4116:32;4106:42;;4199:2;4188:9;4184:18;4171:32;4226:18;4218:6;4215:30;4212:2;;;4263:6;4255;4248:22;4212:2;4307:58;4357:7;4348:6;4337:9;4333:22;4307:58;:::i;:::-;3925:500;;;;-1:-1:-1;3925:500:1;;-1:-1:-1;4384:8:1;;4281:84;3925:500;-1:-1:-1;;;3925:500:1:o;4430:847::-;4554:6;4562;4570;4578;4586;4594;4602;4610;4663:3;4651:9;4642:7;4638:23;4634:33;4631:2;;;4685:6;4677;4670:22;4631:2;4713:29;4732:9;4713:29;:::i;:::-;4703:39;;4789:2;4778:9;4774:18;4761:32;4751:42;;4840:2;4829:9;4825:18;4812:32;4802:42;;4891:2;4880:9;4876:18;4863:32;4853:42;;4942:3;4931:9;4927:19;4914:33;4904:43;;4994:3;4983:9;4979:19;4966:33;4956:43;;5050:3;5039:9;5035:19;5022:33;5078:18;5070:6;5067:30;5064:2;;;5115:6;5107;5100:22;5064:2;5159:58;5209:7;5200:6;5189:9;5185:22;5159:58;:::i;:::-;4621:656;;;;-1:-1:-1;4621:656:1;;-1:-1:-1;4621:656:1;;;;;;5236:8;-1:-1:-1;;;4621:656:1:o;5282:1501::-;5469:6;5477;5485;5493;5501;5509;5517;5525;5533;5586:3;5574:9;5565:7;5561:23;5557:33;5554:2;;;5608:6;5600;5593:22;5554:2;5653:9;5640:23;5682:18;5723:2;5715:6;5712:14;5709:2;;;5744:6;5736;5729:22;5709:2;5788:70;5850:7;5841:6;5830:9;5826:22;5788:70;:::i;:::-;5877:8;;-1:-1:-1;5762:96:1;-1:-1:-1;5965:2:1;5950:18;;5937:32;;-1:-1:-1;5981:16:1;;;5978:2;;;6015:6;6007;6000:22;5978:2;6059:72;6123:7;6112:8;6101:9;6097:24;6059:72;:::i;:::-;6150:8;;-1:-1:-1;6033:98:1;-1:-1:-1;6238:2:1;6223:18;;6210:32;;-1:-1:-1;6254:16:1;;;6251:2;;;6288:6;6280;6273:22;6251:2;6332:72;6396:7;6385:8;6374:9;6370:24;6332:72;:::i;:::-;6423:8;;-1:-1:-1;6306:98:1;-1:-1:-1;6306:98:1;;-1:-1:-1;6477:38:1;6511:2;6496:18;;6477:38;:::i;:::-;6467:48;;6568:3;6557:9;6553:19;6540:33;6524:49;;6598:2;6588:8;6585:16;6582:2;;;6619:6;6611;6604:22;6582:2;;6663:60;6715:7;6704:8;6693:9;6689:24;6663:60;:::i;:::-;6637:86;;6742:8;6732:18;;;6769:8;6759:18;;;5544:1239;;;;;;;;;;;:::o;6788:1002::-;6872:6;6903:2;6946;6934:9;6925:7;6921:23;6917:32;6914:2;;;6967:6;6959;6952:22;6914:2;7012:9;6999:23;7041:18;7082:2;7074:6;7071:14;7068:2;;;7103:6;7095;7088:22;7068:2;7146:6;7135:9;7131:22;7121:32;;7191:7;7184:4;7180:2;7176:13;7172:27;7162:2;;7218:6;7210;7203:22;7162:2;7259;7246:16;7281:2;7277;7274:10;7271:2;;;7287:18;;:::i;:::-;7333:2;7330:1;7326:10;7316:20;;7356:28;7380:2;7376;7372:11;7356:28;:::i;:::-;7418:15;;;7449:12;;;;7481:11;;;7511;;;7507:20;;7504:33;-1:-1:-1;7501:2:1;;;7555:6;7547;7540:22;7501:2;7582:6;7573:15;;7597:163;7611:2;7608:1;7605:9;7597:163;;;7668:17;;7656:30;;7629:1;7622:9;;;;;7706:12;;;;7738;;7597:163;;;-1:-1:-1;7779:5:1;6883:907;-1:-1:-1;;;;;;;;6883:907:1:o;7795:255::-;7862:6;7915:2;7903:9;7894:7;7890:23;7886:32;7883:2;;;7936:6;7928;7921:22;7883:2;7973:9;7967:16;7992:28;8014:5;7992:28;:::i;:::-;8039:5;7873:177;-1:-1:-1;;;7873:177:1:o;8055:429::-;8125:6;8133;8186:2;8174:9;8165:7;8161:23;8157:32;8154:2;;;8207:6;8199;8192:22;8154:2;8252:9;8239:23;8285:18;8277:6;8274:30;8271:2;;;8322:6;8314;8307:22;8271:2;8366:58;8416:7;8407:6;8396:9;8392:22;8366:58;:::i;:::-;8443:8;;8340:84;;-1:-1:-1;8144:340:1;-1:-1:-1;;;;8144:340:1:o;8489:193::-;8558:6;8611:2;8599:9;8590:7;8586:23;8582:32;8579:2;;;8632:6;8624;8617:22;8579:2;-1:-1:-1;8660:16:1;;8569:113;-1:-1:-1;8569:113:1:o;8687:563::-;8773:6;8781;8789;8797;8850:2;8838:9;8829:7;8825:23;8821:32;8818:2;;;8871:6;8863;8856:22;8818:2;8912:9;8899:23;8889:33;;8969:2;8958:9;8954:18;8941:32;8931:42;;9024:2;9013:9;9009:18;8996:32;9051:18;9043:6;9040:30;9037:2;;;9088:6;9080;9073:22;9454:525;9549:6;9557;9565;9618:2;9606:9;9597:7;9593:23;9589:32;9586:2;;;9639:6;9631;9624:22;9586:2;9680:9;9667:23;9657:33;;9741:2;9730:9;9726:18;9713:32;9768:18;9760:6;9757:30;9754:2;;;9805:6;9797;9790:22;9754:2;9849:70;9911:7;9902:6;9891:9;9887:22;9849:70;:::i;:::-;9576:403;;9938:8;;-1:-1:-1;9823:96:1;;-1:-1:-1;;;;9576:403:1:o;10686:316::-;10727:3;10765:5;10759:12;10792:6;10787:3;10780:19;10808:63;10864:6;10857:4;10852:3;10848:14;10841:4;10834:5;10830:16;10808:63;:::i;:::-;10916:2;10904:15;10921:66;10900:88;10891:98;;;;10991:4;10887:109;;10735:267;-1:-1:-1;;10735:267:1:o;11007:492::-;11104:5;11098:12;11091:20;11084:28;11079:3;11072:41;11159:4;11152:5;11148:16;11142:23;11174:53;11214:12;11174:53;:::i;:::-;11252:4;11243:14;;11236:36;11320:4;11309:16;;11303:23;11335:55;11303:23;11335:55;:::i;:::-;11415:4;11406:14;;11399:38;11486:4;11475:16;;;11469:23;11453:14;;11446:47;11062:437::o;11504:274::-;11633:3;11671:6;11665:13;11687:53;11733:6;11728:3;11721:4;11713:6;11709:17;11687:53;:::i;:::-;11756:16;;;;;11641:137;-1:-1:-1;;11641:137:1:o;13035:2522::-;13398:2;13450:21;;;13520:13;;13423:18;;;13542:22;;;13369:4;;13398:2;13583;;13601:18;;;;13638:4;13665:15;;;13369:4;13711:303;13725:6;13722:1;13719:13;13711:303;;;13784:13;;13826:9;;13837:42;13822:58;13810:71;;13921:11;;13915:18;13901:12;;;13894:40;13954:12;;;;13989:15;;;;13747:1;13740:9;13711:303;;;-1:-1:-1;;14050:19:1;;;14030:18;;;14023:47;14120:13;;14142:21;;;14181:12;;;;-1:-1:-1;14233:1:1;14229:16;;;14220:26;;14216:35;;14276:15;;;14311:4;14324:1204;14340:8;14335:3;14332:17;14324:1204;;;14431:66;14425:3;14417:6;14413:16;14409:89;14402:5;14395:104;14528:8;14522:15;14560:6;14595:2;14589:9;14628:1;14624:2;14621:9;14611:2;;14634:18;;:::i;:::-;14667;;14728:11;;;14722:18;14705:15;;;14698:43;14780:11;;;14774:18;14805:60;14849:15;;;14774:18;14805:60;:::i;:::-;;14902:2;14898;14894:11;14888:18;14929:4;14970:2;14965;14957:6;14953:15;14946:27;15011:4;15007:2;15003:13;14997:20;14986:31;;15041:4;15083:3;15077;15069:6;15065:16;15058:29;15136:4;15132:2;15128:13;15122:20;15100:42;;15155:55;15202:6;15194;15190:19;15174:14;10631:42;10620:54;10608:67;;10598:83;15155:55;15257:11;;;15251:18;15242:6;15230:19;;15223:47;15311:12;;;15305:19;15356:6;15344:19;;15337:31;;;15305:19;-1:-1:-1;15391:49:1;15424:15;;;15305:19;15391:49;:::i;:::-;15504:14;;;;15381:59;-1:-1:-1;;;15465:17:1;;;;14368:1;14359:11;14324:1204;;;-1:-1:-1;15545:6:1;;13378:2179;-1:-1:-1;;;;;;;;;;;13378:2179:1:o;15562:542::-;15751:2;15740:9;15733:21;15790:6;15785:2;15774:9;15770:18;15763:34;15714:4;15820:66;15812:6;15809:78;15806:2;;;15903:4;15897;15890:18;15806:2;15940:6;15937:1;15933:14;15997:6;15989;15984:2;15973:9;15969:18;15956:48;16027:22;;;;16051:2;16023:31;16063:16;;;16023:31;15723:381;-1:-1:-1;;15723:381:1:o;16481:219::-;16630:2;16619:9;16612:21;16593:4;16650:44;16690:2;16679:9;16675:18;16667:6;16650:44;:::i;16887:334::-;16958:2;16952:9;17014:2;17004:13;;17019:66;17000:86;16988:99;;17117:18;17102:34;;17138:22;;;17099:62;17096:2;;;17164:18;;:::i;:::-;17200:2;17193:22;16932:289;;-1:-1:-1;16932:289:1:o;17226:369::-;17265:3;17300;17297:1;17293:11;17411:1;17343:66;17339:74;17336:1;17332:82;17327:2;17320:10;17316:99;17313:2;;;17418:18;;:::i;:::-;17537:1;17469:66;17465:74;17462:1;17458:82;17454:2;17450:91;17447:2;;;17544:18;;:::i;:::-;-1:-1:-1;;17580:9:1;;17273:322::o;17600:128::-;17640:3;17671:1;17667:6;17664:1;17661:13;17658:2;;;17677:18;;:::i;:::-;-1:-1:-1;17713:9:1;;17648:80::o;17733:308::-;17772:1;17798;17788:2;;17803:18;;:::i;:::-;17920:66;17917:1;17914:73;17845:66;17842:1;17839:73;17835:153;17832:2;;;17991:18;;:::i;:::-;-1:-1:-1;18025:10:1;;17778:263::o;18046:120::-;18086:1;18112;18102:2;;18117:18;;:::i;:::-;-1:-1:-1;18151:9:1;;18092:74::o;18171:679::-;18210:7;18242:66;18334:7;18331:1;18327:15;18368:7;18365:1;18361:15;18419:1;18415:2;18411:10;18408:1;18405:17;18400:2;18396;18392:11;18388:35;18385:2;;;18426:18;;:::i;:::-;18465:66;18557:7;18554:1;18550:15;18610:1;18606:2;18601:11;18598:1;18594:19;18589:2;18585;18581:11;18577:37;18574:2;;;18617:18;;:::i;:::-;18663:7;18660:1;18656:15;18646:25;;18716:1;18712:2;18707:11;18704:1;18700:19;18695:2;18691;18687:11;18683:37;18680:2;;;18723:18;;:::i;:::-;18788:1;18784:2;18779:11;18776:1;18772:19;18767:2;18763;18759:11;18755:37;18752:2;;;18795:18;;:::i;:::-;-1:-1:-1;;;18835:9:1;;;;;18222:628;-1:-1:-1;;;18222:628:1:o;18855:372::-;18894:4;18930;18927:1;18923:12;19042:1;18974:66;18970:74;18967:1;18963:82;18958:2;18951:10;18947:99;18944:2;;;19049:18;;:::i;:::-;19168:1;19100:66;19096:74;19093:1;19089:82;19085:2;19081:91;19078:2;;;19175:18;;:::i;:::-;-1:-1:-1;;19212:9:1;;18903:324::o;19232:125::-;19272:4;19300:1;19297;19294:8;19291:2;;;19305:18;;:::i;:::-;-1:-1:-1;19342:9:1;;19281:76::o;19362:258::-;19434:1;19444:113;19458:6;19455:1;19452:13;19444:113;;;19534:11;;;19528:18;19515:11;;;19508:39;19480:2;19473:10;19444:113;;;19575:6;19572:1;19569:13;19566:2;;;-1:-1:-1;;19610:1:1;19592:16;;19585:27;19415:205::o;19625:184::-;19677:77;19674:1;19667:88;19774:4;19771:1;19764:15;19798:4;19795:1;19788:15;19814:184;19866:77;19863:1;19856:88;19963:4;19960:1;19953:15;19987:4;19984:1;19977:15;20003:184;20055:77;20052:1;20045:88;20152:4;20149:1;20142:15;20176:4;20173:1;20166:15;20192:184;20244:77;20241:1;20234:88;20341:4;20338:1;20331:15;20365:4;20362:1;20355:15;20381:122;20471:1;20464:5;20461:12;20451:2;;20477:18;;:::i;20508:118::-;20594:5;20587:13;20580:21;20573:5;20570:32;20560:2;;20616:1;20613;20606:12

Swarm Source

ipfs://a7292f0ddab47a3505891ad9884e55103ea16d6553515e2b0dd89b21a3dbddb7
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.