POL Price: $0.318459 (-1.33%)
Gas: 30 GWei
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenSwapSpot

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2024-12-14
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

contract TokenSwapSpot {
    // Owner of the contract
    address public owner;

    // Oracle address to call for order processing
    address public oracle;

    ISwapRouter swapRouter;
    address public WETH;
    IFeeTracker public feeTracker;

    mapping (address => address) public userIntroducer;

    struct FeeDetails {
        bool allow;
        uint16 percentX10000;
        uint16 resellerCommissionPercentX10000;
    }
    mapping (uint8=>FeeDetails) public feeDetails;

    uint public oracleFee = 0.02 ether;

    // Event for order placed
    event OrderPlaced(address indexed user, address tokenIn, address tokenOut, uint256 limitPrice, uint256 openPrice, uint256 amountIn);

    // Event for swap triggered via oracle
    event OrderTriggered(address indexed user, address tokenIn, address tokenOut, uint256 limitPrice, uint256 amountIn);

    // Event for order cancellation
    event OrderCancelled(address indexed user, address tokenIn, address tokenOut, uint256 limitPrice, uint256 amountIn);

    // Struct representing a limit order
    struct Order {
        address user;
        uint256 openPrice;
        uint256 pairPriceId;
        uint256 amountIn; // tokenInAmount
        uint8 status; // 0=>open / 1=>withdrawn / 2=>cancelled
        uint256 createdAt;
        uint256 updatedAt;
    }
    uint256 public lastOrderId;
    mapping(uint256 => Order) public orders;
    mapping (address => uint[]) userOrderIds;
    mapping (address =>uint) public userOrderCount;

    struct PairPrice{
        address tokenIn;
        address tokenOut;
        uint256 limitPrice;
        uint256 totalAmountIn;
        uint256 amountOut; // if 0 its open, if more it's done
        uint256 totalWithdrawn;
    }
    uint256 public lastPairId;
    mapping(uint256 => PairPrice) public pairPrices;
    mapping(address => mapping(address => mapping(uint=>uint))) pairPriceIds;
    
    // Modifier to restrict functions to the contract owner
    modifier onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    // Modifier to restrict functions to the oracle
    modifier onlyOracle() {
        require(msg.sender == oracle, "Not the oracle");
        _;
    }

    constructor(address _swapRouter,address _feeTracker) {
        // swaprouter Ethereum: 0xE592427A0AEce92De3Edee1F18E0157C05861564
        // swapRouter BNB:      0x8ddA5A831C1BaFFc646C8D0351A59709367D7865
        // swaprourer Arbitrum: 0xE592427A0AEce92De3Edee1F18E0157C05861564
        // swapRouter Polygon:  0xE592427A0AEce92De3Edee1F18E0157C05861564
        // swapRouter TRX:      TQAvWQpT9H916GckwWDJNhYZvQMkuRL7PN

        // feeTracker Ethereum: 0x0000000000000000000000000000000000000000
        // feeTracker BNB:      0x108b50C1DB109692420c4848b0a22e31936514Ce
        // feetracker Arbitrum: 0x0000000000000000000000000000000000000000
        // feetracker Polygon:  0x0A6C58FC372De4D375980Aac10FE6504cAc43E48
        // feeTracker Trx:      0x0000000000000000000000000000000000000000
        
        owner = msg.sender;
        oracle = msg.sender;
        swapRouter = ISwapRouter(_swapRouter);
        WETH = swapRouter.WETH9();


        feeTracker = IFeeTracker(_feeTracker);
        setFeeDetails(0,0,0,false);
        setFeeDetails(1,150,200,true);
        setFeeDetails(2,100,500,true);
        setFeeDetails(3,50,1000,true);
    }

    function setFeeDetails(uint8 _vipId,uint16 _percentX10000,uint16 _resellerCommissionPercentX10000,bool _allow) public onlyOwner{
        feeDetails[_vipId].allow = _allow;
        feeDetails[_vipId].percentX10000 = _percentX10000;
        feeDetails[_vipId].resellerCommissionPercentX10000 = _resellerCommissionPercentX10000;
    }

    // Function to place a limit order
    function placeOrder(address tokenIn, address tokenOut, uint256 limitPrice, uint256 openPrice, uint256 amountIn) external payable {
        require(msg.value >= oracleFee,"Not enough oracle fee");
        require(limitPrice >0,"limit price must be greater than 0");
        require(openPrice >0,"open price must be greater than 0");
        require(amountIn >0,"amountIn must be greater than 0");

        uint8 userVipId = feeTracker.getUserVipStatus(msg.sender);
        require(feeDetails[userVipId].allow,"Vip needed!");

        address payable reseller = payable(feeTracker.getUserIntroducer(msg.sender));
        if(userIntroducer[msg.sender]==address(0) && reseller!=address(0))
            userIntroducer[msg.sender] = reseller;

        if(tokenIn==address(0)) tokenIn=WETH;
        if(tokenOut==address(0)) tokenOut=WETH;

        if (msg.value > oracleFee && tokenIn==address(WETH)) {
            tokenIn = WETH;
            amountIn = msg.value - oracleFee;
            IWETH wethContract = IWETH(WETH);
            wethContract.deposit{value: amountIn}();

            //transfer oracle fee to oracle address
            (bool sent, ) = oracle.call{value: oracleFee}("");
            require(sent, "Failed to send oracle fee");
        }else{
            require(amountIn > 0, "Must specify an amount to swap");

            //transfer token to contract
            IERC20 token = IERC20(tokenIn);
            token.transferFrom(msg.sender, address(this), amountIn);

            //transfer oracle fee to oracle address
            if(msg.value>0){
                (bool sent, ) = oracle.call{value: msg.value}("");
                require(sent, "Failed to send oracle fee");
            }
        }
        
        uint256 pairPriceId = getPairPriceId(tokenIn,tokenOut,limitPrice);
        pairPrices[pairPriceId].totalAmountIn += amountIn;

        //approve tokenIn
        IERC20 erc20 = IERC20(tokenIn);
        if(erc20.allowance(address(this), address(swapRouter))<amountIn)
            erc20.approve(address(swapRouter),type(uint256).max);

        //place order
        Order memory newOrder = Order({
            user: msg.sender,
            openPrice: openPrice,
            pairPriceId:pairPriceId,
            amountIn: amountIn,
            status:0,//pending
            createdAt: block.timestamp,
            updatedAt: 0
        });

        lastOrderId++;
        orders[lastOrderId] = newOrder;
        userOrderIds[msg.sender].push(lastOrderId);
        userOrderCount[msg.sender]++;

        emit OrderPlaced(msg.sender, tokenIn, tokenOut, limitPrice, openPrice, amountIn);
    }

    // Function to cancel an order
    function cancelOrder(uint256 orderIndex) external {
        //validate inputs
        require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid");
        uint256 orderId = userOrderIds[msg.sender][orderIndex];
        require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open");

        //update order status
        orders[orderId].status=2;
        orders[orderId].updatedAt=block.timestamp;
        
        //rollback the amounts
        uint256 pairPriceId = orders[orderId].pairPriceId;
        if(pairPrices[pairPriceId].tokenIn==WETH)
        {
            IWETH(WETH).withdraw(orders[orderId].amountIn);
            (bool success, ) = msg.sender.call{value: orders[orderId].amountIn}("");
            require(success, "Failed to send ETH");
        }else
            IERC20(pairPrices[pairPriceId].tokenIn).transfer(msg.sender, orders[orderId].amountIn);
            
        pairPrices[pairPriceId].totalAmountIn -= orders[orderId].amountIn;
    }

    function withdrawOrder(uint256 orderIndex) public{
        
        //validate inputs
        require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid");
        uint256 orderId = userOrderIds[msg.sender][orderIndex];
        require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open");

        //update order status
        orders[orderId].status=1; //withdrawn
        orders[orderId].updatedAt=block.timestamp;
        
        //pay the swapped amounts 
        uint256 pairPriceId = orders[orderId].pairPriceId;
        require(pairPrices[pairPriceId].amountOut>0,"Order is not placed yet.");
        uint256 totalAmountIn = pairPrices[pairPriceId].totalAmountIn;
        uint256 totalAmountOut = pairPrices[pairPriceId].amountOut;
        uint256 myAmountIn = orders[orderId].amountIn;
        uint256 ratio = myAmountIn * 10**18 / totalAmountIn;
        uint256 myAmountOut = totalAmountOut * ratio / 10**18;


        uint8 userVipId = feeTracker.getUserVipStatus(msg.sender);
        uint16 feePercent = feeDetails[userVipId].percentX10000;
        uint feeAmount = (myAmountOut * feePercent) / 10000;

        uint amountOutAfterFee = myAmountOut - feeAmount;
        
        uint commissionAmount;
        if(feeAmount>0 && userIntroducer[msg.sender]!=address(0)){
            uint8 resellerVipId = feeTracker.getUserVipStatus(userIntroducer[msg.sender]);
            uint16 resellerCommissionPercent = feeDetails[resellerVipId].resellerCommissionPercentX10000;
            commissionAmount = (feeAmount * resellerCommissionPercent) / 10000;
        }

        if(pairPrices[pairPriceId].tokenOut==WETH)
        {
            bool success;
            //pay withdrawable eth to user
            (success,) = msg.sender.call{value: amountOutAfterFee}("");
            if(commissionAmount>0 && userIntroducer[msg.sender]!=address(0))
                //pay introducer commission
                (success,) = userIntroducer[msg.sender].call{value: commissionAmount}("");
            //pay developer share
            (success,) = owner.call{value: feeAmount-commissionAmount}("");
        }else{
            //pay withdrawable eth to user
            IERC20(pairPrices[pairPriceId].tokenOut).transfer(msg.sender, amountOutAfterFee);
            if(commissionAmount>0 && userIntroducer[msg.sender]!=address(0))
               //pay introducer commission
               IERC20(pairPrices[pairPriceId].tokenOut).transfer(userIntroducer[msg.sender], commissionAmount);
            //pay developer share
            IERC20(pairPrices[pairPriceId].tokenOut).transfer(owner, feeAmount-commissionAmount);
        }
        pairPrices[pairPriceId].totalWithdrawn += amountOutAfterFee;
    }

    // Function to process orders in steps (batch processing)
    function processPairPrice(uint256 pairPriceId) external onlyOracle {
        
        //TODO:
        //get price and check if it is ok
        //??????????????????

        //place swap order and get received token amount
        uint256 firstBalance;
        if(pairPrices[pairPriceId].tokenOut == WETH)
            firstBalance = address(this).balance;
        else
            firstBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this));

        address tokenIn = pairPrices[pairPriceId].tokenIn;
        address tokenOut = pairPrices[pairPriceId].tokenOut;
        uint amountIn = pairPrices[pairPriceId].totalAmountIn;
        uint amountInAfterFee = amountIn;//add fee calculation
        if(IERC20(tokenIn).allowance(address(this),address(swapRouter)) < amountInAfterFee)
            IERC20(tokenIn).approve(address(swapRouter), 2**255);

        ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({
            tokenIn: tokenIn,
            tokenOut: tokenOut,
            fee: 3000,
            recipient: address(this),
            deadline: block.timestamp + 15 minutes,
            amountIn: amountInAfterFee,
            amountOutMinimum: 0,
            sqrtPriceLimitX96: 0 //no limit
        });

        uint amountOut = swapRouter.exactInputSingle(params);

        // If swapping to ETH, unwrap WETH to ETH and transfer to the recipient
        if (tokenOut==WETH) {
            IWETH(WETH).withdraw(amountOut);
        }

        uint256 newBalance;
        if(pairPrices[pairPriceId].tokenOut == WETH)
            newBalance = address(this).balance;
        else
            newBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this));
        uint256 income = newBalance - firstBalance;
        require(income>0,"Failed to process swap");

        //disable old pairPrice and update income
        pairPrices[pairPriceId].amountOut = income;
        pairPriceIds[pairPrices[pairPriceId].tokenIn][pairPrices[pairPriceId].tokenOut][pairPrices[pairPriceId].limitPrice]=0;
    }

    // Function to get all active orders for a user with pagination
    struct TmpOrder {
        uint userOrderIndex;
        address user;
        uint256 openPrice;
        uint256 pairPriceId;
        uint256 amountIn; // tokenInAmount
        uint8 status; // 0=>open / 1=>withdrawn / 2=>cancelled
        uint256 createdAt;
        uint256 updatedAt;
        address tokenIn;
        address tokenOut;
        uint256 limitPrice;
        uint256 totalAmountIn;
        uint256 amountOut; // if 0 its open, if more it's done
        uint256 totalWithdrawn;
    }
    function getUserOrdersPaginated(address user,uint256 fromId, uint256 toId) external view returns (TmpOrder[] memory) {
    
        if (toId > userOrderIds[user].length) {
            toId = userOrderIds[user].length;
        }
        require(fromId <= toId, "Invalid pagination range");

        uint256 size = toId - fromId;
        TmpOrder[] memory paginatedOrders = new TmpOrder[](size);
        
        for (uint256 i = 0; i < size; i++) {
            uint256 orderIndex = userOrderIds[user][fromId + i];
            uint256 pairPriceId = orders[orderIndex].pairPriceId;

            TmpOrder memory _tmpOrder = TmpOrder({
                userOrderIndex: fromId + i,
                user: orders[orderIndex].user,
                openPrice: orders[orderIndex].openPrice,
                pairPriceId: orders[orderIndex].pairPriceId,
                amountIn: orders[orderIndex].amountIn, // tokenInAmount
                status: orders[orderIndex].status, // 0=>open / 1=>withdrawn / 2=>cancelled
                createdAt: orders[orderIndex].createdAt,
                updatedAt: orders[orderIndex].updatedAt,
                tokenIn: pairPrices[pairPriceId].tokenIn,
                tokenOut: pairPrices[pairPriceId].tokenOut,
                limitPrice: pairPrices[pairPriceId].limitPrice,
                totalAmountIn: pairPrices[pairPriceId].totalAmountIn,
                amountOut: pairPrices[pairPriceId].amountOut,
                totalWithdrawn: pairPrices[pairPriceId].totalWithdrawn
            });

            // Store the struct in the paginatedOrders array
            paginatedOrders[i] = _tmpOrder;
        }

        return paginatedOrders;
    }

    
    // Function to set a new TokenSwap contract address
    function setSwapRouter(address _swapRouter) external onlyOwner {
        // swapRouter = _swapRouter;
        swapRouter = ISwapRouter(_swapRouter);
        WETH = swapRouter.WETH9();
    }

    // Function to set the oracle address
    function setOracle(address _oracle) external onlyOwner {
        oracle = _oracle;
    }

    // Function to set the oracle address
    function setOracleFee(uint _oracleFee) external onlyOwner {
        oracleFee = _oracleFee;
    }

    // Helper function to round the limitPrice to a smaller step using base 2
    function roundPriceBase2(uint256 limitPrice) private pure returns (uint256) {
        uint256 magnitude = 1 << (log2(limitPrice) - 8); // Shift to create smaller rounding steps
        uint256 roundedPrice = (limitPrice / magnitude) * magnitude;
        return roundedPrice;
    }

    // Efficient log2 implementation (based on bit-shifting)
    function log2(uint256 x) private pure returns (uint256) {
        uint256 result = 0;
        if (x >= 2**128) { x >>= 128; result += 128; }
        if (x >= 2**64)  { x >>= 64; result += 64; }
        if (x >= 2**32)  { x >>= 32; result += 32; }
        if (x >= 2**16)  { x >>= 16; result += 16; }
        if (x >= 2**8)   { x >>= 8;  result += 8; }
        if (x >= 2**4)   { x >>= 4;  result += 4; }
        if (x >= 2**2)   { x >>= 2;  result += 2; }
        if (x >= 2**1)   { result += 1; }
        return result;
    }
    
    function getPairPriceId(address tokenIn,address tokenOut,uint256 limitPrice) private returns(uint){
        // Round the limitPrice to the nearest 0.1%
        limitPrice = roundPriceBase2(limitPrice);
        
        if(pairPriceIds[tokenIn][tokenOut][limitPrice]>0)
            return pairPriceIds[tokenIn][tokenOut][limitPrice];
        
        PairPrice memory _pairPrice = PairPrice({
            tokenIn:tokenIn,
            tokenOut:tokenOut,
            limitPrice:limitPrice,
            totalAmountIn:0,
            amountOut:0, // if 0 its open, if more it's done
            totalWithdrawn:0
        });
        lastPairId++;
        pairPrices[lastPairId] = _pairPrice;
        pairPriceIds[tokenIn][tokenOut][limitPrice] = lastPairId;
        return lastPairId;
    }

    // Emergency withdraw ETH
    function emergencyWithdrawETH(address payable to) external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH to withdraw");
        to.transfer(balance);
    }

    // Emergency withdraw ERC20 tokens
    function emergencyWithdrawToken(address token) external onlyOwner {
        IERC20 erc20 = IERC20(token);
        uint256 balance = erc20.balanceOf(address(this));
        require(balance > 0, "No token balance to withdraw");
        erc20.transfer(owner, balance);
    }

    function getTokenInfo(address tokenAddress) public view returns (string memory name, string memory symbol, uint8 decimals) {
        IERC20 tokenMetadata1 = IERC20(tokenAddress);
        name = tokenMetadata1.name();
        symbol = tokenMetadata1.symbol();
        decimals = tokenMetadata1.decimals();
    }

    // Fallback function to receive ETH
    receive() external payable {}
}

interface IUniswapV3SwapCallback {
    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata data
    ) external;
}
interface ISwapRouter is IUniswapV3SwapCallback {
    function factory() external view returns (address);
    function WETH9() external view returns (address);
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }
    function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut);

    struct ExactInputParams {
        bytes path;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
    }
    function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut);

    struct ExactOutputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountOut;
        uint256 amountInMaximum;
        uint160 sqrtPriceLimitX96;
    }
    function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn);

    struct ExactOutputParams {
        bytes path;
        address recipient;
        uint256 deadline;
        uint256 amountOut;
        uint256 amountInMaximum;
    }
    function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn);
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function allowance(address owner,address spender) external view returns (uint);
    function approve(address spender, uint256 amount) external returns (bool);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

interface IWETH {
    function deposit() external payable;
    function withdraw(uint wad) external;
}

interface IFeeTracker {
    function getUserVipStatus(address) external view returns(uint8);
    function getUserIntroducer(address) external view returns (address);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_swapRouter","type":"address"},{"internalType":"address","name":"_feeTracker","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"limitPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"limitPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"openPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"limitPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderTriggered","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"emergencyWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"feeDetails","outputs":[{"internalType":"bool","name":"allow","type":"bool"},{"internalType":"uint16","name":"percentX10000","type":"uint16"},{"internalType":"uint16","name":"resellerCommissionPercentX10000","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTracker","outputs":[{"internalType":"contract IFeeTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTokenInfo","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fromId","type":"uint256"},{"internalType":"uint256","name":"toId","type":"uint256"}],"name":"getUserOrdersPaginated","outputs":[{"components":[{"internalType":"uint256","name":"userOrderIndex","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"limitPrice","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"internalType":"struct TokenSwapSpot.TmpOrder[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastOrderId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPairId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairPrices","outputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"limitPrice","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"limitPrice","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"placeOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairPriceId","type":"uint256"}],"name":"processPairPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_vipId","type":"uint8"},{"internalType":"uint16","name":"_percentX10000","type":"uint16"},{"internalType":"uint16","name":"_resellerCommissionPercentX10000","type":"uint16"},{"internalType":"bool","name":"_allow","type":"bool"}],"name":"setFeeDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracleFee","type":"uint256"}],"name":"setOracleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapRouter","type":"address"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userIntroducer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userOrderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"withdrawOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405266470de4df82000060075534801561001a575f5ffd5b5060405161592b38038061592b833981810160405281019061003c91906103ef565b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610165573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610189919061042d565b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061021a5f5f5f5f61026560201b60201c565b6102306001609660c8600161026560201b60201c565b610247600260646101f4600161026560201b60201c565b61025e600360326103e8600161026560201b60201c565b50506104d0565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ea906104b2565b60405180910390fd5b8060065f8660ff1660ff1681526020019081526020015f205f015f6101000a81548160ff0219169083151502179055508260065f8660ff1660ff1681526020019081526020015f205f0160016101000a81548161ffff021916908361ffff1602179055508160065f8660ff1660ff1681526020019081526020015f205f0160036101000a81548161ffff021916908361ffff16021790555050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103be82610395565b9050919050565b6103ce816103b4565b81146103d8575f5ffd5b50565b5f815190506103e9816103c5565b92915050565b5f5f6040838503121561040557610404610391565b5b5f610412858286016103db565b9250506020610423858286016103db565b9150509250929050565b5f6020828403121561044257610441610391565b5b5f61044f848285016103db565b91505092915050565b5f82825260208201905092915050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f61049c601683610458565b91506104a782610468565b602082019050919050565b5f6020820190508181035f8301526104c981610490565b9050919050565b61544e806104dd5f395ff3fe60806040526004361061014d575f3560e01c80637adbf973116100b5578063ad5c46481161006e578063ad5c464814610497578063b6d9ef60146104c1578063c8f5a43b146104e9578063ec4eb4f914610527578063f9cd3ceb14610563578063fb791b0b1461058d57610154565b80637adbf9731461036e5780637dc0d1d014610396578063817422c0146103c05780638da5cb5b14610401578063962fba271461042b578063a85c38ef1461045557610154565b806341273657116101075780634127365714610268578063514fcac7146102905780635662ecc7146102b85780635ff0f9e0146102e257806366f48cf51461030a5780636e2bd98d1461034657610154565b8062517d41146101585780631af03203146101945780631f69565f146101bc578063214ff459146101fa5780633325e1df146102225780633cedc5a51461024c57610154565b3661015457005b5f5ffd5b348015610163575f5ffd5b5061017e60048036038101906101799190613ee3565b6105b5565b60405161018b9190613f1d565b60405180910390f35b34801561019f575f5ffd5b506101ba60048036038101906101b59190613ee3565b6105e5565b005b3480156101c7575f5ffd5b506101e260048036038101906101dd9190613ee3565b6107d5565b6040516101f193929190613fc1565b60405180910390f35b348015610205575f5ffd5b50610220600480360381019061021b919061403f565b610938565b005b34801561022d575f5ffd5b50610236610a54565b60405161024391906140c5565b60405180910390f35b61026660048036038101906102619190614111565b610a79565b005b348015610273575f5ffd5b5061028e60048036038101906102899190613ee3565b61165e565b005b34801561029b575f5ffd5b506102b660048036038101906102b19190614188565b6117fc565b005b3480156102c3575f5ffd5b506102cc611ca2565b6040516102d991906141c2565b60405180910390f35b3480156102ed575f5ffd5b5061030860048036038101906103039190614271565b611ca8565b005b348015610315575f5ffd5b50610330600480360381019061032b91906142d5565b611dd4565b60405161033d9190614519565b60405180910390f35b348015610351575f5ffd5b5061036c60048036038101906103679190614188565b6121ee565b005b348015610379575f5ffd5b50610394600480360381019061038f9190613ee3565b612a7f565b005b3480156103a1575f5ffd5b506103aa612b50565b6040516103b79190613f1d565b60405180910390f35b3480156103cb575f5ffd5b506103e660048036038101906103e19190614188565b612b75565b6040516103f896959493929190614539565b60405180910390f35b34801561040c575f5ffd5b50610415612beb565b6040516104229190613f1d565b60405180910390f35b348015610436575f5ffd5b5061043f612c0f565b60405161044c91906141c2565b60405180910390f35b348015610460575f5ffd5b5061047b60048036038101906104769190614188565b612c15565b60405161048e9796959493929190614598565b60405180910390f35b3480156104a2575f5ffd5b506104ab612c7e565b6040516104b89190613f1d565b60405180910390f35b3480156104cc575f5ffd5b506104e760048036038101906104e29190614188565b612ca3565b005b3480156104f4575f5ffd5b5061050f600480360381019061050a9190614605565b612d3b565b60405161051e9392919061464e565b60405180910390f35b348015610532575f5ffd5b5061054d60048036038101906105489190613ee3565b612d87565b60405161055a91906141c2565b60405180910390f35b34801561056e575f5ffd5b50610577612d9c565b60405161058491906141c2565b60405180910390f35b348015610598575f5ffd5b506105b360048036038101906105ae9190614188565b612da2565b005b6005602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a906146cd565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106b19190613f1d565b602060405180830381865afa1580156106cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f091906146ff565b90505f8111610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90614774565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161078f929190614792565b6020604051808303815f875af11580156107ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cf91906147cd565b50505050565b6060805f5f8490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610825573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061084d9190614916565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610897573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906108bf9190614916565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092e9190614971565b9150509193909250565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd906146cd565b60405180910390fd5b5f4790505f8111610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a03906149e6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610a4f573d5f5f3e3d5ffd5b505050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600754341015610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590614a4e565b60405180910390fd5b5f8311610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790614adc565b60405180910390fd5b5f8211610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990614b6a565b60405180910390fd5b5f8111610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90614bd2565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a16ebf33336040518263ffffffff1660e01b8152600401610bdf9190613f1d565b602060405180830381865afa158015610bfa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1e9190614971565b905060065f8260ff1660ff1681526020019081526020015f205f015f9054906101000a900460ff16610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90614c3a565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633149f464336040518263ffffffff1660e01b8152600401610ce09190613f1d565b602060405180830381865afa158015610cfb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1f9190614c6c565b90505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610de457505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15610e65578060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610ebd5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1696505b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603610f155760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695505b60075434118015610f72575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b156110ff5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16965060075434610fa99190614cc4565b92505f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015611016575f5ffd5b505af1158015611028573d5f5f3e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075460405161107590614d24565b5f6040518083038185875af1925050503d805f81146110af576040519150601f19603f3d011682016040523d82523d5f602084013e6110b4565b606091505b50509050806110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90614d82565b60405180910390fd5b5050611298565b5f8311611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890614dea565b60405180910390fd5b5f8790508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b815260040161118293929190614e08565b6020604051808303815f875af115801561119e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c291906147cd565b505f341115611296575f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161121190614d24565b5f6040518083038185875af1925050503d805f811461124b576040519150601f19603f3d011682016040523d82523d5f602084013e611250565b606091505b5050905080611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90614d82565b60405180910390fd5b505b505b5f6112a4888888613971565b905083600d5f8381526020019081526020015f206003015f8282546112c99190614e3d565b925050819055505f889050848173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611331929190614e70565b602060405180830381865afa15801561134c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137091906146ff565b1015611434578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016113f2929190614792565b6020604051808303815f875af115801561140e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143291906147cd565b505b5f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018481526020018781526020015f60ff1681526020014281526020015f815250905060085f81548092919061149590614e97565b91905055508060095f60085481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c08201518160060155905050600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600854908060018154018082558091505060019003905f5260205f20015f9091909190915055600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906115f790614e97565b91905055503373ffffffffffffffffffffffffffffffffffffffff167fe72875bba711be65a0326522afdfe196ba92d5068cc13176f9637449515353888b8b8b8b8b60405161164a959493929190614ede565b60405180910390a250505050505050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e3906146cd565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611796573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ba9190614c6c565b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390614f79565b60405180910390fd5b5f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106118cc576118cb614f97565b5b905f5260205f20015490505f60095f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561191c57505f60095f8381526020019081526020015f2060030154115b61195b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119529061500e565b60405180910390fd5b600260095f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260095f8381526020019081526020015f20600601819055505f60095f8381526020019081526020015f2060020154905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b9c5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60095f8581526020019081526020015f20600301546040518263ffffffff1660e01b8152600401611aad91906141c2565b5f604051808303815f87803b158015611ac4575f5ffd5b505af1158015611ad6573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660095f8581526020019081526020015f2060030154604051611b1390614d24565b5f6040518083038185875af1925050503d805f8114611b4d576040519150601f19603f3d011682016040523d82523d5f602084013e611b52565b606091505b5050905080611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d90615076565b60405180910390fd5b50611c5f565b600d5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360095f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401611c1d929190614792565b6020604051808303815f875af1158015611c39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5d91906147cd565b505b60095f8381526020019081526020015f2060030154600d5f8381526020019081526020015f206003015f828254611c969190614cc4565b92505081905550505050565b60085481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906146cd565b60405180910390fd5b8060065f8660ff1660ff1681526020019081526020015f205f015f6101000a81548160ff0219169083151502179055508260065f8660ff1660ff1681526020019081526020015f205f0160016101000a81548161ffff021916908361ffff1602179055508160065f8660ff1660ff1681526020019081526020015f205f0160036101000a81548161ffff021916908361ffff16021790555050505050565b6060600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050821115611e6257600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b81831115611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c906150de565b60405180910390fd5b5f8383611eb29190614cc4565b90505f8167ffffffffffffffff811115611ecf57611ece614800565b5b604051908082528060200260200182016040528015611f0857816020015b611ef5613dd2565b815260200190600190039081611eed5790505b5090505f5f90505b828110156121e1575f600a5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208288611f629190614e3d565b81548110611f7357611f72614f97565b5b905f5260205f20015490505f60095f8381526020019081526020015f206002015490505f604051806101c00160405280858b611faf9190614e3d565b815260200160095f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160095f8681526020019081526020015f2060010154815260200160095f8681526020019081526020015f2060020154815260200160095f8681526020019081526020015f2060030154815260200160095f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160095f8681526020019081526020015f2060050154815260200160095f8681526020019081526020015f20600601548152602001600d5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600d5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600d5f8581526020019081526020015f20600201548152602001600d5f8581526020019081526020015f20600301548152602001600d5f8581526020019081526020015f20600401548152602001600d5f8581526020019081526020015f20600501548152509050808585815181106121c6576121c5614f97565b5b60200260200101819052505050508080600101915050611f10565b5080925050509392505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227490615146565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361230d574790506123bb565b600d5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123799190613f1d565b602060405180830381865afa158015612394573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b891906146ff565b90505b5f600d5f8481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600d5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600d5f8681526020019081526020015f206003015490505f819050808473ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016124a1929190614e70565b602060405180830381865afa1580156124bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e091906146ff565b10156125a4578373ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f80000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161256292919061519d565b6020604051808303815f875af115801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a291906147cd565b505b5f6040518061010001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001610bb862ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff168152602001610384426126209190614e3d565b81526020018381526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663414bf389836040518263ffffffff1660e01b81526004016126a89190615290565b6020604051808303815f875af11580156126c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e891906146ff565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036127c65760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040161279891906141c2565b5f604051808303815f87803b1580156127af575f5ffd5b505af11580156127c1573d5f5f3e3d5ffd5b505050505b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8b81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361285657479050612904565b600d5f8a81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128c29190613f1d565b602060405180830381865afa1580156128dd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290191906146ff565b90505b5f88826129119190614cc4565b90505f8111612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c906152f4565b60405180910390fd5b80600d5f8c81526020019081526020015f20600401819055505f600e5f600d5f8e81526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600d5f8e81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600d5f8e81526020019081526020015f206002015481526020019081526020015f208190555050505050505050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b04906146cd565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6009602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d28906146cd565b60405180910390fd5b8060078190555050565b6006602052805f5260405f205f91509050805f015f9054906101000a900460ff1690805f0160019054906101000a900461ffff1690805f0160039054906101000a900461ffff16905083565b600b602052805f5260405f205f915090505481565b60075481565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115612e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1990614f79565b60405180910390fd5b5f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110612e7257612e71614f97565b5b905f5260205f20015490505f60095f8381526020019081526020015f206004015f9054906101000a900460ff1660ff16148015612ec257505f60095f8381526020019081526020015f2060030154115b612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef89061500e565b60405180910390fd5b600160095f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260095f8381526020019081526020015f20600601819055505f60095f8381526020019081526020015f206002015490505f600d5f8381526020019081526020015f206004015411612fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fac9061535c565b60405180910390fd5b5f600d5f8381526020019081526020015f206003015490505f600d5f8481526020019081526020015f206004015490505f60095f8681526020019081526020015f206003015490505f83670de0b6b3a764000083613013919061537a565b61301d91906153e8565b90505f670de0b6b3a76400008285613035919061537a565b61303f91906153e8565b90505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a16ebf33336040518263ffffffff1660e01b815260040161309c9190613f1d565b602060405180830381865afa1580156130b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130db9190614971565b90505f60065f8360ff1660ff1681526020019081526020015f205f0160019054906101000a900461ffff1690505f6127108261ffff168561311c919061537a565b61312691906153e8565b90505f81856131359190614cc4565b90505f5f831180156131cf57505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613319575f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a16ebf3360055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161328b9190613f1d565b602060405180830381865afa1580156132a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ca9190614971565b90505f60065f8360ff1660ff1681526020019081526020015f205f0160039054906101000a900461ffff1690506127108161ffff168661330a919061537a565b61331491906153e8565b925050505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8d81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613606575f3373ffffffffffffffffffffffffffffffffffffffff16836040516133c590614d24565b5f6040518083038185875af1925050503d805f81146133ff576040519150601f19603f3d011682016040523d82523d5f602084013e613404565b606091505b5050809150505f821180156134a157505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561356c5760055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161352690614d24565b5f6040518083038185875af1925050503d805f8114613560576040519150601f19603f3d011682016040523d82523d5f602084013e613565565b606091505b5050809150505b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682856135af9190614cc4565b6040516135bb90614d24565b5f6040518083038185875af1925050503d805f81146135f5576040519150601f19603f3d011682016040523d82523d5f602084013e6135fa565b606091505b50508091505050613938565b600d5f8c81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613674929190614792565b6020604051808303815f875af1158015613690573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b491906147cd565b505f8111801561374c57505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561385d57600d5f8c81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161381b929190614792565b6020604051808303815f875af1158015613837573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061385b91906147cd565b505b600d5f8c81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683866138d99190614cc4565b6040518363ffffffff1660e01b81526004016138f6929190614792565b6020604051808303815f875af1158015613912573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393691906147cd565b505b81600d5f8d81526020019081526020015f206005015f82825461395b9190614e3d565b9250508190555050505050505050505050505050565b5f61397b82613c73565b91505f600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20541115613a9b57600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050613c6c565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600c5f815480929190613b0990614e97565b919050555080600d5f600c5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600c54600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600c549150505b9392505050565b5f5f6008613c8084613cb4565b613c8a9190614cc4565b6001901b90505f818285613c9e91906153e8565b613ca8919061537a565b90508092505050919050565b5f5f5f90507001000000000000000000000000000000008310613ce857608083901c9250608081613ce59190614e3d565b90505b680100000000000000008310613d0f57604083901c9250604081613d0c9190614e3d565b90505b6401000000008310613d3257602083901c9250602081613d2f9190614e3d565b90505b620100008310613d5357601083901c9250601081613d509190614e3d565b90505b6101008310613d7357600883901c9250600881613d709190614e3d565b90505b60108310613d9257600483901c9250600481613d8f9190614e3d565b90505b60048310613db157600283901c9250600281613dae9190614e3d565b90505b60028310613dc957600181613dc69190614e3d565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613eb282613e89565b9050919050565b613ec281613ea8565b8114613ecc575f5ffd5b50565b5f81359050613edd81613eb9565b92915050565b5f60208284031215613ef857613ef7613e81565b5b5f613f0584828501613ecf565b91505092915050565b613f1781613ea8565b82525050565b5f602082019050613f305f830184613f0e565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613f7882613f36565b613f828185613f40565b9350613f92818560208601613f50565b613f9b81613f5e565b840191505092915050565b5f60ff82169050919050565b613fbb81613fa6565b82525050565b5f6060820190508181035f830152613fd98186613f6e565b90508181036020830152613fed8185613f6e565b9050613ffc6040830184613fb2565b949350505050565b5f61400e82613e89565b9050919050565b61401e81614004565b8114614028575f5ffd5b50565b5f8135905061403981614015565b92915050565b5f6020828403121561405457614053613e81565b5b5f6140618482850161402b565b91505092915050565b5f819050919050565b5f61408d61408861408384613e89565b61406a565b613e89565b9050919050565b5f61409e82614073565b9050919050565b5f6140af82614094565b9050919050565b6140bf816140a5565b82525050565b5f6020820190506140d85f8301846140b6565b92915050565b5f819050919050565b6140f0816140de565b81146140fa575f5ffd5b50565b5f8135905061410b816140e7565b92915050565b5f5f5f5f5f60a0868803121561412a57614129613e81565b5b5f61413788828901613ecf565b955050602061414888828901613ecf565b9450506040614159888289016140fd565b935050606061416a888289016140fd565b925050608061417b888289016140fd565b9150509295509295909350565b5f6020828403121561419d5761419c613e81565b5b5f6141aa848285016140fd565b91505092915050565b6141bc816140de565b82525050565b5f6020820190506141d55f8301846141b3565b92915050565b6141e481613fa6565b81146141ee575f5ffd5b50565b5f813590506141ff816141db565b92915050565b5f61ffff82169050919050565b61421b81614205565b8114614225575f5ffd5b50565b5f8135905061423681614212565b92915050565b5f8115159050919050565b6142508161423c565b811461425a575f5ffd5b50565b5f8135905061426b81614247565b92915050565b5f5f5f5f6080858703121561428957614288613e81565b5b5f614296878288016141f1565b94505060206142a787828801614228565b93505060406142b887828801614228565b92505060606142c98782880161425d565b91505092959194509250565b5f5f5f606084860312156142ec576142eb613e81565b5b5f6142f986828701613ecf565b935050602061430a868287016140fd565b925050604061431b868287016140fd565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614357816140de565b82525050565b61436681613ea8565b82525050565b61437581613fa6565b82525050565b6101c082015f8201516143905f85018261434e565b5060208201516143a3602085018261435d565b5060408201516143b6604085018261434e565b5060608201516143c9606085018261434e565b5060808201516143dc608085018261434e565b5060a08201516143ef60a085018261436c565b5060c082015161440260c085018261434e565b5060e082015161441560e085018261434e565b5061010082015161442a61010085018261435d565b5061012082015161443f61012085018261435d565b5061014082015161445461014085018261434e565b5061016082015161446961016085018261434e565b5061018082015161447e61018085018261434e565b506101a08201516144936101a085018261434e565b50505050565b5f6144a4838361437b565b6101c08301905092915050565b5f602082019050919050565b5f6144c782614325565b6144d1818561432f565b93506144dc8361433f565b805f5b8381101561450c5781516144f38882614499565b97506144fe836144b1565b9250506001810190506144df565b5085935050505092915050565b5f6020820190508181035f83015261453181846144bd565b905092915050565b5f60c08201905061454c5f830189613f0e565b6145596020830188613f0e565b61456660408301876141b3565b61457360608301866141b3565b61458060808301856141b3565b61458d60a08301846141b3565b979650505050505050565b5f60e0820190506145ab5f83018a613f0e565b6145b860208301896141b3565b6145c560408301886141b3565b6145d260608301876141b3565b6145df6080830186613fb2565b6145ec60a08301856141b3565b6145f960c08301846141b3565b98975050505050505050565b5f6020828403121561461a57614619613e81565b5b5f614627848285016141f1565b91505092915050565b6146398161423c565b82525050565b61464881614205565b82525050565b5f6060820190506146615f830186614630565b61466e602083018561463f565b61467b604083018461463f565b949350505050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f6146b7601683613f40565b91506146c282614683565b602082019050919050565b5f6020820190508181035f8301526146e4816146ab565b9050919050565b5f815190506146f9816140e7565b92915050565b5f6020828403121561471457614713613e81565b5b5f614721848285016146eb565b91505092915050565b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f61475e601c83613f40565b91506147698261472a565b602082019050919050565b5f6020820190508181035f83015261478b81614752565b9050919050565b5f6040820190506147a55f830185613f0e565b6147b260208301846141b3565b9392505050565b5f815190506147c781614247565b92915050565b5f602082840312156147e2576147e1613e81565b5b5f6147ef848285016147b9565b91505092915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61483682613f5e565b810181811067ffffffffffffffff8211171561485557614854614800565b5b80604052505050565b5f614867613e78565b9050614873828261482d565b919050565b5f67ffffffffffffffff82111561489257614891614800565b5b61489b82613f5e565b9050602081019050919050565b5f6148ba6148b584614878565b61485e565b9050828152602081018484840111156148d6576148d56147fc565b5b6148e1848285613f50565b509392505050565b5f82601f8301126148fd576148fc6147f8565b5b815161490d8482602086016148a8565b91505092915050565b5f6020828403121561492b5761492a613e81565b5b5f82015167ffffffffffffffff81111561494857614947613e85565b5b614954848285016148e9565b91505092915050565b5f8151905061496b816141db565b92915050565b5f6020828403121561498657614985613e81565b5b5f6149938482850161495d565b91505092915050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f6149d0601283613f40565b91506149db8261499c565b602082019050919050565b5f6020820190508181035f8301526149fd816149c4565b9050919050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f614a38601583613f40565b9150614a4382614a04565b602082019050919050565b5f6020820190508181035f830152614a6581614a2c565b9050919050565b7f6c696d6974207072696365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ac6602283613f40565b9150614ad182614a6c565b604082019050919050565b5f6020820190508181035f830152614af381614aba565b9050919050565b7f6f70656e207072696365206d7573742062652067726561746572207468616e205f8201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b54602183613f40565b9150614b5f82614afa565b604082019050919050565b5f6020820190508181035f830152614b8181614b48565b9050919050565b7f616d6f756e74496e206d7573742062652067726561746572207468616e2030005f82015250565b5f614bbc601f83613f40565b9150614bc782614b88565b602082019050919050565b5f6020820190508181035f830152614be981614bb0565b9050919050565b7f566970206e6565646564210000000000000000000000000000000000000000005f82015250565b5f614c24600b83613f40565b9150614c2f82614bf0565b602082019050919050565b5f6020820190508181035f830152614c5181614c18565b9050919050565b5f81519050614c6681613eb9565b92915050565b5f60208284031215614c8157614c80613e81565b5b5f614c8e84828501614c58565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614cce826140de565b9150614cd9836140de565b9250828203905081811115614cf157614cf0614c97565b5b92915050565b5f81905092915050565b50565b5f614d0f5f83614cf7565b9150614d1a82614d01565b5f82019050919050565b5f614d2e82614d04565b9150819050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f614d6c601983613f40565b9150614d7782614d38565b602082019050919050565b5f6020820190508181035f830152614d9981614d60565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f614dd4601e83613f40565b9150614ddf82614da0565b602082019050919050565b5f6020820190508181035f830152614e0181614dc8565b9050919050565b5f606082019050614e1b5f830186613f0e565b614e286020830185613f0e565b614e3560408301846141b3565b949350505050565b5f614e47826140de565b9150614e52836140de565b9250828201905080821115614e6a57614e69614c97565b5b92915050565b5f604082019050614e835f830185613f0e565b614e906020830184613f0e565b9392505050565b5f614ea1826140de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ed357614ed2614c97565b5b600182019050919050565b5f60a082019050614ef15f830188613f0e565b614efe6020830187613f0e565b614f0b60408301866141b3565b614f1860608301856141b3565b614f2560808301846141b3565b9695505050505050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f614f63601583613f40565b9150614f6e82614f2f565b602082019050919050565b5f6020820190508181035f830152614f9081614f57565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f614ff8601183613f40565b915061500382614fc4565b602082019050919050565b5f6020820190508181035f83015261502581614fec565b9050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f615060601283613f40565b915061506b8261502c565b602082019050919050565b5f6020820190508181035f83015261508d81615054565b9050919050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f6150c8601883613f40565b91506150d382615094565b602082019050919050565b5f6020820190508181035f8301526150f5816150bc565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f615130600e83613f40565b915061513b826150fc565b602082019050919050565b5f6020820190508181035f83015261515d81615124565b9050919050565b5f819050919050565b5f61518761518261517d84615164565b61406a565b6140de565b9050919050565b6151978161516d565b82525050565b5f6040820190506151b05f830185613f0e565b6151bd602083018461518e565b9392505050565b5f62ffffff82169050919050565b6151db816151c4565b82525050565b6151ea81613e89565b82525050565b61010082015f8201516152055f85018261435d565b506020820151615218602085018261435d565b50604082015161522b60408501826151d2565b50606082015161523e606085018261435d565b506080820151615251608085018261434e565b5060a082015161526460a085018261434e565b5060c082015161527760c085018261434e565b5060e082015161528a60e08501826151e1565b50505050565b5f610100820190506152a45f8301846151f0565b92915050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f6152de601683613f40565b91506152e9826152aa565b602082019050919050565b5f6020820190508181035f83015261530b816152d2565b9050919050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f615346601883613f40565b915061535182615312565b602082019050919050565b5f6020820190508181035f8301526153738161533a565b9050919050565b5f615384826140de565b915061538f836140de565b925082820261539d816140de565b915082820484148315176153b4576153b3614c97565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6153f2826140de565b91506153fd836140de565b92508261540d5761540c6153bb565b5b82820490509291505056fea2646970667358221220b6dd81fe574175a53581846939315c0e03d05942ffde8db04f56ff96d6518f0164736f6c634300081c0033000000000000000000000000e592427a0aece92de3edee1f18e0157c058615640000000000000000000000000a6c58fc372de4d375980aac10fe6504cac43e48

Deployed Bytecode

0x60806040526004361061014d575f3560e01c80637adbf973116100b5578063ad5c46481161006e578063ad5c464814610497578063b6d9ef60146104c1578063c8f5a43b146104e9578063ec4eb4f914610527578063f9cd3ceb14610563578063fb791b0b1461058d57610154565b80637adbf9731461036e5780637dc0d1d014610396578063817422c0146103c05780638da5cb5b14610401578063962fba271461042b578063a85c38ef1461045557610154565b806341273657116101075780634127365714610268578063514fcac7146102905780635662ecc7146102b85780635ff0f9e0146102e257806366f48cf51461030a5780636e2bd98d1461034657610154565b8062517d41146101585780631af03203146101945780631f69565f146101bc578063214ff459146101fa5780633325e1df146102225780633cedc5a51461024c57610154565b3661015457005b5f5ffd5b348015610163575f5ffd5b5061017e60048036038101906101799190613ee3565b6105b5565b60405161018b9190613f1d565b60405180910390f35b34801561019f575f5ffd5b506101ba60048036038101906101b59190613ee3565b6105e5565b005b3480156101c7575f5ffd5b506101e260048036038101906101dd9190613ee3565b6107d5565b6040516101f193929190613fc1565b60405180910390f35b348015610205575f5ffd5b50610220600480360381019061021b919061403f565b610938565b005b34801561022d575f5ffd5b50610236610a54565b60405161024391906140c5565b60405180910390f35b61026660048036038101906102619190614111565b610a79565b005b348015610273575f5ffd5b5061028e60048036038101906102899190613ee3565b61165e565b005b34801561029b575f5ffd5b506102b660048036038101906102b19190614188565b6117fc565b005b3480156102c3575f5ffd5b506102cc611ca2565b6040516102d991906141c2565b60405180910390f35b3480156102ed575f5ffd5b5061030860048036038101906103039190614271565b611ca8565b005b348015610315575f5ffd5b50610330600480360381019061032b91906142d5565b611dd4565b60405161033d9190614519565b60405180910390f35b348015610351575f5ffd5b5061036c60048036038101906103679190614188565b6121ee565b005b348015610379575f5ffd5b50610394600480360381019061038f9190613ee3565b612a7f565b005b3480156103a1575f5ffd5b506103aa612b50565b6040516103b79190613f1d565b60405180910390f35b3480156103cb575f5ffd5b506103e660048036038101906103e19190614188565b612b75565b6040516103f896959493929190614539565b60405180910390f35b34801561040c575f5ffd5b50610415612beb565b6040516104229190613f1d565b60405180910390f35b348015610436575f5ffd5b5061043f612c0f565b60405161044c91906141c2565b60405180910390f35b348015610460575f5ffd5b5061047b60048036038101906104769190614188565b612c15565b60405161048e9796959493929190614598565b60405180910390f35b3480156104a2575f5ffd5b506104ab612c7e565b6040516104b89190613f1d565b60405180910390f35b3480156104cc575f5ffd5b506104e760048036038101906104e29190614188565b612ca3565b005b3480156104f4575f5ffd5b5061050f600480360381019061050a9190614605565b612d3b565b60405161051e9392919061464e565b60405180910390f35b348015610532575f5ffd5b5061054d60048036038101906105489190613ee3565b612d87565b60405161055a91906141c2565b60405180910390f35b34801561056e575f5ffd5b50610577612d9c565b60405161058491906141c2565b60405180910390f35b348015610598575f5ffd5b506105b360048036038101906105ae9190614188565b612da2565b005b6005602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a906146cd565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106b19190613f1d565b602060405180830381865afa1580156106cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f091906146ff565b90505f8111610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90614774565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161078f929190614792565b6020604051808303815f875af11580156107ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cf91906147cd565b50505050565b6060805f5f8490508073ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610825573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061084d9190614916565b93508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610897573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906108bf9190614916565b92508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092e9190614971565b9150509193909250565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd906146cd565b60405180910390fd5b5f4790505f8111610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a03906149e6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610a4f573d5f5f3e3d5ffd5b505050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600754341015610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590614a4e565b60405180910390fd5b5f8311610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790614adc565b60405180910390fd5b5f8211610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990614b6a565b60405180910390fd5b5f8111610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90614bd2565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a16ebf33336040518263ffffffff1660e01b8152600401610bdf9190613f1d565b602060405180830381865afa158015610bfa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1e9190614971565b905060065f8260ff1660ff1681526020019081526020015f205f015f9054906101000a900460ff16610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90614c3a565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633149f464336040518263ffffffff1660e01b8152600401610ce09190613f1d565b602060405180830381865afa158015610cfb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1f9190614c6c565b90505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610de457505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15610e65578060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610ebd5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1696505b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603610f155760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695505b60075434118015610f72575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b156110ff5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16965060075434610fa99190614cc4565b92505f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015611016575f5ffd5b505af1158015611028573d5f5f3e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075460405161107590614d24565b5f6040518083038185875af1925050503d805f81146110af576040519150601f19603f3d011682016040523d82523d5f602084013e6110b4565b606091505b50509050806110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90614d82565b60405180910390fd5b5050611298565b5f8311611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890614dea565b60405180910390fd5b5f8790508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b815260040161118293929190614e08565b6020604051808303815f875af115801561119e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c291906147cd565b505f341115611296575f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161121190614d24565b5f6040518083038185875af1925050503d805f811461124b576040519150601f19603f3d011682016040523d82523d5f602084013e611250565b606091505b5050905080611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90614d82565b60405180910390fd5b505b505b5f6112a4888888613971565b905083600d5f8381526020019081526020015f206003015f8282546112c99190614e3d565b925050819055505f889050848173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611331929190614e70565b602060405180830381865afa15801561134c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137091906146ff565b1015611434578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016113f2929190614792565b6020604051808303815f875af115801561140e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143291906147cd565b505b5f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018481526020018781526020015f60ff1681526020014281526020015f815250905060085f81548092919061149590614e97565b91905055508060095f60085481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c08201518160060155905050600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600854908060018154018082558091505060019003905f5260205f20015f9091909190915055600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906115f790614e97565b91905055503373ffffffffffffffffffffffffffffffffffffffff167fe72875bba711be65a0326522afdfe196ba92d5068cc13176f9637449515353888b8b8b8b8b60405161164a959493929190614ede565b60405180910390a250505050505050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e3906146cd565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611796573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ba9190614c6c565b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390614f79565b60405180910390fd5b5f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106118cc576118cb614f97565b5b905f5260205f20015490505f60095f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561191c57505f60095f8381526020019081526020015f2060030154115b61195b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119529061500e565b60405180910390fd5b600260095f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260095f8381526020019081526020015f20600601819055505f60095f8381526020019081526020015f2060020154905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b9c5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60095f8581526020019081526020015f20600301546040518263ffffffff1660e01b8152600401611aad91906141c2565b5f604051808303815f87803b158015611ac4575f5ffd5b505af1158015611ad6573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660095f8581526020019081526020015f2060030154604051611b1390614d24565b5f6040518083038185875af1925050503d805f8114611b4d576040519150601f19603f3d011682016040523d82523d5f602084013e611b52565b606091505b5050905080611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d90615076565b60405180910390fd5b50611c5f565b600d5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360095f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401611c1d929190614792565b6020604051808303815f875af1158015611c39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5d91906147cd565b505b60095f8381526020019081526020015f2060030154600d5f8381526020019081526020015f206003015f828254611c969190614cc4565b92505081905550505050565b60085481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906146cd565b60405180910390fd5b8060065f8660ff1660ff1681526020019081526020015f205f015f6101000a81548160ff0219169083151502179055508260065f8660ff1660ff1681526020019081526020015f205f0160016101000a81548161ffff021916908361ffff1602179055508160065f8660ff1660ff1681526020019081526020015f205f0160036101000a81548161ffff021916908361ffff16021790555050505050565b6060600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050821115611e6257600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b81831115611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c906150de565b60405180910390fd5b5f8383611eb29190614cc4565b90505f8167ffffffffffffffff811115611ecf57611ece614800565b5b604051908082528060200260200182016040528015611f0857816020015b611ef5613dd2565b815260200190600190039081611eed5790505b5090505f5f90505b828110156121e1575f600a5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208288611f629190614e3d565b81548110611f7357611f72614f97565b5b905f5260205f20015490505f60095f8381526020019081526020015f206002015490505f604051806101c00160405280858b611faf9190614e3d565b815260200160095f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160095f8681526020019081526020015f2060010154815260200160095f8681526020019081526020015f2060020154815260200160095f8681526020019081526020015f2060030154815260200160095f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160095f8681526020019081526020015f2060050154815260200160095f8681526020019081526020015f20600601548152602001600d5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600d5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600d5f8581526020019081526020015f20600201548152602001600d5f8581526020019081526020015f20600301548152602001600d5f8581526020019081526020015f20600401548152602001600d5f8581526020019081526020015f20600501548152509050808585815181106121c6576121c5614f97565b5b60200260200101819052505050508080600101915050611f10565b5080925050509392505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227490615146565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361230d574790506123bb565b600d5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123799190613f1d565b602060405180830381865afa158015612394573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b891906146ff565b90505b5f600d5f8481526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600d5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600d5f8681526020019081526020015f206003015490505f819050808473ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016124a1929190614e70565b602060405180830381865afa1580156124bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e091906146ff565b10156125a4578373ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f80000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161256292919061519d565b6020604051808303815f875af115801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a291906147cd565b505b5f6040518061010001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001610bb862ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff168152602001610384426126209190614e3d565b81526020018381526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663414bf389836040518263ffffffff1660e01b81526004016126a89190615290565b6020604051808303815f875af11580156126c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e891906146ff565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036127c65760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040161279891906141c2565b5f604051808303815f87803b1580156127af575f5ffd5b505af11580156127c1573d5f5f3e3d5ffd5b505050505b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8b81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361285657479050612904565b600d5f8a81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128c29190613f1d565b602060405180830381865afa1580156128dd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290191906146ff565b90505b5f88826129119190614cc4565b90505f8111612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c906152f4565b60405180910390fd5b80600d5f8c81526020019081526020015f20600401819055505f600e5f600d5f8e81526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600d5f8e81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600d5f8e81526020019081526020015f206002015481526020019081526020015f208190555050505050505050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b04906146cd565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6009602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d28906146cd565b60405180910390fd5b8060078190555050565b6006602052805f5260405f205f91509050805f015f9054906101000a900460ff1690805f0160019054906101000a900461ffff1690805f0160039054906101000a900461ffff16905083565b600b602052805f5260405f205f915090505481565b60075481565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115612e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1990614f79565b60405180910390fd5b5f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110612e7257612e71614f97565b5b905f5260205f20015490505f60095f8381526020019081526020015f206004015f9054906101000a900460ff1660ff16148015612ec257505f60095f8381526020019081526020015f2060030154115b612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef89061500e565b60405180910390fd5b600160095f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260095f8381526020019081526020015f20600601819055505f60095f8381526020019081526020015f206002015490505f600d5f8381526020019081526020015f206004015411612fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fac9061535c565b60405180910390fd5b5f600d5f8381526020019081526020015f206003015490505f600d5f8481526020019081526020015f206004015490505f60095f8681526020019081526020015f206003015490505f83670de0b6b3a764000083613013919061537a565b61301d91906153e8565b90505f670de0b6b3a76400008285613035919061537a565b61303f91906153e8565b90505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a16ebf33336040518263ffffffff1660e01b815260040161309c9190613f1d565b602060405180830381865afa1580156130b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130db9190614971565b90505f60065f8360ff1660ff1681526020019081526020015f205f0160019054906101000a900461ffff1690505f6127108261ffff168561311c919061537a565b61312691906153e8565b90505f81856131359190614cc4565b90505f5f831180156131cf57505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613319575f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a16ebf3360055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161328b9190613f1d565b602060405180830381865afa1580156132a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ca9190614971565b90505f60065f8360ff1660ff1681526020019081526020015f205f0160039054906101000a900461ffff1690506127108161ffff168661330a919061537a565b61331491906153e8565b925050505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d5f8d81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613606575f3373ffffffffffffffffffffffffffffffffffffffff16836040516133c590614d24565b5f6040518083038185875af1925050503d805f81146133ff576040519150601f19603f3d011682016040523d82523d5f602084013e613404565b606091505b5050809150505f821180156134a157505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561356c5760055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161352690614d24565b5f6040518083038185875af1925050503d805f8114613560576040519150601f19603f3d011682016040523d82523d5f602084013e613565565b606091505b5050809150505b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682856135af9190614cc4565b6040516135bb90614d24565b5f6040518083038185875af1925050503d805f81146135f5576040519150601f19603f3d011682016040523d82523d5f602084013e6135fa565b606091505b50508091505050613938565b600d5f8c81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613674929190614792565b6020604051808303815f875af1158015613690573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b491906147cd565b505f8111801561374c57505f73ffffffffffffffffffffffffffffffffffffffff1660055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561385d57600d5f8c81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161381b929190614792565b6020604051808303815f875af1158015613837573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061385b91906147cd565b505b600d5f8c81526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683866138d99190614cc4565b6040518363ffffffff1660e01b81526004016138f6929190614792565b6020604051808303815f875af1158015613912573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393691906147cd565b505b81600d5f8d81526020019081526020015f206005015f82825461395b9190614e3d565b9250508190555050505050505050505050505050565b5f61397b82613c73565b91505f600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20541115613a9b57600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050613c6c565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600c5f815480929190613b0990614e97565b919050555080600d5f600c5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600c54600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600c549150505b9392505050565b5f5f6008613c8084613cb4565b613c8a9190614cc4565b6001901b90505f818285613c9e91906153e8565b613ca8919061537a565b90508092505050919050565b5f5f5f90507001000000000000000000000000000000008310613ce857608083901c9250608081613ce59190614e3d565b90505b680100000000000000008310613d0f57604083901c9250604081613d0c9190614e3d565b90505b6401000000008310613d3257602083901c9250602081613d2f9190614e3d565b90505b620100008310613d5357601083901c9250601081613d509190614e3d565b90505b6101008310613d7357600883901c9250600881613d709190614e3d565b90505b60108310613d9257600483901c9250600481613d8f9190614e3d565b90505b60048310613db157600283901c9250600281613dae9190614e3d565b90505b60028310613dc957600181613dc69190614e3d565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613eb282613e89565b9050919050565b613ec281613ea8565b8114613ecc575f5ffd5b50565b5f81359050613edd81613eb9565b92915050565b5f60208284031215613ef857613ef7613e81565b5b5f613f0584828501613ecf565b91505092915050565b613f1781613ea8565b82525050565b5f602082019050613f305f830184613f0e565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613f7882613f36565b613f828185613f40565b9350613f92818560208601613f50565b613f9b81613f5e565b840191505092915050565b5f60ff82169050919050565b613fbb81613fa6565b82525050565b5f6060820190508181035f830152613fd98186613f6e565b90508181036020830152613fed8185613f6e565b9050613ffc6040830184613fb2565b949350505050565b5f61400e82613e89565b9050919050565b61401e81614004565b8114614028575f5ffd5b50565b5f8135905061403981614015565b92915050565b5f6020828403121561405457614053613e81565b5b5f6140618482850161402b565b91505092915050565b5f819050919050565b5f61408d61408861408384613e89565b61406a565b613e89565b9050919050565b5f61409e82614073565b9050919050565b5f6140af82614094565b9050919050565b6140bf816140a5565b82525050565b5f6020820190506140d85f8301846140b6565b92915050565b5f819050919050565b6140f0816140de565b81146140fa575f5ffd5b50565b5f8135905061410b816140e7565b92915050565b5f5f5f5f5f60a0868803121561412a57614129613e81565b5b5f61413788828901613ecf565b955050602061414888828901613ecf565b9450506040614159888289016140fd565b935050606061416a888289016140fd565b925050608061417b888289016140fd565b9150509295509295909350565b5f6020828403121561419d5761419c613e81565b5b5f6141aa848285016140fd565b91505092915050565b6141bc816140de565b82525050565b5f6020820190506141d55f8301846141b3565b92915050565b6141e481613fa6565b81146141ee575f5ffd5b50565b5f813590506141ff816141db565b92915050565b5f61ffff82169050919050565b61421b81614205565b8114614225575f5ffd5b50565b5f8135905061423681614212565b92915050565b5f8115159050919050565b6142508161423c565b811461425a575f5ffd5b50565b5f8135905061426b81614247565b92915050565b5f5f5f5f6080858703121561428957614288613e81565b5b5f614296878288016141f1565b94505060206142a787828801614228565b93505060406142b887828801614228565b92505060606142c98782880161425d565b91505092959194509250565b5f5f5f606084860312156142ec576142eb613e81565b5b5f6142f986828701613ecf565b935050602061430a868287016140fd565b925050604061431b868287016140fd565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614357816140de565b82525050565b61436681613ea8565b82525050565b61437581613fa6565b82525050565b6101c082015f8201516143905f85018261434e565b5060208201516143a3602085018261435d565b5060408201516143b6604085018261434e565b5060608201516143c9606085018261434e565b5060808201516143dc608085018261434e565b5060a08201516143ef60a085018261436c565b5060c082015161440260c085018261434e565b5060e082015161441560e085018261434e565b5061010082015161442a61010085018261435d565b5061012082015161443f61012085018261435d565b5061014082015161445461014085018261434e565b5061016082015161446961016085018261434e565b5061018082015161447e61018085018261434e565b506101a08201516144936101a085018261434e565b50505050565b5f6144a4838361437b565b6101c08301905092915050565b5f602082019050919050565b5f6144c782614325565b6144d1818561432f565b93506144dc8361433f565b805f5b8381101561450c5781516144f38882614499565b97506144fe836144b1565b9250506001810190506144df565b5085935050505092915050565b5f6020820190508181035f83015261453181846144bd565b905092915050565b5f60c08201905061454c5f830189613f0e565b6145596020830188613f0e565b61456660408301876141b3565b61457360608301866141b3565b61458060808301856141b3565b61458d60a08301846141b3565b979650505050505050565b5f60e0820190506145ab5f83018a613f0e565b6145b860208301896141b3565b6145c560408301886141b3565b6145d260608301876141b3565b6145df6080830186613fb2565b6145ec60a08301856141b3565b6145f960c08301846141b3565b98975050505050505050565b5f6020828403121561461a57614619613e81565b5b5f614627848285016141f1565b91505092915050565b6146398161423c565b82525050565b61464881614205565b82525050565b5f6060820190506146615f830186614630565b61466e602083018561463f565b61467b604083018461463f565b949350505050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f6146b7601683613f40565b91506146c282614683565b602082019050919050565b5f6020820190508181035f8301526146e4816146ab565b9050919050565b5f815190506146f9816140e7565b92915050565b5f6020828403121561471457614713613e81565b5b5f614721848285016146eb565b91505092915050565b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f61475e601c83613f40565b91506147698261472a565b602082019050919050565b5f6020820190508181035f83015261478b81614752565b9050919050565b5f6040820190506147a55f830185613f0e565b6147b260208301846141b3565b9392505050565b5f815190506147c781614247565b92915050565b5f602082840312156147e2576147e1613e81565b5b5f6147ef848285016147b9565b91505092915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61483682613f5e565b810181811067ffffffffffffffff8211171561485557614854614800565b5b80604052505050565b5f614867613e78565b9050614873828261482d565b919050565b5f67ffffffffffffffff82111561489257614891614800565b5b61489b82613f5e565b9050602081019050919050565b5f6148ba6148b584614878565b61485e565b9050828152602081018484840111156148d6576148d56147fc565b5b6148e1848285613f50565b509392505050565b5f82601f8301126148fd576148fc6147f8565b5b815161490d8482602086016148a8565b91505092915050565b5f6020828403121561492b5761492a613e81565b5b5f82015167ffffffffffffffff81111561494857614947613e85565b5b614954848285016148e9565b91505092915050565b5f8151905061496b816141db565b92915050565b5f6020828403121561498657614985613e81565b5b5f6149938482850161495d565b91505092915050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f6149d0601283613f40565b91506149db8261499c565b602082019050919050565b5f6020820190508181035f8301526149fd816149c4565b9050919050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f614a38601583613f40565b9150614a4382614a04565b602082019050919050565b5f6020820190508181035f830152614a6581614a2c565b9050919050565b7f6c696d6974207072696365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ac6602283613f40565b9150614ad182614a6c565b604082019050919050565b5f6020820190508181035f830152614af381614aba565b9050919050565b7f6f70656e207072696365206d7573742062652067726561746572207468616e205f8201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b54602183613f40565b9150614b5f82614afa565b604082019050919050565b5f6020820190508181035f830152614b8181614b48565b9050919050565b7f616d6f756e74496e206d7573742062652067726561746572207468616e2030005f82015250565b5f614bbc601f83613f40565b9150614bc782614b88565b602082019050919050565b5f6020820190508181035f830152614be981614bb0565b9050919050565b7f566970206e6565646564210000000000000000000000000000000000000000005f82015250565b5f614c24600b83613f40565b9150614c2f82614bf0565b602082019050919050565b5f6020820190508181035f830152614c5181614c18565b9050919050565b5f81519050614c6681613eb9565b92915050565b5f60208284031215614c8157614c80613e81565b5b5f614c8e84828501614c58565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614cce826140de565b9150614cd9836140de565b9250828203905081811115614cf157614cf0614c97565b5b92915050565b5f81905092915050565b50565b5f614d0f5f83614cf7565b9150614d1a82614d01565b5f82019050919050565b5f614d2e82614d04565b9150819050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f614d6c601983613f40565b9150614d7782614d38565b602082019050919050565b5f6020820190508181035f830152614d9981614d60565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f614dd4601e83613f40565b9150614ddf82614da0565b602082019050919050565b5f6020820190508181035f830152614e0181614dc8565b9050919050565b5f606082019050614e1b5f830186613f0e565b614e286020830185613f0e565b614e3560408301846141b3565b949350505050565b5f614e47826140de565b9150614e52836140de565b9250828201905080821115614e6a57614e69614c97565b5b92915050565b5f604082019050614e835f830185613f0e565b614e906020830184613f0e565b9392505050565b5f614ea1826140de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ed357614ed2614c97565b5b600182019050919050565b5f60a082019050614ef15f830188613f0e565b614efe6020830187613f0e565b614f0b60408301866141b3565b614f1860608301856141b3565b614f2560808301846141b3565b9695505050505050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f614f63601583613f40565b9150614f6e82614f2f565b602082019050919050565b5f6020820190508181035f830152614f9081614f57565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f614ff8601183613f40565b915061500382614fc4565b602082019050919050565b5f6020820190508181035f83015261502581614fec565b9050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f615060601283613f40565b915061506b8261502c565b602082019050919050565b5f6020820190508181035f83015261508d81615054565b9050919050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f6150c8601883613f40565b91506150d382615094565b602082019050919050565b5f6020820190508181035f8301526150f5816150bc565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f615130600e83613f40565b915061513b826150fc565b602082019050919050565b5f6020820190508181035f83015261515d81615124565b9050919050565b5f819050919050565b5f61518761518261517d84615164565b61406a565b6140de565b9050919050565b6151978161516d565b82525050565b5f6040820190506151b05f830185613f0e565b6151bd602083018461518e565b9392505050565b5f62ffffff82169050919050565b6151db816151c4565b82525050565b6151ea81613e89565b82525050565b61010082015f8201516152055f85018261435d565b506020820151615218602085018261435d565b50604082015161522b60408501826151d2565b50606082015161523e606085018261435d565b506080820151615251608085018261434e565b5060a082015161526460a085018261434e565b5060c082015161527760c085018261434e565b5060e082015161528a60e08501826151e1565b50505050565b5f610100820190506152a45f8301846151f0565b92915050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f6152de601683613f40565b91506152e9826152aa565b602082019050919050565b5f6020820190508181035f83015261530b816152d2565b9050919050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f615346601883613f40565b915061535182615312565b602082019050919050565b5f6020820190508181035f8301526153738161533a565b9050919050565b5f615384826140de565b915061538f836140de565b925082820261539d816140de565b915082820484148315176153b4576153b3614c97565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6153f2826140de565b91506153fd836140de565b92508261540d5761540c6153bb565b5b82820490509291505056fea2646970667358221220b6dd81fe574175a53581846939315c0e03d05942ffde8db04f56ff96d6518f0164736f6c634300081c0033

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

000000000000000000000000e592427a0aece92de3edee1f18e0157c058615640000000000000000000000000a6c58fc372de4d375980aac10fe6504cac43e48

-----Decoded View---------------
Arg [0] : _swapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [1] : _feeTracker (address): 0x0A6C58FC372De4D375980Aac10FE6504cAc43E48

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [1] : 0000000000000000000000000a6c58fc372de4d375980aac10fe6504cac43e48


Deployed Bytecode Sourcemap

61:18214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;325:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17595:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17879:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;17336:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;287:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3925:2680;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15021:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6649:1017;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1428:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3542:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13241:1709;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10527:2121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15265:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;202:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1882:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;121:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1850:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1461:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;261:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15406:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;517:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;1554:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;571:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7674:2782;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;325:50;;;;;;;;;;;;;;;;;;;;;;:::o;17595:276::-;2136:5;;;;;;;;;;;2122:19;;:10;:19;;;2114:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;17672:12:::1;17694:5;17672:28;;17711:15;17729:5;:15;;;17753:4;17729:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17711:48;;17788:1;17778:7;:11;17770:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;17833:5;:14;;;17848:5;;;;;;;;;;;17855:7;17833:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17661:210;;17595:276:::0;:::o;17879:315::-;17944:18;17964:20;17986:14;18013:21;18044:12;18013:44;;18075:14;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18068:28;;18116:14;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18107:32;;18161:14;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18150:36;;18002:192;17879:315;;;;;:::o;17336:211::-;2136:5;;;;;;;;;;;2122:19;;:10;:19;;;2114:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;17416:15:::1;17434:21;17416:39;;17484:1;17474:7;:11;17466:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;17519:2;:11;;:20;17531:7;17519:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17405:142;17336:211:::0;:::o;287:29::-;;;;;;;;;;;;;:::o;3925:2680::-;4086:9;;4073;:22;;4065:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4151:1;4139:10;:13;4131:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;4220:1;4209:9;:12;4201:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4287:1;4277:8;:11;4269:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;4336:15;4354:10;;;;;;;;;;;:27;;;4382:10;4354:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4336:57;;4412:10;:21;4423:9;4412:21;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4404:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;4467:24;4502:10;;;;;;;;;;;:28;;;4531:10;4502:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4467:76;;4593:1;4557:38;;:14;:26;4572:10;4557:26;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;:62;;;;;4617:1;4599:20;;:8;:20;;;;4557:62;4554:117;;;4663:8;4634:14;:26;4649:10;4634:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4554:117;4704:1;4687:19;;:7;:19;;;4684:36;;4716:4;;;;;;;;;;;4708:12;;4684:36;4752:1;4734:20;;:8;:20;;;4731:38;;4765:4;;;;;;;;;;;4756:13;;4731:38;4798:9;;4786;:21;:47;;;;;4828:4;;;;;;;;;;;4811:22;;:7;:22;;;4786:47;4782:892;;;4860:4;;;;;;;;;;;4850:14;;4902:9;;4890;:21;;;;:::i;:::-;4879:32;;4926:18;4953:4;;;;;;;;;;;4926:32;;4973:12;:20;;;5001:8;4973:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:9;5098:6;;;;;;;;;;;:11;;5117:9;;5098:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5082:49;;;5154:4;5146:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;4835:365;;4782:892;;;5238:1;5227:8;:12;5219:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;5333:12;5355:7;5333:30;;5378:5;:18;;;5397:10;5417:4;5424:8;5378:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5516:1;5506:9;:11;5503:160;;;5538:9;5553:6;;;;;;;;;;;:11;;5572:9;5553:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5537:49;;;5613:4;5605:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;5518:145;5503:160;5204:470;4782:892;5694:19;5716:43;5731:7;5739:8;5748:10;5716:14;:43::i;:::-;5694:65;;5811:8;5770:10;:23;5781:11;5770:23;;;;;;;;;;;:37;;;:49;;;;;;;:::i;:::-;;;;;;;;5859:12;5881:7;5859:30;;5955:8;5903:5;:15;;;5927:4;5942:10;;;;;;;;;;;5903:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;5900:130;;;5978:5;:13;;;6000:10;;;;;;;;;;;6012:17;5978:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5900:130;6066:21;6090:255;;;;;;;;6117:10;6090:255;;;;;;6153:9;6090:255;;;;6189:11;6090:255;;;;6225:8;6090:255;;;;6255:1;6090:255;;;;;;6291:15;6090:255;;;;6332:1;6090:255;;;6066:279;;6358:11;;:13;;;;;;;;;:::i;:::-;;;;;;6404:8;6382:6;:19;6389:11;;6382:19;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6423:12;:24;6436:10;6423:24;;;;;;;;;;;;;;;6453:11;;6423:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6476:14;:26;6491:10;6476:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;6534:10;6522:75;;;6546:7;6555:8;6565:10;6577:9;6588:8;6522:75;;;;;;;;;;:::i;:::-;;;;;;;;4054:2551;;;;;3925:2680;;;;;:::o;15021:193::-;2136:5;;;;;;;;;;;2122:19;;:10;:19;;;2114:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;15158:11:::1;15133:10;;:37;;;;;;;;;;;;;;;;;;15188:10;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15181:4;;:25;;;;;;;;;;;;;;;;;;15021:193:::0;:::o;6649:1017::-;6757:14;:26;6772:10;6757:26;;;;;;;;;;;;;;;;6745:10;:38;;6737:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6819:15;6837:12;:24;6850:10;6837:24;;;;;;;;;;;;;;;6862:10;6837:36;;;;;;;;:::i;:::-;;;;;;;;;;6819:54;;6916:1;6892:6;:15;6899:7;6892:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;6946:1;6921:6;:15;6928:7;6921:15;;;;;;;;;;;:24;;;:26;6892:55;6884:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;7035:1;7012:6;:15;7019:7;7012:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;7073:15;7047:6;:15;7054:7;7047:15;;;;;;;;;;;:25;;:41;;;;7141:19;7163:6;:15;7170:7;7163:15;;;;;;;;;;;:27;;;7141:49;;7237:4;;;;;;;;;;;7204:37;;:10;:23;7215:11;7204:23;;;;;;;;;;;:31;;;;;;;;;;;;:37;;;7201:367;;7273:4;;;;;;;;;;;7267:20;;;7288:6;:15;7295:7;7288:15;;;;;;;;;;;:24;;;7267:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7329:12;7347:10;:15;;7370:6;:15;7377:7;7370:15;;;;;;;;;;;:24;;;7347:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7328:71;;;7422:7;7414:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7252:212;7201:367;;;7489:10;:23;7500:11;7489:23;;;;;;;;;;;:31;;;;;;;;;;;;7482:48;;;7531:10;7543:6;:15;7550:7;7543:15;;;;;;;;;;;:24;;;7482:86;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7201:367;7634:6;:15;7641:7;7634:15;;;;;;;;;;;:24;;;7593:10;:23;7604:11;7593:23;;;;;;;;;;;:37;;;:65;;;;;;;:::i;:::-;;;;;;;;6699:967;;6649:1017;:::o;1428:26::-;;;;:::o;3542:335::-;2136:5;;;;;;;;;;;2122:19;;:10;:19;;;2114:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;3707:6:::1;3680:10;:18;3691:6;3680:18;;;;;;;;;;;;;;;:24;;;:33;;;;;;;;;;;;;;;;;;3759:14;3724:10;:18;3735:6;3724:18;;;;;;;;;;;;;;;:32;;;:49;;;;;;;;;;;;;;;;;;3837:32;3784:10;:18;3795:6;3784:18;;;;;;;;;;;;;;;:50;;;:85;;;;;;;;;;;;;;;;;;3542:335:::0;;;;:::o;13241:1709::-;13339:17;13386:12;:18;13399:4;13386:18;;;;;;;;;;;;;;;:25;;;;13379:4;:32;13375:97;;;13435:12;:18;13448:4;13435:18;;;;;;;;;;;;;;;:25;;;;13428:32;;13375:97;13500:4;13490:6;:14;;13482:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;13546:12;13568:6;13561:4;:13;;;;:::i;:::-;13546:28;;13585:33;13636:4;13621:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13585:56;;13667:9;13679:1;13667:13;;13662:1246;13686:4;13682:1;:8;13662:1246;;;13712:18;13733:12;:18;13746:4;13733:18;;;;;;;;;;;;;;;13761:1;13752:6;:10;;;;:::i;:::-;13733:30;;;;;;;;:::i;:::-;;;;;;;;;;13712:51;;13778:19;13800:6;:18;13807:10;13800:18;;;;;;;;;;;:30;;;13778:52;;13847:25;13875:912;;;;;;;;13928:1;13919:6;:10;;;;:::i;:::-;13875:912;;;;13954:6;:18;13961:10;13954:18;;;;;;;;;;;:23;;;;;;;;;;;;13875:912;;;;;;14007:6;:18;14014:10;14007:18;;;;;;;;;;;:28;;;13875:912;;;;14067:6;:18;14074:10;14067:18;;;;;;;;;;;:30;;;13875:912;;;;14126:6;:18;14133:10;14126:18;;;;;;;;;;;:27;;;13875:912;;;;14197:6;:18;14204:10;14197:18;;;;;;;;;;;:25;;;;;;;;;;;;13875:912;;;;;;14293:6;:18;14300:10;14293:18;;;;;;;;;;;:28;;;13875:912;;;;14351:6;:18;14358:10;14351:18;;;;;;;;;;;:28;;;13875:912;;;;14407:10;:23;14418:11;14407:23;;;;;;;;;;;:31;;;;;;;;;;;;13875:912;;;;;;14467:10;:23;14478:11;14467:23;;;;;;;;;;;:32;;;;;;;;;;;;13875:912;;;;;;14530:10;:23;14541:11;14530:23;;;;;;;;;;;:34;;;13875:912;;;;14598:10;:23;14609:11;14598:23;;;;;;;;;;;:37;;;13875:912;;;;14665:10;:23;14676:11;14665:23;;;;;;;;;;;:33;;;13875:912;;;;14733:10;:23;14744:11;14733:23;;;;;;;;;;;:38;;;13875:912;;;13847:940;;14887:9;14866:15;14882:1;14866:18;;;;;;;;:::i;:::-;;;;;;;:30;;;;13697:1211;;;13692:3;;;;;;;13662:1246;;;;14927:15;14920:22;;;;13241:1709;;;;;:::o;10527:2121::-;2304:6;;;;;;;;;;;2290:20;;:10;:20;;;2282:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;10765:20:::1;10835:4;;;;;;;;;;;10799:40;;:10;:23;10810:11;10799:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;10796:203:::1;;10869:21;10854:36;;10796:203;;;10941:10;:23;10952:11;10941:23;;;;;;;;;;;:32;;;;;;;;;;;;10934:50;;;10993:4;10934:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10919:80;;10796:203;11012:15;11030:10;:23;11041:11;11030:23;;;;;;;;;;;:31;;;;;;;;;;;;11012:49;;11072:16;11091:10;:23;11102:11;11091:23;;;;;;;;;;;:32;;;;;;;;;;;;11072:51;;11134:13;11150:10;:23;11161:11;11150:23;;;;;;;;;;;:37;;;11134:53;;11198:21;11222:8;11198:32;;11328:16;11272:7;11265:25;;;11299:4;11313:10;;;;;;;;;;;11265:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:79;11262:149;;;11366:7;11359:23;;;11391:10;;;;;;;;;;;11404:6;11359:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11262:149;11424:48;11475:348;;;;;;;;11534:7;11475:348;;;;;;11566:8;11475:348;;;;;;11594:4;11475:348;;;;;;11632:4;11475:348;;;;;;11680:10;11662:15;:28;;;;:::i;:::-;11475:348;;;;11715:16;11475:348;;;;11764:1;11475:348;;;;11799:1;11475:348;;;;::::0;11424:399:::1;;11836:14;11853:10;;;;;;;;;;;:27;;;11881:6;11853:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11836:52;;11996:4;;;;;;;;;;;11986:14;;:8;:14;;::::0;11982:78:::1;;12023:4;;;;;;;;;;;12017:20;;;12038:9;12017:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11982:78;12072:18;12140:4;;;;;;;;;;;12104:40;;:10;:23;12115:11;12104:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;12101:199:::1;;12172:21;12159:34;;12101:199;;;12242:10;:23;12253:11;12242:23;;;;;;;;;;;:32;;;;;;;;;;;;12235:50;;;12294:4;12235:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12222:78;;12101:199;12311:14;12341:12;12328:10;:25;;;;:::i;:::-;12311:42;;12379:1;12372:6;:8;12364:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;12506:6;12470:10;:23;12481:11;12470:23;;;;;;;;;;;:33;;:42;;;;12639:1;12523:12;:45;12536:10;:23;12547:11;12536:23;;;;;;;;;;;:31;;;;;;;;;;;;12523:45;;;;;;;;;;;;;;;:79;12569:10;:23;12580:11;12569:23;;;;;;;;;;;:32;;;;;;;;;;;;12523:79;;;;;;;;;;;;;;;:115;12603:10;:23;12614:11;12603:23;;;;;;;;;;;:34;;;12523:115;;;;;;;;;;;:117;;;;10594:2054;;;;;;;;;10527:2121:::0;:::o;15265:90::-;2136:5;;;;;;;;;;;2122:19;;:10;:19;;;2114:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;15340:7:::1;15331:6;;:16;;;;;;;;;;;;;;;;;;15265:90:::0;:::o;202:21::-;;;;;;;;;;;;;:::o;1882:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;121:20::-;;;;;;;;;;;;;:::o;1850:25::-;;;;:::o;1461:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;261:19::-;;;;;;;;;;;;;:::o;15406:99::-;2136:5;;;;;;;;;;;2122:19;;:10;:19;;;2114:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;15487:10:::1;15475:9;:22;;;;15406:99:::0;:::o;517:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1554:46::-;;;;;;;;;;;;;;;;;:::o;571:34::-;;;;:::o;7674:2782::-;7791:14;:26;7806:10;7791:26;;;;;;;;;;;;;;;;7779:10;:38;;7771:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7853:15;7871:12;:24;7884:10;7871:24;;;;;;;;;;;;;;;7896:10;7871:36;;;;;;;;:::i;:::-;;;;;;;;;;7853:54;;7950:1;7926:6;:15;7933:7;7926:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;7980:1;7955:6;:15;7962:7;7955:15;;;;;;;;;;;:24;;;:26;7926:55;7918:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;8069:1;8046:6;:15;8053:7;8046:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;8119:15;8093:6;:15;8100:7;8093:15;;;;;;;;;;;:25;;:41;;;;8191:19;8213:6;:15;8220:7;8213:15;;;;;;;;;;;:27;;;8191:49;;8293:1;8259:10;:23;8270:11;8259:23;;;;;;;;;;;:33;;;:35;8251:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8333:21;8357:10;:23;8368:11;8357:23;;;;;;;;;;;:37;;;8333:61;;8405:22;8430:10;:23;8441:11;8430:23;;;;;;;;;;;:33;;;8405:58;;8474:18;8495:6;:15;8502:7;8495:15;;;;;;;;;;;:24;;;8474:45;;8530:13;8568;8559:6;8546:10;:19;;;;:::i;:::-;:35;;;;:::i;:::-;8530:51;;8592:19;8639:6;8631:5;8614:14;:22;;;;:::i;:::-;:31;;;;:::i;:::-;8592:53;;8660:15;8678:10;;;;;;;;;;;:27;;;8706:10;8678:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8660:57;;8728:17;8748:10;:21;8759:9;8748:21;;;;;;;;;;;;;;;:35;;;;;;;;;;;;8728:55;;8794:14;8840:5;8826:10;8812:24;;:11;:24;;;;:::i;:::-;8811:34;;;;:::i;:::-;8794:51;;8858:22;8897:9;8883:11;:23;;;;:::i;:::-;8858:48;;8927:21;8972:1;8962:9;:11;:53;;;;;9013:1;8977:38;;:14;:26;8992:10;8977:26;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;8962:53;8959:349;;;9031:19;9053:10;;;;;;;;;;;:27;;;9081:14;:26;9096:10;9081:26;;;;;;;;;;;;;;;;;;;;;;;;;9053:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9031:77;;9123:32;9158:10;:25;9169:13;9158:25;;;;;;;;;;;;;;;:57;;;;;;;;;;;;9123:92;;9291:5;9262:25;9250:37;;:9;:37;;;;:::i;:::-;9249:47;;;;:::i;:::-;9230:66;;9016:292;;8959:349;9357:4;;;;;;;;;;;9323:38;;:10;:23;9334:11;9323:23;;;;;;;;;;;:32;;;;;;;;;;;;:38;;;9320:1059;;9387:12;9471:10;:15;;9494:17;9471:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9458:58;;;;;9551:1;9534:16;:18;:60;;;;;9592:1;9556:38;;:14;:26;9571:10;9556:26;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;9534:60;9531:200;;;9671:14;:26;9686:10;9671:26;;;;;;;;;;;;;;;;;;;;;;;;;:31;;9710:16;9671:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9658:73;;;;;9531:200;9794:5;;;;;;;;;;;:10;;9822:16;9812:9;:26;;;;:::i;:::-;9794:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9781:62;;;;;9372:483;9320:1059;;;9925:10;:23;9936:11;9925:23;;;;;;;;;;;:32;;;;;;;;;;;;9918:49;;;9968:10;9980:17;9918:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10033:1;10016:16;:18;:60;;;;;10074:1;10038:38;;:14;:26;10053:10;10038:26;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;10016:60;10013:220;;;10145:10;:23;10156:11;10145:23;;;;;;;;;;;:32;;;;;;;;;;;;10138:49;;;10188:14;:26;10203:10;10188:26;;;;;;;;;;;;;;;;;;;;;;;;;10216:16;10138:95;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10013:220;10290:10;:23;10301:11;10290:23;;;;;;;;;;;:32;;;;;;;;;;;;10283:49;;;10333:5;;;;;;;;;;;10350:16;10340:9;:26;;;;:::i;:::-;10283:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9320:1059;10431:17;10389:10;:23;10400:11;10389:23;;;;;;;;;;;:38;;;:59;;;;;;;:::i;:::-;;;;;;;;7723:2733;;;;;;;;;;;;7674:2782;:::o;16495:802::-;16588:4;16670:27;16686:10;16670:15;:27::i;:::-;16657:40;;16765:1;16721:12;:21;16734:7;16721:21;;;;;;;;;;;;;;;:31;16743:8;16721:31;;;;;;;;;;;;;;;:43;16753:10;16721:43;;;;;;;;;;;;:45;16718:113;;;16788:12;:21;16801:7;16788:21;;;;;;;;;;;;;;;:31;16810:8;16788:31;;;;;;;;;;;;;;;:43;16820:10;16788:43;;;;;;;;;;;;16781:50;;;;16718:113;16852:27;16882:243;;;;;;;;16915:7;16882:243;;;;;;16946:8;16882:243;;;;;;16980:10;16882:243;;;;17019:1;16882:243;;;;17045:1;16882:243;;;;17112:1;16882:243;;;16852:273;;17136:10;;:12;;;;;;;;;:::i;:::-;;;;;;17184:10;17159;:22;17170:10;;17159:22;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17251:10;;17205:12;:21;17218:7;17205:21;;;;;;;;;;;;;;;:31;17227:8;17205:31;;;;;;;;;;;;;;;:43;17237:10;17205:43;;;;;;;;;;;:56;;;;17279:10;;17272:17;;;16495:802;;;;;;:::o;15592:284::-;15659:7;15679:17;15724:1;15705:16;15710:10;15705:4;:16::i;:::-;:20;;;;:::i;:::-;15699:1;:27;;15679:47;;15779:20;15829:9;15816;15803:10;:22;;;;:::i;:::-;15802:36;;;;:::i;:::-;15779:59;;15856:12;15849:19;;;;15592:284;;;:::o;15946:537::-;15993:7;16013:14;16030:1;16013:18;;16051:6;16046:1;:11;16042:46;;16067:3;16061:9;;;;;16082:3;16072:13;;;;;:::i;:::-;;;16042:46;16107:5;16102:1;:10;16098:44;;16123:2;16117:8;;;;;16137:2;16127:12;;;;;:::i;:::-;;;16098:44;16161:5;16156:1;:10;16152:44;;16177:2;16171:8;;;;;16191:2;16181:12;;;;;:::i;:::-;;;16152:44;16215:5;16210:1;:10;16206:44;;16231:2;16225:8;;;;;16245:2;16235:12;;;;;:::i;:::-;;;16206:44;16269:4;16264:1;:9;16260:43;;16285:1;16279:7;;;;;16299:1;16289:11;;;;;:::i;:::-;;;16260:43;16322:4;16317:1;:9;16313:43;;16338:1;16332:7;;;;;16352:1;16342:11;;;;;:::i;:::-;;;16313:43;16375:4;16370:1;:9;16366:43;;16391:1;16385:7;;;;;16405:1;16395:11;;;;;:::i;:::-;;;16366:43;16428:4;16423:1;:9;16419:33;;16448:1;16438:11;;;;;:::i;:::-;;;16419:33;16469:6;16462:13;;;15946:537;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:118::-;1263:24;1281:5;1263:24;:::i;:::-;1258:3;1251:37;1176:118;;:::o;1300:222::-;1393:4;1431:2;1420:9;1416:18;1408:26;;1444:71;1512:1;1501:9;1497:17;1488:6;1444:71;:::i;:::-;1300:222;;;;:::o;1528:99::-;1580:6;1614:5;1608:12;1598:22;;1528:99;;;:::o;1633:169::-;1717:11;1751:6;1746:3;1739:19;1791:4;1786:3;1782:14;1767:29;;1633:169;;;;:::o;1808:139::-;1897:6;1892:3;1887;1881:23;1938:1;1929:6;1924:3;1920:16;1913:27;1808:139;;;:::o;1953:102::-;1994:6;2045:2;2041:7;2036:2;2029:5;2025:14;2021:28;2011:38;;1953:102;;;:::o;2061:377::-;2149:3;2177:39;2210:5;2177:39;:::i;:::-;2232:71;2296:6;2291:3;2232:71;:::i;:::-;2225:78;;2312:65;2370:6;2365:3;2358:4;2351:5;2347:16;2312:65;:::i;:::-;2402:29;2424:6;2402:29;:::i;:::-;2397:3;2393:39;2386:46;;2153:285;2061:377;;;;:::o;2444:86::-;2479:7;2519:4;2512:5;2508:16;2497:27;;2444:86;;;:::o;2536:112::-;2619:22;2635:5;2619:22;:::i;:::-;2614:3;2607:35;2536:112;;:::o;2654:616::-;2839:4;2877:2;2866:9;2862:18;2854:26;;2926:9;2920:4;2916:20;2912:1;2901:9;2897:17;2890:47;2954:78;3027:4;3018:6;2954:78;:::i;:::-;2946:86;;3079:9;3073:4;3069:20;3064:2;3053:9;3049:18;3042:48;3107:78;3180:4;3171:6;3107:78;:::i;:::-;3099:86;;3195:68;3259:2;3248:9;3244:18;3235:6;3195:68;:::i;:::-;2654:616;;;;;;:::o;3276:104::-;3321:7;3350:24;3368:5;3350:24;:::i;:::-;3339:35;;3276:104;;;:::o;3386:138::-;3467:32;3493:5;3467:32;:::i;:::-;3460:5;3457:43;3447:71;;3514:1;3511;3504:12;3447:71;3386:138;:::o;3530:155::-;3584:5;3622:6;3609:20;3600:29;;3638:41;3673:5;3638:41;:::i;:::-;3530:155;;;;:::o;3691:345::-;3758:6;3807:2;3795:9;3786:7;3782:23;3778:32;3775:119;;;3813:79;;:::i;:::-;3775:119;3933:1;3958:61;4011:7;4002:6;3991:9;3987:22;3958:61;:::i;:::-;3948:71;;3904:125;3691:345;;;;:::o;4042:60::-;4070:3;4091:5;4084:12;;4042:60;;;:::o;4108:142::-;4158:9;4191:53;4209:34;4218:24;4236:5;4218:24;:::i;:::-;4209:34;:::i;:::-;4191:53;:::i;:::-;4178:66;;4108:142;;;:::o;4256:126::-;4306:9;4339:37;4370:5;4339:37;:::i;:::-;4326:50;;4256:126;;;:::o;4388:146::-;4458:9;4491:37;4522:5;4491:37;:::i;:::-;4478:50;;4388:146;;;:::o;4540:171::-;4647:57;4698:5;4647:57;:::i;:::-;4642:3;4635:70;4540:171;;:::o;4717:262::-;4830:4;4868:2;4857:9;4853:18;4845:26;;4881:91;4969:1;4958:9;4954:17;4945:6;4881:91;:::i;:::-;4717:262;;;;:::o;4985:77::-;5022:7;5051:5;5040:16;;4985:77;;;:::o;5068:122::-;5141:24;5159:5;5141:24;:::i;:::-;5134:5;5131:35;5121:63;;5180:1;5177;5170:12;5121:63;5068:122;:::o;5196:139::-;5242:5;5280:6;5267:20;5258:29;;5296:33;5323:5;5296:33;:::i;:::-;5196:139;;;;:::o;5341:911::-;5436:6;5444;5452;5460;5468;5517:3;5505:9;5496:7;5492:23;5488:33;5485:120;;;5524:79;;:::i;:::-;5485:120;5644:1;5669:53;5714:7;5705:6;5694:9;5690:22;5669:53;:::i;:::-;5659:63;;5615:117;5771:2;5797:53;5842:7;5833:6;5822:9;5818:22;5797:53;:::i;:::-;5787:63;;5742:118;5899:2;5925:53;5970:7;5961:6;5950:9;5946:22;5925:53;:::i;:::-;5915:63;;5870:118;6027:2;6053:53;6098:7;6089:6;6078:9;6074:22;6053:53;:::i;:::-;6043:63;;5998:118;6155:3;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6126:119;5341:911;;;;;;;;:::o;6258:329::-;6317:6;6366:2;6354:9;6345:7;6341:23;6337:32;6334:119;;;6372:79;;:::i;:::-;6334:119;6492:1;6517:53;6562:7;6553:6;6542:9;6538:22;6517:53;:::i;:::-;6507:63;;6463:117;6258:329;;;;:::o;6593:118::-;6680:24;6698:5;6680:24;:::i;:::-;6675:3;6668:37;6593:118;;:::o;6717:222::-;6810:4;6848:2;6837:9;6833:18;6825:26;;6861:71;6929:1;6918:9;6914:17;6905:6;6861:71;:::i;:::-;6717:222;;;;:::o;6945:118::-;7016:22;7032:5;7016:22;:::i;:::-;7009:5;7006:33;6996:61;;7053:1;7050;7043:12;6996:61;6945:118;:::o;7069:135::-;7113:5;7151:6;7138:20;7129:29;;7167:31;7192:5;7167:31;:::i;:::-;7069:135;;;;:::o;7210:89::-;7246:7;7286:6;7279:5;7275:18;7264:29;;7210:89;;;:::o;7305:120::-;7377:23;7394:5;7377:23;:::i;:::-;7370:5;7367:34;7357:62;;7415:1;7412;7405:12;7357:62;7305:120;:::o;7431:137::-;7476:5;7514:6;7501:20;7492:29;;7530:32;7556:5;7530:32;:::i;:::-;7431:137;;;;:::o;7574:90::-;7608:7;7651:5;7644:13;7637:21;7626:32;;7574:90;;;:::o;7670:116::-;7740:21;7755:5;7740:21;:::i;:::-;7733:5;7730:32;7720:60;;7776:1;7773;7766:12;7720:60;7670:116;:::o;7792:133::-;7835:5;7873:6;7860:20;7851:29;;7889:30;7913:5;7889:30;:::i;:::-;7792:133;;;;:::o;7931:751::-;8010:6;8018;8026;8034;8083:3;8071:9;8062:7;8058:23;8054:33;8051:120;;;8090:79;;:::i;:::-;8051:120;8210:1;8235:51;8278:7;8269:6;8258:9;8254:22;8235:51;:::i;:::-;8225:61;;8181:115;8335:2;8361:52;8405:7;8396:6;8385:9;8381:22;8361:52;:::i;:::-;8351:62;;8306:117;8462:2;8488:52;8532:7;8523:6;8512:9;8508:22;8488:52;:::i;:::-;8478:62;;8433:117;8589:2;8615:50;8657:7;8648:6;8637:9;8633:22;8615:50;:::i;:::-;8605:60;;8560:115;7931:751;;;;;;;:::o;8688:619::-;8765:6;8773;8781;8830:2;8818:9;8809:7;8805:23;8801:32;8798:119;;;8836:79;;:::i;:::-;8798:119;8956:1;8981:53;9026:7;9017:6;9006:9;9002:22;8981:53;:::i;:::-;8971:63;;8927:117;9083:2;9109:53;9154:7;9145:6;9134:9;9130:22;9109:53;:::i;:::-;9099:63;;9054:118;9211:2;9237:53;9282:7;9273:6;9262:9;9258:22;9237:53;:::i;:::-;9227:63;;9182:118;8688:619;;;;;:::o;9313:140::-;9406:6;9440:5;9434:12;9424:22;;9313:140;;;:::o;9459:210::-;9584:11;9618:6;9613:3;9606:19;9658:4;9653:3;9649:14;9634:29;;9459:210;;;;:::o;9675:158::-;9768:4;9791:3;9783:11;;9821:4;9816:3;9812:14;9804:22;;9675:158;;;:::o;9839:108::-;9916:24;9934:5;9916:24;:::i;:::-;9911:3;9904:37;9839:108;;:::o;9953:::-;10030:24;10048:5;10030:24;:::i;:::-;10025:3;10018:37;9953:108;;:::o;10067:102::-;10140:22;10156:5;10140:22;:::i;:::-;10135:3;10128:35;10067:102;;:::o;10245:2684::-;10384:6;10379:3;10375:16;10483:4;10476:5;10472:16;10466:23;10502:63;10559:4;10554:3;10550:14;10536:12;10502:63;:::i;:::-;10401:174;10657:4;10650:5;10646:16;10640:23;10676:63;10733:4;10728:3;10724:14;10710:12;10676:63;:::i;:::-;10585:164;10836:4;10829:5;10825:16;10819:23;10855:63;10912:4;10907:3;10903:14;10889:12;10855:63;:::i;:::-;10759:169;11017:4;11010:5;11006:16;11000:23;11036:63;11093:4;11088:3;11084:14;11070:12;11036:63;:::i;:::-;10938:171;11195:4;11188:5;11184:16;11178:23;11214:63;11271:4;11266:3;11262:14;11248:12;11214:63;:::i;:::-;11119:168;11371:4;11364:5;11360:16;11354:23;11390:59;11443:4;11438:3;11434:14;11420:12;11390:59;:::i;:::-;11297:162;11546:4;11539:5;11535:16;11529:23;11565:63;11622:4;11617:3;11613:14;11599:12;11565:63;:::i;:::-;11469:169;11725:4;11718:5;11714:16;11708:23;11744:63;11801:4;11796:3;11792:14;11778:12;11744:63;:::i;:::-;11648:169;11902:6;11895:5;11891:18;11885:25;11923:65;11980:6;11975:3;11971:16;11957:12;11923:65;:::i;:::-;11827:171;12084:6;12077:5;12073:18;12067:25;12105:65;12162:6;12157:3;12153:16;12139:12;12105:65;:::i;:::-;12008:172;12268:6;12261:5;12257:18;12251:25;12289:65;12346:6;12341:3;12337:16;12323:12;12289:65;:::i;:::-;12190:174;12455:6;12448:5;12444:18;12438:25;12476:65;12533:6;12528:3;12524:16;12510:12;12476:65;:::i;:::-;12374:177;12638:6;12631:5;12627:18;12621:25;12659:65;12716:6;12711:3;12707:16;12693:12;12659:65;:::i;:::-;12561:173;12826:6;12819:5;12815:18;12809:25;12847:65;12904:6;12899:3;12895:16;12881:12;12847:65;:::i;:::-;12744:178;10353:2576;10245:2684;;:::o;12935:285::-;13056:10;13077:98;13171:3;13163:6;13077:98;:::i;:::-;13207:6;13202:3;13198:16;13184:30;;12935:285;;;;:::o;13226:139::-;13322:4;13354;13349:3;13345:14;13337:22;;13226:139;;;:::o;13445:940::-;13616:3;13645:80;13719:5;13645:80;:::i;:::-;13741:112;13846:6;13841:3;13741:112;:::i;:::-;13734:119;;13877:82;13953:5;13877:82;:::i;:::-;13982:7;14013:1;13998:362;14023:6;14020:1;14017:13;13998:362;;;14099:6;14093:13;14126:115;14237:3;14222:13;14126:115;:::i;:::-;14119:122;;14264:86;14343:6;14264:86;:::i;:::-;14254:96;;14058:302;14045:1;14042;14038:9;14033:14;;13998:362;;;14002:14;14376:3;14369:10;;13621:764;;;13445:940;;;;:::o;14391:477::-;14586:4;14624:2;14613:9;14609:18;14601:26;;14673:9;14667:4;14663:20;14659:1;14648:9;14644:17;14637:47;14701:160;14856:4;14847:6;14701:160;:::i;:::-;14693:168;;14391:477;;;;:::o;14874:775::-;15107:4;15145:3;15134:9;15130:19;15122:27;;15159:71;15227:1;15216:9;15212:17;15203:6;15159:71;:::i;:::-;15240:72;15308:2;15297:9;15293:18;15284:6;15240:72;:::i;:::-;15322;15390:2;15379:9;15375:18;15366:6;15322:72;:::i;:::-;15404;15472:2;15461:9;15457:18;15448:6;15404:72;:::i;:::-;15486:73;15554:3;15543:9;15539:19;15530:6;15486:73;:::i;:::-;15569;15637:3;15626:9;15622:19;15613:6;15569:73;:::i;:::-;14874:775;;;;;;;;;:::o;15655:878::-;15912:4;15950:3;15939:9;15935:19;15927:27;;15964:71;16032:1;16021:9;16017:17;16008:6;15964:71;:::i;:::-;16045:72;16113:2;16102:9;16098:18;16089:6;16045:72;:::i;:::-;16127;16195:2;16184:9;16180:18;16171:6;16127:72;:::i;:::-;16209;16277:2;16266:9;16262:18;16253:6;16209:72;:::i;:::-;16291:69;16355:3;16344:9;16340:19;16331:6;16291:69;:::i;:::-;16370:73;16438:3;16427:9;16423:19;16414:6;16370:73;:::i;:::-;16453;16521:3;16510:9;16506:19;16497:6;16453:73;:::i;:::-;15655:878;;;;;;;;;;:::o;16539:325::-;16596:6;16645:2;16633:9;16624:7;16620:23;16616:32;16613:119;;;16651:79;;:::i;:::-;16613:119;16771:1;16796:51;16839:7;16830:6;16819:9;16815:22;16796:51;:::i;:::-;16786:61;;16742:115;16539:325;;;;:::o;16870:109::-;16951:21;16966:5;16951:21;:::i;:::-;16946:3;16939:34;16870:109;;:::o;16985:115::-;17070:23;17087:5;17070:23;:::i;:::-;17065:3;17058:36;16985:115;;:::o;17106:422::-;17245:4;17283:2;17272:9;17268:18;17260:26;;17296:65;17358:1;17347:9;17343:17;17334:6;17296:65;:::i;:::-;17371:70;17437:2;17426:9;17422:18;17413:6;17371:70;:::i;:::-;17451;17517:2;17506:9;17502:18;17493:6;17451:70;:::i;:::-;17106:422;;;;;;:::o;17534:172::-;17674:24;17670:1;17662:6;17658:14;17651:48;17534:172;:::o;17712:366::-;17854:3;17875:67;17939:2;17934:3;17875:67;:::i;:::-;17868:74;;17951:93;18040:3;17951:93;:::i;:::-;18069:2;18064:3;18060:12;18053:19;;17712:366;;;:::o;18084:419::-;18250:4;18288:2;18277:9;18273:18;18265:26;;18337:9;18331:4;18327:20;18323:1;18312:9;18308:17;18301:47;18365:131;18491:4;18365:131;:::i;:::-;18357:139;;18084:419;;;:::o;18509:143::-;18566:5;18597:6;18591:13;18582:22;;18613:33;18640:5;18613:33;:::i;:::-;18509:143;;;;:::o;18658:351::-;18728:6;18777:2;18765:9;18756:7;18752:23;18748:32;18745:119;;;18783:79;;:::i;:::-;18745:119;18903:1;18928:64;18984:7;18975:6;18964:9;18960:22;18928:64;:::i;:::-;18918:74;;18874:128;18658:351;;;;:::o;19015:178::-;19155:30;19151:1;19143:6;19139:14;19132:54;19015:178;:::o;19199:366::-;19341:3;19362:67;19426:2;19421:3;19362:67;:::i;:::-;19355:74;;19438:93;19527:3;19438:93;:::i;:::-;19556:2;19551:3;19547:12;19540:19;;19199:366;;;:::o;19571:419::-;19737:4;19775:2;19764:9;19760:18;19752:26;;19824:9;19818:4;19814:20;19810:1;19799:9;19795:17;19788:47;19852:131;19978:4;19852:131;:::i;:::-;19844:139;;19571:419;;;:::o;19996:332::-;20117:4;20155:2;20144:9;20140:18;20132:26;;20168:71;20236:1;20225:9;20221:17;20212:6;20168:71;:::i;:::-;20249:72;20317:2;20306:9;20302:18;20293:6;20249:72;:::i;:::-;19996:332;;;;;:::o;20334:137::-;20388:5;20419:6;20413:13;20404:22;;20435:30;20459:5;20435:30;:::i;:::-;20334:137;;;;:::o;20477:345::-;20544:6;20593:2;20581:9;20572:7;20568:23;20564:32;20561:119;;;20599:79;;:::i;:::-;20561:119;20719:1;20744:61;20797:7;20788:6;20777:9;20773:22;20744:61;:::i;:::-;20734:71;;20690:125;20477:345;;;;:::o;20828:117::-;20937:1;20934;20927:12;20951:117;21060:1;21057;21050:12;21074:180;21122:77;21119:1;21112:88;21219:4;21216:1;21209:15;21243:4;21240:1;21233:15;21260:281;21343:27;21365:4;21343:27;:::i;:::-;21335:6;21331:40;21473:6;21461:10;21458:22;21437:18;21425:10;21422:34;21419:62;21416:88;;;21484:18;;:::i;:::-;21416:88;21524:10;21520:2;21513:22;21303:238;21260:281;;:::o;21547:129::-;21581:6;21608:20;;:::i;:::-;21598:30;;21637:33;21665:4;21657:6;21637:33;:::i;:::-;21547:129;;;:::o;21682:308::-;21744:4;21834:18;21826:6;21823:30;21820:56;;;21856:18;;:::i;:::-;21820:56;21894:29;21916:6;21894:29;:::i;:::-;21886:37;;21978:4;21972;21968:15;21960:23;;21682:308;;;:::o;21996:434::-;22085:5;22110:66;22126:49;22168:6;22126:49;:::i;:::-;22110:66;:::i;:::-;22101:75;;22199:6;22192:5;22185:21;22237:4;22230:5;22226:16;22275:3;22266:6;22261:3;22257:16;22254:25;22251:112;;;22282:79;;:::i;:::-;22251:112;22372:52;22417:6;22412:3;22407;22372:52;:::i;:::-;22091:339;21996:434;;;;;:::o;22450:355::-;22517:5;22566:3;22559:4;22551:6;22547:17;22543:27;22533:122;;22574:79;;:::i;:::-;22533:122;22684:6;22678:13;22709:90;22795:3;22787:6;22780:4;22772:6;22768:17;22709:90;:::i;:::-;22700:99;;22523:282;22450:355;;;;:::o;22811:524::-;22891:6;22940:2;22928:9;22919:7;22915:23;22911:32;22908:119;;;22946:79;;:::i;:::-;22908:119;23087:1;23076:9;23072:17;23066:24;23117:18;23109:6;23106:30;23103:117;;;23139:79;;:::i;:::-;23103:117;23244:74;23310:7;23301:6;23290:9;23286:22;23244:74;:::i;:::-;23234:84;;23037:291;22811:524;;;;:::o;23341:139::-;23396:5;23427:6;23421:13;23412:22;;23443:31;23468:5;23443:31;:::i;:::-;23341:139;;;;:::o;23486:347::-;23554:6;23603:2;23591:9;23582:7;23578:23;23574:32;23571:119;;;23609:79;;:::i;:::-;23571:119;23729:1;23754:62;23808:7;23799:6;23788:9;23784:22;23754:62;:::i;:::-;23744:72;;23700:126;23486:347;;;;:::o;23839:168::-;23979:20;23975:1;23967:6;23963:14;23956:44;23839:168;:::o;24013:366::-;24155:3;24176:67;24240:2;24235:3;24176:67;:::i;:::-;24169:74;;24252:93;24341:3;24252:93;:::i;:::-;24370:2;24365:3;24361:12;24354:19;;24013:366;;;:::o;24385:419::-;24551:4;24589:2;24578:9;24574:18;24566:26;;24638:9;24632:4;24628:20;24624:1;24613:9;24609:17;24602:47;24666:131;24792:4;24666:131;:::i;:::-;24658:139;;24385:419;;;:::o;24810:171::-;24950:23;24946:1;24938:6;24934:14;24927:47;24810:171;:::o;24987:366::-;25129:3;25150:67;25214:2;25209:3;25150:67;:::i;:::-;25143:74;;25226:93;25315:3;25226:93;:::i;:::-;25344:2;25339:3;25335:12;25328:19;;24987:366;;;:::o;25359:419::-;25525:4;25563:2;25552:9;25548:18;25540:26;;25612:9;25606:4;25602:20;25598:1;25587:9;25583:17;25576:47;25640:131;25766:4;25640:131;:::i;:::-;25632:139;;25359:419;;;:::o;25784:221::-;25924:34;25920:1;25912:6;25908:14;25901:58;25993:4;25988:2;25980:6;25976:15;25969:29;25784:221;:::o;26011:366::-;26153:3;26174:67;26238:2;26233:3;26174:67;:::i;:::-;26167:74;;26250:93;26339:3;26250:93;:::i;:::-;26368:2;26363:3;26359:12;26352:19;;26011:366;;;:::o;26383:419::-;26549:4;26587:2;26576:9;26572:18;26564:26;;26636:9;26630:4;26626:20;26622:1;26611:9;26607:17;26600:47;26664:131;26790:4;26664:131;:::i;:::-;26656:139;;26383:419;;;:::o;26808:220::-;26948:34;26944:1;26936:6;26932:14;26925:58;27017:3;27012:2;27004:6;27000:15;26993:28;26808:220;:::o;27034:366::-;27176:3;27197:67;27261:2;27256:3;27197:67;:::i;:::-;27190:74;;27273:93;27362:3;27273:93;:::i;:::-;27391:2;27386:3;27382:12;27375:19;;27034:366;;;:::o;27406:419::-;27572:4;27610:2;27599:9;27595:18;27587:26;;27659:9;27653:4;27649:20;27645:1;27634:9;27630:17;27623:47;27687:131;27813:4;27687:131;:::i;:::-;27679:139;;27406:419;;;:::o;27831:181::-;27971:33;27967:1;27959:6;27955:14;27948:57;27831:181;:::o;28018:366::-;28160:3;28181:67;28245:2;28240:3;28181:67;:::i;:::-;28174:74;;28257:93;28346:3;28257:93;:::i;:::-;28375:2;28370:3;28366:12;28359:19;;28018:366;;;:::o;28390:419::-;28556:4;28594:2;28583:9;28579:18;28571:26;;28643:9;28637:4;28633:20;28629:1;28618:9;28614:17;28607:47;28671:131;28797:4;28671:131;:::i;:::-;28663:139;;28390:419;;;:::o;28815:161::-;28955:13;28951:1;28943:6;28939:14;28932:37;28815:161;:::o;28982:366::-;29124:3;29145:67;29209:2;29204:3;29145:67;:::i;:::-;29138:74;;29221:93;29310:3;29221:93;:::i;:::-;29339:2;29334:3;29330:12;29323:19;;28982:366;;;:::o;29354:419::-;29520:4;29558:2;29547:9;29543:18;29535:26;;29607:9;29601:4;29597:20;29593:1;29582:9;29578:17;29571:47;29635:131;29761:4;29635:131;:::i;:::-;29627:139;;29354:419;;;:::o;29779:143::-;29836:5;29867:6;29861:13;29852:22;;29883:33;29910:5;29883:33;:::i;:::-;29779:143;;;;:::o;29928:351::-;29998:6;30047:2;30035:9;30026:7;30022:23;30018:32;30015:119;;;30053:79;;:::i;:::-;30015:119;30173:1;30198:64;30254:7;30245:6;30234:9;30230:22;30198:64;:::i;:::-;30188:74;;30144:128;29928:351;;;;:::o;30285:180::-;30333:77;30330:1;30323:88;30430:4;30427:1;30420:15;30454:4;30451:1;30444:15;30471:194;30511:4;30531:20;30549:1;30531:20;:::i;:::-;30526:25;;30565:20;30583:1;30565:20;:::i;:::-;30560:25;;30609:1;30606;30602:9;30594:17;;30633:1;30627:4;30624:11;30621:37;;;30638:18;;:::i;:::-;30621:37;30471:194;;;;:::o;30671:147::-;30772:11;30809:3;30794:18;;30671:147;;;;:::o;30824:114::-;;:::o;30944:398::-;31103:3;31124:83;31205:1;31200:3;31124:83;:::i;:::-;31117:90;;31216:93;31305:3;31216:93;:::i;:::-;31334:1;31329:3;31325:11;31318:18;;30944:398;;;:::o;31348:379::-;31532:3;31554:147;31697:3;31554:147;:::i;:::-;31547:154;;31718:3;31711:10;;31348:379;;;:::o;31733:175::-;31873:27;31869:1;31861:6;31857:14;31850:51;31733:175;:::o;31914:366::-;32056:3;32077:67;32141:2;32136:3;32077:67;:::i;:::-;32070:74;;32153:93;32242:3;32153:93;:::i;:::-;32271:2;32266:3;32262:12;32255:19;;31914:366;;;:::o;32286:419::-;32452:4;32490:2;32479:9;32475:18;32467:26;;32539:9;32533:4;32529:20;32525:1;32514:9;32510:17;32503:47;32567:131;32693:4;32567:131;:::i;:::-;32559:139;;32286:419;;;:::o;32711:180::-;32851:32;32847:1;32839:6;32835:14;32828:56;32711:180;:::o;32897:366::-;33039:3;33060:67;33124:2;33119:3;33060:67;:::i;:::-;33053:74;;33136:93;33225:3;33136:93;:::i;:::-;33254:2;33249:3;33245:12;33238:19;;32897:366;;;:::o;33269:419::-;33435:4;33473:2;33462:9;33458:18;33450:26;;33522:9;33516:4;33512:20;33508:1;33497:9;33493:17;33486:47;33550:131;33676:4;33550:131;:::i;:::-;33542:139;;33269:419;;;:::o;33694:442::-;33843:4;33881:2;33870:9;33866:18;33858:26;;33894:71;33962:1;33951:9;33947:17;33938:6;33894:71;:::i;:::-;33975:72;34043:2;34032:9;34028:18;34019:6;33975:72;:::i;:::-;34057;34125:2;34114:9;34110:18;34101:6;34057:72;:::i;:::-;33694:442;;;;;;:::o;34142:191::-;34182:3;34201:20;34219:1;34201:20;:::i;:::-;34196:25;;34235:20;34253:1;34235:20;:::i;:::-;34230:25;;34278:1;34275;34271:9;34264:16;;34299:3;34296:1;34293:10;34290:36;;;34306:18;;:::i;:::-;34290:36;34142:191;;;;:::o;34339:332::-;34460:4;34498:2;34487:9;34483:18;34475:26;;34511:71;34579:1;34568:9;34564:17;34555:6;34511:71;:::i;:::-;34592:72;34660:2;34649:9;34645:18;34636:6;34592:72;:::i;:::-;34339:332;;;;;:::o;34677:233::-;34716:3;34739:24;34757:5;34739:24;:::i;:::-;34730:33;;34785:66;34778:5;34775:77;34772:103;;34855:18;;:::i;:::-;34772:103;34902:1;34895:5;34891:13;34884:20;;34677:233;;;:::o;34916:664::-;35121:4;35159:3;35148:9;35144:19;35136:27;;35173:71;35241:1;35230:9;35226:17;35217:6;35173:71;:::i;:::-;35254:72;35322:2;35311:9;35307:18;35298:6;35254:72;:::i;:::-;35336;35404:2;35393:9;35389:18;35380:6;35336:72;:::i;:::-;35418;35486:2;35475:9;35471:18;35462:6;35418:72;:::i;:::-;35500:73;35568:3;35557:9;35553:19;35544:6;35500:73;:::i;:::-;34916:664;;;;;;;;:::o;35586:171::-;35726:23;35722:1;35714:6;35710:14;35703:47;35586:171;:::o;35763:366::-;35905:3;35926:67;35990:2;35985:3;35926:67;:::i;:::-;35919:74;;36002:93;36091:3;36002:93;:::i;:::-;36120:2;36115:3;36111:12;36104:19;;35763:366;;;:::o;36135:419::-;36301:4;36339:2;36328:9;36324:18;36316:26;;36388:9;36382:4;36378:20;36374:1;36363:9;36359:17;36352:47;36416:131;36542:4;36416:131;:::i;:::-;36408:139;;36135:419;;;:::o;36560:180::-;36608:77;36605:1;36598:88;36705:4;36702:1;36695:15;36729:4;36726:1;36719:15;36746:167;36886:19;36882:1;36874:6;36870:14;36863:43;36746:167;:::o;36919:366::-;37061:3;37082:67;37146:2;37141:3;37082:67;:::i;:::-;37075:74;;37158:93;37247:3;37158:93;:::i;:::-;37276:2;37271:3;37267:12;37260:19;;36919:366;;;:::o;37291:419::-;37457:4;37495:2;37484:9;37480:18;37472:26;;37544:9;37538:4;37534:20;37530:1;37519:9;37515:17;37508:47;37572:131;37698:4;37572:131;:::i;:::-;37564:139;;37291:419;;;:::o;37716:168::-;37856:20;37852:1;37844:6;37840:14;37833:44;37716:168;:::o;37890:366::-;38032:3;38053:67;38117:2;38112:3;38053:67;:::i;:::-;38046:74;;38129:93;38218:3;38129:93;:::i;:::-;38247:2;38242:3;38238:12;38231:19;;37890:366;;;:::o;38262:419::-;38428:4;38466:2;38455:9;38451:18;38443:26;;38515:9;38509:4;38505:20;38501:1;38490:9;38486:17;38479:47;38543:131;38669:4;38543:131;:::i;:::-;38535:139;;38262:419;;;:::o;38687:174::-;38827:26;38823:1;38815:6;38811:14;38804:50;38687:174;:::o;38867:366::-;39009:3;39030:67;39094:2;39089:3;39030:67;:::i;:::-;39023:74;;39106:93;39195:3;39106:93;:::i;:::-;39224:2;39219:3;39215:12;39208:19;;38867:366;;;:::o;39239:419::-;39405:4;39443:2;39432:9;39428:18;39420:26;;39492:9;39486:4;39482:20;39478:1;39467:9;39463:17;39456:47;39520:131;39646:4;39520:131;:::i;:::-;39512:139;;39239:419;;;:::o;39664:164::-;39804:16;39800:1;39792:6;39788:14;39781:40;39664:164;:::o;39834:366::-;39976:3;39997:67;40061:2;40056:3;39997:67;:::i;:::-;39990:74;;40073:93;40162:3;40073:93;:::i;:::-;40191:2;40186:3;40182:12;40175:19;;39834:366;;;:::o;40206:419::-;40372:4;40410:2;40399:9;40395:18;40387:26;;40459:9;40453:4;40449:20;40445:1;40434:9;40430:17;40423:47;40487:131;40613:4;40487:131;:::i;:::-;40479:139;;40206:419;;;:::o;40631:161::-;40752:7;40781:5;40770:16;;40631:161;;;:::o;40798:310::-;40932:9;40965:137;40983:118;40992:108;41094:5;40992:108;:::i;:::-;40983:118;:::i;:::-;40965:137;:::i;:::-;40952:150;;40798:310;;;:::o;41114:299::-;41285:121;41400:5;41285:121;:::i;:::-;41280:3;41273:134;41114:299;;:::o;41419:500::-;41624:4;41662:2;41651:9;41647:18;41639:26;;41675:71;41743:1;41732:9;41728:17;41719:6;41675:71;:::i;:::-;41756:156;41908:2;41897:9;41893:18;41884:6;41756:156;:::i;:::-;41419:500;;;;;:::o;41925:91::-;41961:7;42001:8;41994:5;41990:20;41979:31;;41925:91;;;:::o;42022:105::-;42097:23;42114:5;42097:23;:::i;:::-;42092:3;42085:36;42022:105;;:::o;42133:108::-;42210:24;42228:5;42210:24;:::i;:::-;42205:3;42198:37;42133:108;;:::o;42341:1625::-;42518:6;42513:3;42509:16;42610:4;42603:5;42599:16;42593:23;42629:63;42686:4;42681:3;42677:14;42663:12;42629:63;:::i;:::-;42535:167;42788:4;42781:5;42777:16;42771:23;42807:63;42864:4;42859:3;42855:14;42841:12;42807:63;:::i;:::-;42712:168;42961:4;42954:5;42950:16;42944:23;42980:61;43035:4;43030:3;43026:14;43012:12;42980:61;:::i;:::-;42890:161;43138:4;43131:5;43127:16;43121:23;43157:63;43214:4;43209:3;43205:14;43191:12;43157:63;:::i;:::-;43061:169;43316:4;43309:5;43305:16;43299:23;43335:63;43392:4;43387:3;43383:14;43369:12;43335:63;:::i;:::-;43240:168;43494:4;43487:5;43483:16;43477:23;43513:63;43570:4;43565:3;43561:14;43547:12;43513:63;:::i;:::-;43418:168;43680:4;43673:5;43669:16;43663:23;43699:63;43756:4;43751:3;43747:14;43733:12;43699:63;:::i;:::-;43596:176;43867:4;43860:5;43856:16;43850:23;43886:63;43943:4;43938:3;43934:14;43920:12;43886:63;:::i;:::-;43782:177;42487:1479;42341:1625;;:::o;43972:383::-;44145:4;44183:3;44172:9;44168:19;44160:27;;44197:151;44345:1;44334:9;44330:17;44321:6;44197:151;:::i;:::-;43972:383;;;;:::o;44361:172::-;44501:24;44497:1;44489:6;44485:14;44478:48;44361:172;:::o;44539:366::-;44681:3;44702:67;44766:2;44761:3;44702:67;:::i;:::-;44695:74;;44778:93;44867:3;44778:93;:::i;:::-;44896:2;44891:3;44887:12;44880:19;;44539:366;;;:::o;44911:419::-;45077:4;45115:2;45104:9;45100:18;45092:26;;45164:9;45158:4;45154:20;45150:1;45139:9;45135:17;45128:47;45192:131;45318:4;45192:131;:::i;:::-;45184:139;;44911:419;;;:::o;45336:174::-;45476:26;45472:1;45464:6;45460:14;45453:50;45336:174;:::o;45516:366::-;45658:3;45679:67;45743:2;45738:3;45679:67;:::i;:::-;45672:74;;45755:93;45844:3;45755:93;:::i;:::-;45873:2;45868:3;45864:12;45857:19;;45516:366;;;:::o;45888:419::-;46054:4;46092:2;46081:9;46077:18;46069:26;;46141:9;46135:4;46131:20;46127:1;46116:9;46112:17;46105:47;46169:131;46295:4;46169:131;:::i;:::-;46161:139;;45888:419;;;:::o;46313:410::-;46353:7;46376:20;46394:1;46376:20;:::i;:::-;46371:25;;46410:20;46428:1;46410:20;:::i;:::-;46405:25;;46465:1;46462;46458:9;46487:30;46505:11;46487:30;:::i;:::-;46476:41;;46666:1;46657:7;46653:15;46650:1;46647:22;46627:1;46620:9;46600:83;46577:139;;46696:18;;:::i;:::-;46577:139;46361:362;46313:410;;;;:::o;46729:180::-;46777:77;46774:1;46767:88;46874:4;46871:1;46864:15;46898:4;46895:1;46888:15;46915:185;46955:1;46972:20;46990:1;46972:20;:::i;:::-;46967:25;;47006:20;47024:1;47006:20;:::i;:::-;47001:25;;47045:1;47035:35;;47050:18;;:::i;:::-;47035:35;47092:1;47089;47085:9;47080:14;;46915:185;;;;:::o

Swarm Source

ipfs://b6dd81fe574175a53581846939315c0e03d05942ffde8db04f56ff96d6518f01

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

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