ETH Price: $2,318.07 (+2.54%)

Contract

0xcaAab2000BDE6Df032cAeA153BeF4c5B68cDC4Ca
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Swap US Dx To107454122020-08-27 22:48:202027 days ago1598568500IN
0xcaAab200...B68cDC4Ca
0 ETH0.1417610550
Multi Approve107453882020-08-27 22:42:492027 days ago1598568169IN
0xcaAab200...B68cDC4Ca
0 ETH0.010693350

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
swapUSDx

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-08-28
*/

pragma solidity 0.5.12;

library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x, "ds-math-sub-underflow");
    }

    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
    }

    function div(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y > 0, "ds-math-div-overflow");
        z = x / y;
    }
}

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

contract ERC20SafeTransfer {
    function doTransferOut(
        address _token,
        address _to,
        uint256 _amount
    ) internal returns (bool) {
        IERC20 token = IERC20(_token);
        bool result;

        token.transfer(_to, _amount);

        assembly {
            switch returndatasize()
                case 0 {
                    result := not(0)
                }
                case 32 {
                    returndatacopy(0, 0, 32)
                    result := mload(0)
                }
                default {
                    revert(0, 0)
                }
        }
        return result;
    }

    function doTransferFrom(
        address _token,
        address _from,
        address _to,
        uint256 _amount
    ) internal returns (bool) {
        IERC20 token = IERC20(_token);
        bool result;

        token.transferFrom(_from, _to, _amount);

        assembly {
            switch returndatasize()
                case 0 {
                    result := not(0)
                }
                case 32 {
                    returndatacopy(0, 0, 32)
                    result := mload(0)
                }
                default {
                    revert(0, 0)
                }
        }
        return result;
    }

    function doApprove(
        address _token,
        address _to,
        uint256 _amount
    ) internal returns (bool) {
        IERC20 token = IERC20(_token);
        bool result;

        token.approve(_to, _amount);

        assembly {
            switch returndatasize()
                case 0 {
                    result := not(0)
                }
                case 32 {
                    returndatacopy(0, 0, 32)
                    result := mload(0)
                }
                default {
                    revert(0, 0)
                }
        }
        return result;
    }
}

interface DFStore {
    function getFeeRate(uint ct) external view returns (uint);
    function getMinBurnAmount() external view returns (uint);
}

interface IUniswapV2Router {
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface DFProtocolView {
    function getPrice(uint _tokenIdx) external view returns (uint);
    function getFeeRate(uint _processIdx) external view returns (uint);
}

interface DFProtocol{
    function deposit(address _tokenID, uint _feeTokenIdx, uint _tokenAmount) external returns (uint);
    function destroy(uint _feeTokenIdx, uint _usdxAmount) external;
}

interface Curve {
    function exchange_underlying(int128 inputIndex, int128 outputIndex, uint256 inputAmount, uint256 minOutput) external;
}

interface IChi {
    function freeFromUpTo(address from, uint256 value) external returns (uint256 freed);
}

contract Ownable {
    address internal _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() external view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



contract swapUSDx is ERC20SafeTransfer, Ownable {
    using SafeMath for uint256;
    uint256 private BASE = 10 ** 18;

    event SwapUSDx(address targetToken, uint256 inputAmount, uint256 outputAmount);

    constructor () public {
        _owner = msg.sender;
    }

    IChi public chi = IChi(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c);

    address internal USDx = 0xeb269732ab75A6fD61Ea60b06fE994cD32a83549;
    address internal DF = 0x431ad2ff6a9C365805eBaD47Ee021148d6f7DBe0;

    address internal DFEngineContract = 0x3ea496977A356024bE096c1068a57Bd0B92c7d7c;
    DFProtocol internal DFProtocolContract = DFProtocol(0x5843F1Ccc5baA448528eb0e8Bc567Cda7eD1A1E8);
    DFProtocolView internal DFProtocolViewContract = DFProtocolView(0x097Dd22173f0e382daE42baAEb9bDBC9fdf3396F);
    DFStore internal DFStoreContract = DFStore(0xD30d06b276867CfA2266542791242fF37C91BA8d);

    address internal yPool = 0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51;
    address internal paxPool = 0x06364f10B501e868329afBc005b3492902d6C763;
    address internal sUSD = 0xA5407eAE9Ba41422680e2e00537571bcC53efBfD;

    address internal uniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address[] public underlyingTokens = [
        0x8E870D67F660D95d5be530380D0eC0bd388289E1, // PAX
        0x0000000000085d4780B73119b644AE5ecd22b376, // TUSD
        0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48  // USDC
    ];

    address internal USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;

    modifier discountCHI {
        uint256 gasStart = gasleft();
        _;
        uint256 gasSpent = 21000 + gasStart - gasleft() + 16 *  msg.data.length;
        chi.freeFromUpTo(msg.sender, (gasSpent + 14154) / 41947);
    }

    /**
     * @dev Based on current DF price and the amount of USDx, calculate how many DF does the
     *      `msg.sender` need when destroies USDx.
     * @param _amount Total amount of USDx would be destroied.
     */
    function getDFAmount(uint256 _amount) internal view returns (uint256) {
        // 0 means DF
        uint256 _dfPrice =  DFProtocolViewContract.getPrice(uint256(0));
        // 1 means this processing is `destroy`
        uint256 _rate = DFProtocolViewContract.getFeeRate(uint256(1));
        uint256 _dfAmount = _amount.mul(_rate).mul(BASE).div(uint256(10000).mul(_dfPrice));
        return _dfAmount;
    }

    /**
     * @dev Calculate how many USDx will the `msg.sender` cost when wants to get a specific
     *      amount of DF.
     * @param _amount Total amount of DF would be cost.
     */
    function getSpendingUSDxAmount(uint256 _amount) internal view returns (uint256) {
        address[] memory _path = new address[](2);
        _path[0] = USDx;
        _path[1] = DF;
        uint[] memory _returnAmounts = IUniswapV2Router(uniswapRouter).getAmountsIn(_amount, _path);
        return _returnAmounts[0];
    }

    /**
     * @dev Uses this function to prepare for all authority needed.
     */
    function multiApprove() external onlyOwner discountCHI returns (bool) {
        // When swaps USDx to DF in the uniswap.
        require(doApprove(USDx, uniswapRouter, uint256(-1)), "multiApprove: approve uniswap failed!");
        // When destroy USDx.
        // - 1. DF.approve(DFEngineContract, -1)
        require(doApprove(DF, DFEngineContract, uint256(-1)), "multiApprove: DF approves DFEngine failed!");
        // - 2. USDx.approve(DFEngineContract, -1)
        require(doApprove(USDx, DFEngineContract, uint256(-1)), "multiApprove: USDx approves DFEngine failed!");
        // When swaps token to get USDC
        require(doApprove(underlyingTokens[0], paxPool, uint256(-1)), "multiApprove: PAX approves paxpool failed!");
        require(doApprove(underlyingTokens[1], yPool, uint256(-1)), "multiApprove: TUSD approves ypool failed!");
        // When swaps token to get USDT
        require(doApprove(underlyingTokens[2], sUSD, uint256(-1)), "multiApprove: USDC approves sUSD failed!");
    }

    /**
     * @dev Swaps USDx to DF in the Uniswap.
     * @param _inputAmount Amount of USDx to swap to get DF.
     */
    function swapUSDxToDF(uint256 _inputAmount) internal {
        uint256 _dfAmount =  getDFAmount(_inputAmount);
        uint256 _expectedUSDxAmount = getSpendingUSDxAmount(_dfAmount);
        uint256 _usdxAmount =  _expectedUSDxAmount % DFStoreContract.getMinBurnAmount() > 0
                              ? (_expectedUSDxAmount / DFStoreContract.getMinBurnAmount() + 1) * DFStoreContract.getMinBurnAmount()
                              : _expectedUSDxAmount ;

        address[] memory _path = new address[](2);
        _path[0] = USDx;
        _path[1] = DF;

        // swap parts of USDx to DF.
        IUniswapV2Router(uniswapRouter).swapExactTokensForTokens(
            _usdxAmount,
            _dfAmount,
            _path,
            address(this),
            block.timestamp + 3600
        );
    }

    /**
     * @dev Gets the final amount of target token when swaps.
     * @param _targetToken Asset that swaps to get.
     * @param _inputAmount Amount to swap.
     * @param _minReturn Minimum amount to get when swaps.
     */
    function getAmountOut(address _targetToken, uint256 _inputAmount, uint256 _minReturn) external returns (uint256) {
        // transfer USDx from user to this contract.
        require(
            doTransferFrom(
                USDx,
                msg.sender,
                address(this),
                _inputAmount
            ),
            "swap: USDx transferFrom failed!"
        );

        swapUSDxToDF(_inputAmount);

        // destroy the remaining USDx with DF.
        DFProtocolContract.destroy(0, IERC20(USDx).balanceOf(address(this)));

        if (_targetToken == underlyingTokens[2]){
            // TUSD -> USDC
            uint256 _totalAmount = IERC20(underlyingTokens[1]).balanceOf(address(this));
            Curve(yPool).exchange_underlying(int128(3), int128(1), _totalAmount,uint256(0));
            // PAX -> USDC
            _totalAmount = IERC20(underlyingTokens[0]).balanceOf(address(this));
            Curve(paxPool).exchange_underlying(int128(3), int128(1), _totalAmount,uint256(0));
        } else if (_targetToken == USDT) {
            // USDC -> USDT
            uint256 _totalAmount = IERC20(underlyingTokens[2]).balanceOf(address(this));
            Curve(sUSD).exchange_underlying(int128(1), int128(2), _totalAmount,uint256(0));
            // TUSD -> USDT
            _totalAmount = IERC20(underlyingTokens[1]).balanceOf(address(this));
            Curve(yPool).exchange_underlying(int128(3), int128(2), _totalAmount,uint256(0));
            // PAX -> USDC
            _totalAmount = IERC20(underlyingTokens[0]).balanceOf(address(this));
            Curve(paxPool).exchange_underlying(int128(3), int128(2), _totalAmount,uint256(0));
        }

        uint256 _finalBalance = IERC20(_targetToken).balanceOf(address(this));
        // transfer target token to caller`msg.sender`
        require(doTransferOut(_targetToken, msg.sender, _finalBalance), "swap: Transfer targetToken out failed!");
        require(doTransferOut(DF, msg.sender, IERC20(DF).balanceOf(address(this))), "swap: Transfer DF out failed!");

        emit SwapUSDx(_targetToken, _inputAmount, _finalBalance);
        return _finalBalance;
    }

    /**
     * @dev Swaps token to get target token.
     * @param _targetToken Asset that swaps to get.
     * @param _inputAmount Amount to swap.
     * @param _minReturn Minimum amount to get when swaps.
     */
    function swapUSDxTo(address _targetToken, uint256 _inputAmount, uint256 _minReturn) public discountCHI returns (uint256) {
        // transfer USDx from user to this contract.
        require(
            doTransferFrom(
                USDx,
                msg.sender,
                address(this),
                _inputAmount
            ),
            "swap: USDx transferFrom failed!"
        );

        swapUSDxToDF(_inputAmount);

        // destroy the remaining USDx with DF.
        DFProtocolContract.destroy(0, IERC20(USDx).balanceOf(address(this)));

        if (_targetToken == underlyingTokens[2]){
            // TUSD -> USDC
            uint256 _totalAmount = IERC20(underlyingTokens[1]).balanceOf(address(this));
            Curve(yPool).exchange_underlying(int128(3), int128(1), _totalAmount, uint256(0));
            // PAX -> USDC
            _totalAmount = IERC20(underlyingTokens[0]).balanceOf(address(this));
            Curve(paxPool).exchange_underlying(int128(3), int128(1), _totalAmount, uint256(0));
        } else if (_targetToken == USDT) {
            // USDC -> USDT
            uint256 _totalAmount = IERC20(underlyingTokens[2]).balanceOf(address(this));
            Curve(sUSD).exchange_underlying(int128(1), int128(2), _totalAmount, uint256(0));
            // TUSD -> USDT
            _totalAmount = IERC20(underlyingTokens[1]).balanceOf(address(this));
            Curve(yPool).exchange_underlying(int128(3), int128(2), _totalAmount, uint256(0));
            // PAX -> USDC
            _totalAmount = IERC20(underlyingTokens[0]).balanceOf(address(this));
            Curve(paxPool).exchange_underlying(int128(3), int128(2), _totalAmount, uint256(0));
        }

        uint256 _finalBalance = IERC20(_targetToken).balanceOf(address(this));
        require(_finalBalance >= _minReturn, "swap: Too large slippage to succeed!");
        // transfer target token to caller`msg.sender`
        require(doTransferOut(_targetToken, msg.sender, _finalBalance), "swap: Transfer targetToken out failed!");
        require(doTransferOut(DF, msg.sender, IERC20(DF).balanceOf(address(this))), "swap: Transfer DF out failed!");

        emit SwapUSDx(_targetToken, _inputAmount, _finalBalance);
        return _finalBalance;
    }

    /**
     * @dev Transfer unexpected toke out, but only for owner.
     */
    function transferOut(address _token, address _to, uint256 _amount) external onlyOwner {
        require(
            doTransferOut(
                _token,
                _to,
                _amount
            ),
            "transferOut: Transfer token out failed!"
        );
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"inputAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outputAmount","type":"uint256"}],"name":"SwapUSDx","type":"event"},{"constant":true,"inputs":[],"name":"chi","outputs":[{"internalType":"contract IChi","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_targetToken","type":"address"},{"internalType":"uint256","name":"_inputAmount","type":"uint256"},{"internalType":"uint256","name":"_minReturn","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"multiApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_targetToken","type":"address"},{"internalType":"uint256","name":"_inputAmount","type":"uint256"},{"internalType":"uint256","name":"_minReturn","type":"uint256"}],"name":"swapUSDxTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"underlyingTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

6080604052670de0b6b3a76400006001556d4946c0e9f43f4dee607b0ef1fa1c600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eb269732ab75a6fd61ea60b06fe994cd32a83549600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073431ad2ff6a9c365805ebad47ee021148d6f7dbe0600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733ea496977a356024be096c1068a57bd0b92c7d7c600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735843f1ccc5baa448528eb0e8bc567cda7ed1a1e8600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073097dd22173f0e382dae42baaeb9bdbc9fdf3396f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d30d06b276867cfa2266542791242ff37c91ba8d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507345f783cce6b7ff23b2ab2d70e416cdb7d6055f51600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507306364f10b501e868329afbc005b3492902d6c763600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a5407eae9ba41422680e2e00537571bcc53efbfd600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060600160405280738e870d67f660d95d5be530380d0ec0bd388289e173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600d9060036200049992919062000543565b5073dac17f958d2ee523a2206206994597c13d831ec7600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620004fc57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000618565b828054828255906000526020600020908101928215620005bf579160200282015b82811115620005be5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000564565b5b509050620005ce9190620005d2565b5090565b6200061591905b808211156200061157600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620005d9565b5090565b90565b613b3280620006286000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a3bf224b1161005b578063a3bf224b1461021d578063c92aecc41461028b578063e15c13b0146102d5578063f2fde38b146102f757610088565b8063078d3b791461008d57806352bcf404146100fb5780638244df7b146101675780638da5cb5b146101d3575b600080fd5b6100f9600480360360608110156100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061033b565b005b6101516004803603606081101561011157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610462565b6040518082815260200191505060405180910390f35b6101bd6004803603606081101561017d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611401565b6040518082815260200191505060405180910390f35b6101db61223a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102496004803603602081101561023357600080fd5b8101908080359060200190929190505050612263565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61029361229f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102dd6122c5565b604051808215151515815260200191505060405180910390f35b6103396004803603602081101561030d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612974565b005b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610408838383612b7a565b61045d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806139c16027913960400191505060405180910390fd5b505050565b6000805a9050610496600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16333087612c7e565b610508576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f737761703a2055534478207472616e7366657246726f6d206661696c6564210081525060200191505060405180910390fd5b61051184612db7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a940516000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105f057600080fd5b505afa158015610604573d6000803e3d6000fd5b505050506040513d602081101561061a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561066857600080fd5b505af115801561067c573d6000803e3d6000fd5b50505050600d60028154811061068e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610a40576000600d6001815481106106fc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156107a357600080fd5b505afa1580156107b7573d6000803e3d6000fd5b505050506040513d60208110156107cd57600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b15801561087c57600080fd5b505af1158015610890573d6000803e3d6000fd5b50505050600d6000815481106108a257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094957600080fd5b505afa15801561095d573d6000803e3d6000fd5b505050506040513d602081101561097357600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610a2257600080fd5b505af1158015610a36573d6000803e3d6000fd5b5050505050610f8d565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f8c576000600d600281548110610aa657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6020811015610b7757600080fd5b81019080805190602001909291905050509050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600160028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b50505050600d600181548110610c4c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cf357600080fd5b505afa158015610d07573d6000803e3d6000fd5b505050506040513d6020811015610d1d57600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b50505050600d600081548110610df257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d6020811015610ec357600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610f7257600080fd5b505af1158015610f86573d6000803e3d6000fd5b50505050505b5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561100c57600080fd5b505afa158015611020573d6000803e3d6000fd5b505050506040513d602081101561103657600080fd5b81019080805190602001909291905050509050838110156110a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613a116024913960400191505060405180910390fd5b6110ad863383612b7a565b611102576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a866026913960400191505060405180910390fd5b611208600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111c857600080fd5b505afa1580156111dc573d6000803e3d6000fd5b505050506040513d60208110156111f257600080fd5b8101908080519060200190929190505050612b7a565b61127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f737761703a205472616e73666572204446206f7574206661696c65642100000081525060200191505060405180910390fd5b7f6cbf424e57c2e5c7dcce3326c22836f4bf68af0b07437312b30be586300601c1868683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1809250506000803690506010025a836152080103019050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a85018161135257fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113bc57600080fd5b505af11580156113d0573d6000803e3d6000fd5b505050506040513d60208110156113e657600080fd5b81019080805190602001909291905050505050509392505050565b6000611431600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16333086612c7e565b6114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f737761703a2055534478207472616e7366657246726f6d206661696c6564210081525060200191505060405180910390fd5b6114ac83612db7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a940516000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d60208110156115b557600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561160357600080fd5b505af1158015611617573d6000803e3d6000fd5b50505050600d60028154811061162957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119db576000600d60018154811061169757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d602081101561176857600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b50505050600d60008154811061183d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118e457600080fd5b505afa1580156118f8573d6000803e3d6000fd5b505050506040513d602081101561190e57600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b1580156119bd57600080fd5b505af11580156119d1573d6000803e3d6000fd5b5050505050611f28565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f27576000600d600281548110611a4157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ae857600080fd5b505afa158015611afc573d6000803e3d6000fd5b505050506040513d6020811015611b1257600080fd5b81019080805190602001909291905050509050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600160028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015611bc157600080fd5b505af1158015611bd5573d6000803e3d6000fd5b50505050600d600181548110611be757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c8e57600080fd5b505afa158015611ca2573d6000803e3d6000fd5b505050506040513d6020811015611cb857600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015611d6757600080fd5b505af1158015611d7b573d6000803e3d6000fd5b50505050600d600081548110611d8d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e3457600080fd5b505afa158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015611f0d57600080fd5b505af1158015611f21573d6000803e3d6000fd5b50505050505b5b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fa757600080fd5b505afa158015611fbb573d6000803e3d6000fd5b505050506040513d6020811015611fd157600080fd5b81019080805190602001909291905050509050611fef853383612b7a565b612044576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a866026913960400191505060405180910390fd5b61214a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561210a57600080fd5b505afa15801561211e573d6000803e3d6000fd5b505050506040513d602081101561213457600080fd5b8101908080519060200190929190505050612b7a565b6121bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f737761703a205472616e73666572204446206f7574206661696c65642100000081525060200191505060405180910390fd5b7f6cbf424e57c2e5c7dcce3326c22836f4bf68af0b07437312b30be586300601c1858583604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d818154811061227057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005a90506123fd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b612452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a616025913960400191505060405180910390fd5b6124c1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613ad4602a913960400191505060405180910390fd5b612585600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b6125da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613a35602c913960400191505060405180910390fd5b61265f600d6000815481106125eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b6126b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613971602a913960400191505060405180910390fd5b612739600d6001815481106126c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b61278e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806139e86029913960400191505060405180910390fd5b612813600d60028154811061279f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b612868576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613aac6028913960400191505060405180910390fd5b6000803690506010025a836152080103019050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a8501816128c957fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561293357600080fd5b505af1158015612947573d6000803e3d6000fd5b505050506040513d602081101561295d57600080fd5b810190808051906020019092919050505050505090565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061399b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008084905060008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b8101908080519060200190929190505050503d60008114612c5b5760208114612c6557600080fd5b6000199150612c71565b60206000803e60005191505b5080925050509392505050565b60008085905060008173ffffffffffffffffffffffffffffffffffffffff166323b872dd8787876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612d4157600080fd5b505af1158015612d55573d6000803e3d6000fd5b505050506040513d6020811015612d6b57600080fd5b8101908080519060200190929190505050503d60008114612d935760208114612d9d57600080fd5b6000199150612da9565b60206000803e60005191505b508092505050949350505050565b6000612dc2826133d1565b90506000612dcf82613594565b9050600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cce9362e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e3c57600080fd5b505afa158015612e50573d6000803e3d6000fd5b505050506040513d6020811015612e6657600080fd5b81019080805190602001909291905050508381612e7f57fe5b0611612e8b5781612fdf565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cce9362e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ef357600080fd5b505afa158015612f07573d6000803e3d6000fd5b505050506040513d6020811015612f1d57600080fd5b81019080805190602001909291905050506001600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cce9362e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9857600080fd5b505afa158015612fac573d6000803e3d6000fd5b505050506040513d6020811015612fc257600080fd5b81019080805190602001909291905050508481612fdb57fe5b0401025b9050606060026040519080825280602002602001820160405280156130135781602001602082028038833980820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061304657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106130b057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed173983868430610e1042016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156131c75780820151818401526020810190506131ac565b505050509050019650505050505050600060405180830381600087803b1580156131f057600080fd5b505af1158015613204573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561322e57600080fd5b810190808051604051939291908464010000000082111561324e57600080fd5b8382019150602082018581111561326457600080fd5b825186602082028301116401000000008211171561328157600080fd5b8083526020830192505050908051906020019060200280838360005b838110156132b857808201518184015260208101905061329d565b50505050905001604052505050505050505050565b60008084905060008173ffffffffffffffffffffffffffffffffffffffff1663095ea7b386866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561335c57600080fd5b505af1158015613370573d6000803e3d6000fd5b505050506040513d602081101561338657600080fd5b8101908080519060200190929190505050503d600081146133ae57602081146133b857600080fd5b60001991506133c4565b60206000803e60005191505b5080925050509392505050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e757223060006040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561344857600080fd5b505afa15801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b810190808051906020019092919050505090506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2aaef4e60016040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156134fb57600080fd5b505afa15801561350f573d6000803e3d6000fd5b505050506040513d602081101561352557600080fd5b8101908080519060200190929190505050905060006135876135528461271061385290919063ffffffff16565b61357960015461356b868a61385290919063ffffffff16565b61385290919063ffffffff16565b6138e790919063ffffffff16565b9050809350505050919050565b6000606060026040519080825280602002602001820160405280156135c85781602001602082028038833980820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106135fb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061366557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506060600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7485846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561373957808201518184015260208101905061371e565b50505050905001935050505060006040518083038186803b15801561375d57600080fd5b505afa158015613771573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561379b57600080fd5b81019080805160405193929190846401000000008211156137bb57600080fd5b838201915060208201858111156137d157600080fd5b82518660208202830111640100000000821117156137ee57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561382557808201518184015260208101905061380a565b5050505090500160405250505090508060008151811061384157fe5b602002602001015192505050919050565b60008082148061386f575082828385029250828161386c57fe5b04145b6138e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b600080821161395e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6469762d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b81838161396757fe5b0490509291505056fe6d756c7469417070726f76653a2050415820617070726f76657320706178706f6f6c206661696c6564214f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737472616e736665724f75743a205472616e7366657220746f6b656e206f7574206661696c6564216d756c7469417070726f76653a205455534420617070726f7665732079706f6f6c206661696c656421737761703a20546f6f206c6172676520736c69707061676520746f2073756363656564216d756c7469417070726f76653a205553447820617070726f766573204446456e67696e65206661696c6564216d756c7469417070726f76653a20617070726f766520756e6973776170206661696c656421737761703a205472616e7366657220746172676574546f6b656e206f7574206661696c6564216d756c7469417070726f76653a205553444320617070726f7665732073555344206661696c6564216d756c7469417070726f76653a20444620617070726f766573204446456e67696e65206661696c656421a265627a7a723158206071ef4519c99249a82101a6b43543f5ac5118fb3135ef0728acb7cfea0554d364736f6c634300050c0032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a3bf224b1161005b578063a3bf224b1461021d578063c92aecc41461028b578063e15c13b0146102d5578063f2fde38b146102f757610088565b8063078d3b791461008d57806352bcf404146100fb5780638244df7b146101675780638da5cb5b146101d3575b600080fd5b6100f9600480360360608110156100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061033b565b005b6101516004803603606081101561011157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610462565b6040518082815260200191505060405180910390f35b6101bd6004803603606081101561017d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611401565b6040518082815260200191505060405180910390f35b6101db61223a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102496004803603602081101561023357600080fd5b8101908080359060200190929190505050612263565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61029361229f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102dd6122c5565b604051808215151515815260200191505060405180910390f35b6103396004803603602081101561030d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612974565b005b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610408838383612b7a565b61045d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806139c16027913960400191505060405180910390fd5b505050565b6000805a9050610496600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16333087612c7e565b610508576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f737761703a2055534478207472616e7366657246726f6d206661696c6564210081525060200191505060405180910390fd5b61051184612db7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a940516000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105f057600080fd5b505afa158015610604573d6000803e3d6000fd5b505050506040513d602081101561061a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561066857600080fd5b505af115801561067c573d6000803e3d6000fd5b50505050600d60028154811061068e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610a40576000600d6001815481106106fc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156107a357600080fd5b505afa1580156107b7573d6000803e3d6000fd5b505050506040513d60208110156107cd57600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b15801561087c57600080fd5b505af1158015610890573d6000803e3d6000fd5b50505050600d6000815481106108a257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094957600080fd5b505afa15801561095d573d6000803e3d6000fd5b505050506040513d602081101561097357600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610a2257600080fd5b505af1158015610a36573d6000803e3d6000fd5b5050505050610f8d565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f8c576000600d600281548110610aa657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6020811015610b7757600080fd5b81019080805190602001909291905050509050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600160028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b50505050600d600181548110610c4c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cf357600080fd5b505afa158015610d07573d6000803e3d6000fd5b505050506040513d6020811015610d1d57600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b50505050600d600081548110610df257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e9957600080fd5b505afa158015610ead573d6000803e3d6000fd5b505050506040513d6020811015610ec357600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015610f7257600080fd5b505af1158015610f86573d6000803e3d6000fd5b50505050505b5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561100c57600080fd5b505afa158015611020573d6000803e3d6000fd5b505050506040513d602081101561103657600080fd5b81019080805190602001909291905050509050838110156110a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613a116024913960400191505060405180910390fd5b6110ad863383612b7a565b611102576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a866026913960400191505060405180910390fd5b611208600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111c857600080fd5b505afa1580156111dc573d6000803e3d6000fd5b505050506040513d60208110156111f257600080fd5b8101908080519060200190929190505050612b7a565b61127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f737761703a205472616e73666572204446206f7574206661696c65642100000081525060200191505060405180910390fd5b7f6cbf424e57c2e5c7dcce3326c22836f4bf68af0b07437312b30be586300601c1868683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1809250506000803690506010025a836152080103019050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a85018161135257fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113bc57600080fd5b505af11580156113d0573d6000803e3d6000fd5b505050506040513d60208110156113e657600080fd5b81019080805190602001909291905050505050509392505050565b6000611431600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16333086612c7e565b6114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f737761703a2055534478207472616e7366657246726f6d206661696c6564210081525060200191505060405180910390fd5b6114ac83612db7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e3a940516000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561158b57600080fd5b505afa15801561159f573d6000803e3d6000fd5b505050506040513d60208110156115b557600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561160357600080fd5b505af1158015611617573d6000803e3d6000fd5b50505050600d60028154811061162957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119db576000600d60018154811061169757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d602081101561176857600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b50505050600d60008154811061183d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118e457600080fd5b505afa1580156118f8573d6000803e3d6000fd5b505050506040513d602081101561190e57600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360018460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b1580156119bd57600080fd5b505af11580156119d1573d6000803e3d6000fd5b5050505050611f28565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f27576000600d600281548110611a4157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ae857600080fd5b505afa158015611afc573d6000803e3d6000fd5b505050506040513d6020811015611b1257600080fd5b81019080805190602001909291905050509050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600160028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015611bc157600080fd5b505af1158015611bd5573d6000803e3d6000fd5b50505050600d600181548110611be757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c8e57600080fd5b505afa158015611ca2573d6000803e3d6000fd5b505050506040513d6020811015611cb857600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015611d6757600080fd5b505af1158015611d7b573d6000803e3d6000fd5b50505050600d600081548110611d8d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e3457600080fd5b505afa158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6417ed6600360028460006040518563ffffffff1660e01b81526004018085600f0b600f0b815260200184600f0b600f0b8152602001838152602001828152602001945050505050600060405180830381600087803b158015611f0d57600080fd5b505af1158015611f21573d6000803e3d6000fd5b50505050505b5b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fa757600080fd5b505afa158015611fbb573d6000803e3d6000fd5b505050506040513d6020811015611fd157600080fd5b81019080805190602001909291905050509050611fef853383612b7a565b612044576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a866026913960400191505060405180910390fd5b61214a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561210a57600080fd5b505afa15801561211e573d6000803e3d6000fd5b505050506040513d602081101561213457600080fd5b8101908080519060200190929190505050612b7a565b6121bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f737761703a205472616e73666572204446206f7574206661696c65642100000081525060200191505060405180910390fd5b7f6cbf424e57c2e5c7dcce3326c22836f4bf68af0b07437312b30be586300601c1858583604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d818154811061227057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005a90506123fd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b612452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613a616025913960400191505060405180910390fd5b6124c1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613ad4602a913960400191505060405180910390fd5b612585600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b6125da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613a35602c913960400191505060405180910390fd5b61265f600d6000815481106125eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b6126b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613971602a913960400191505060405180910390fd5b612739600d6001815481106126c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b61278e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806139e86029913960400191505060405180910390fd5b612813600d60028154811061279f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6132cd565b612868576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613aac6028913960400191505060405180910390fd5b6000803690506010025a836152080103019050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a8501816128c957fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561293357600080fd5b505af1158015612947573d6000803e3d6000fd5b505050506040513d602081101561295d57600080fd5b810190808051906020019092919050505050505090565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061399b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008084905060008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b8101908080519060200190929190505050503d60008114612c5b5760208114612c6557600080fd5b6000199150612c71565b60206000803e60005191505b5080925050509392505050565b60008085905060008173ffffffffffffffffffffffffffffffffffffffff166323b872dd8787876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612d4157600080fd5b505af1158015612d55573d6000803e3d6000fd5b505050506040513d6020811015612d6b57600080fd5b8101908080519060200190929190505050503d60008114612d935760208114612d9d57600080fd5b6000199150612da9565b60206000803e60005191505b508092505050949350505050565b6000612dc2826133d1565b90506000612dcf82613594565b9050600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cce9362e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e3c57600080fd5b505afa158015612e50573d6000803e3d6000fd5b505050506040513d6020811015612e6657600080fd5b81019080805190602001909291905050508381612e7f57fe5b0611612e8b5781612fdf565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cce9362e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ef357600080fd5b505afa158015612f07573d6000803e3d6000fd5b505050506040513d6020811015612f1d57600080fd5b81019080805190602001909291905050506001600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cce9362e6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9857600080fd5b505afa158015612fac573d6000803e3d6000fd5b505050506040513d6020811015612fc257600080fd5b81019080805190602001909291905050508481612fdb57fe5b0401025b9050606060026040519080825280602002602001820160405280156130135781602001602082028038833980820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061304657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106130b057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed173983868430610e1042016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156131c75780820151818401526020810190506131ac565b505050509050019650505050505050600060405180830381600087803b1580156131f057600080fd5b505af1158015613204573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561322e57600080fd5b810190808051604051939291908464010000000082111561324e57600080fd5b8382019150602082018581111561326457600080fd5b825186602082028301116401000000008211171561328157600080fd5b8083526020830192505050908051906020019060200280838360005b838110156132b857808201518184015260208101905061329d565b50505050905001604052505050505050505050565b60008084905060008173ffffffffffffffffffffffffffffffffffffffff1663095ea7b386866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561335c57600080fd5b505af1158015613370573d6000803e3d6000fd5b505050506040513d602081101561338657600080fd5b8101908080519060200190929190505050503d600081146133ae57602081146133b857600080fd5b60001991506133c4565b60206000803e60005191505b5080925050509392505050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e757223060006040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561344857600080fd5b505afa15801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b810190808051906020019092919050505090506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2aaef4e60016040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156134fb57600080fd5b505afa15801561350f573d6000803e3d6000fd5b505050506040513d602081101561352557600080fd5b8101908080519060200190929190505050905060006135876135528461271061385290919063ffffffff16565b61357960015461356b868a61385290919063ffffffff16565b61385290919063ffffffff16565b6138e790919063ffffffff16565b9050809350505050919050565b6000606060026040519080825280602002602001820160405280156135c85781602001602082028038833980820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106135fb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061366557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506060600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7485846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561373957808201518184015260208101905061371e565b50505050905001935050505060006040518083038186803b15801561375d57600080fd5b505afa158015613771573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561379b57600080fd5b81019080805160405193929190846401000000008211156137bb57600080fd5b838201915060208201858111156137d157600080fd5b82518660208202830111640100000000821117156137ee57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561382557808201518184015260208101905061380a565b5050505090500160405250505090508060008151811061384157fe5b602002602001015192505050919050565b60008082148061386f575082828385029250828161386c57fe5b04145b6138e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b600080821161395e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6469762d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b81838161396757fe5b0490509291505056fe6d756c7469417070726f76653a2050415820617070726f76657320706178706f6f6c206661696c6564214f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737472616e736665724f75743a205472616e7366657220746f6b656e206f7574206661696c6564216d756c7469417070726f76653a205455534420617070726f7665732079706f6f6c206661696c656421737761703a20546f6f206c6172676520736c69707061676520746f2073756363656564216d756c7469417070726f76653a205553447820617070726f766573204446456e67696e65206661696c6564216d756c7469417070726f76653a20617070726f766520756e6973776170206661696c656421737761703a205472616e7366657220746172676574546f6b656e206f7574206661696c6564216d756c7469417070726f76653a205553444320617070726f7665732073555344206661696c6564216d756c7469417070726f76653a20444620617070726f766573204446456e67696e65206661696c656421a265627a7a723158206071ef4519c99249a82101a6b43543f5ac5118fb3135ef0728acb7cfea0554d364736f6c634300050c0032

Deployed Bytecode Sourcemap

7339:10373:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7339:10373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17412:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17412:295:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15021:2302;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15021:2302:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12590:2202;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12590:2202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6644:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8548:226;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8548:226:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7622:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10364:1017;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7090:238;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7090:238:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17412:295;6868:10;6858:20;;:6;;;;;;;;;;;:20;;;6850:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17531:101;17563:6;17588:3;17610:7;17531:13;:101::i;:::-;17509:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17412:295;;;:::o;15021:2302::-;15133:7;8890:16;8909:9;8890:28;;15229:144;15262:4;;;;;;;;;;;15285:10;15322:4;15346:12;15229:14;:144::i;:::-;15207:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15445:26;15458:12;15445;:26::i;:::-;15532:18;;;;;;;;;;;:26;;;15559:1;15569:4;;;;;;;;;;;15562:22;;;15593:4;15562:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15562:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15562:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15562:37:0;;;;;;;;;;;;;;;;15532:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15532:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15532:68:0;;;;15633:16;15650:1;15633:19;;;;;;;;;;;;;;;;;;;;;;;;;15617:35;;:12;:35;;;15613:1143;;;15697:20;15727:16;15744:1;15727:19;;;;;;;;;;;;;;;;;;;;;;;;;15720:37;;;15766:4;15720:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15720:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15720:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15720:52:0;;;;;;;;;;;;;;;;15697:75;;15793:5;;;;;;;;;;;15787:32;;;15827:1;15838;15842:12;15864:1;15787:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15787:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15787:80:0;;;;15932:16;15949:1;15932:19;;;;;;;;;;;;;;;;;;;;;;;;;15925:37;;;15971:4;15925:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15925:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15925:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15925:52:0;;;;;;;;;;;;;;;;15910:67;;15998:7;;;;;;;;;;;15992:34;;;16034:1;16045;16049:12;16071:1;15992:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15992:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15992:82:0;;;;15613:1143;;;;16112:4;;;;;;;;;;;16096:20;;:12;:20;;;16092:664;;;16162:20;16192:16;16209:1;16192:19;;;;;;;;;;;;;;;;;;;;;;;;;16185:37;;;16231:4;16185:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16185:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16185:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16185:52:0;;;;;;;;;;;;;;;;16162:75;;16258:4;;;;;;;;;;;16252:31;;;16291:1;16302;16306:12;16328:1;16252:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16252:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16252:79:0;;;;16397:16;16414:1;16397:19;;;;;;;;;;;;;;;;;;;;;;;;;16390:37;;;16436:4;16390:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16390:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16390:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16390:52:0;;;;;;;;;;;;;;;;16375:67;;16463:5;;;;;;;;;;;16457:32;;;16497:1;16508;16512:12;16534:1;16457:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16457:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16457:80:0;;;;16602:16;16619:1;16602:19;;;;;;;;;;;;;;;;;;;;;;;;;16595:37;;;16641:4;16595:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16595:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16595:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16595:52:0;;;;;;;;;;;;;;;;16580:67;;16668:7;;;;;;;;;;;16662:34;;;16704:1;16715;16719:12;16741:1;16662:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16662:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16662:82:0;;;;16092:664;;15613:1143;16768:21;16799:12;16792:30;;;16831:4;16792:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16792:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16792:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16792:45:0;;;;;;;;;;;;;;;;16768:69;;16873:10;16856:13;:27;;16848:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16999:54;17013:12;17027:10;17039:13;16999;:54::i;:::-;16991:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17115:66;17129:2;;;;;;;;;;;17133:10;17152:2;;;;;;;;;;;17145:20;;;17174:4;17145:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17145:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17145:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17145:35:0;;;;;;;;;;;;;;;;17115:13;:66::i;:::-;17107:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17233:51;17242:12;17256;17270:13;17233:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17302:13;17295:20;;;8941:16;8997:8;;:15;;8991:2;:21;8979:9;8968:8;8960:5;:16;:28;:52;8941:71;;9023:3;;;;;;;;;;;:16;;;9040:10;9073:5;9064;9053:8;:16;9052:26;;;;;;9023:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9023:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9023:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9023:56:0;;;;;;;;;;;;;;;;;15021:2302;;;;;;;:::o;12590:2202::-;12694:7;12790:144;12823:4;;;;;;;;;;;12846:10;12883:4;12907:12;12790:14;:144::i;:::-;12768:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13006:26;13019:12;13006;:26::i;:::-;13093:18;;;;;;;;;;;:26;;;13120:1;13130:4;;;;;;;;;;;13123:22;;;13154:4;13123:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13123:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13123:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13123:37:0;;;;;;;;;;;;;;;;13093:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13093:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13093:68:0;;;;13194:16;13211:1;13194:19;;;;;;;;;;;;;;;;;;;;;;;;;13178:35;;:12;:35;;;13174:1138;;;13258:20;13288:16;13305:1;13288:19;;;;;;;;;;;;;;;;;;;;;;;;;13281:37;;;13327:4;13281:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13281:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13281:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13281:52:0;;;;;;;;;;;;;;;;13258:75;;13354:5;;;;;;;;;;;13348:32;;;13388:1;13399;13403:12;13424:1;13348:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13348:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13348:79:0;;;;13492:16;13509:1;13492:19;;;;;;;;;;;;;;;;;;;;;;;;;13485:37;;;13531:4;13485:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13485:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13485:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13485:52:0;;;;;;;;;;;;;;;;13470:67;;13558:7;;;;;;;;;;;13552:34;;;13594:1;13605;13609:12;13630:1;13552:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13552:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13552:81:0;;;;13174:1138;;;;13671:4;;;;;;;;;;;13655:20;;:12;:20;;;13651:661;;;13721:20;13751:16;13768:1;13751:19;;;;;;;;;;;;;;;;;;;;;;;;;13744:37;;;13790:4;13744:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13744:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13744:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13744:52:0;;;;;;;;;;;;;;;;13721:75;;13817:4;;;;;;;;;;;13811:31;;;13850:1;13861;13865:12;13886:1;13811:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13811:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13811:78:0;;;;13955:16;13972:1;13955:19;;;;;;;;;;;;;;;;;;;;;;;;;13948:37;;;13994:4;13948:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13948:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13948:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13948:52:0;;;;;;;;;;;;;;;;13933:67;;14021:5;;;;;;;;;;;14015:32;;;14055:1;14066;14070:12;14091:1;14015:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14015:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14015:79:0;;;;14159:16;14176:1;14159:19;;;;;;;;;;;;;;;;;;;;;;;;;14152:37;;;14198:4;14152:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14152:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14152:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14152:52:0;;;;;;;;;;;;;;;;14137:67;;14225:7;;;;;;;;;;;14219:34;;;14261:1;14272;14276:12;14297:1;14219:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14219:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14219:81:0;;;;13651:661;;13174:1138;14324:21;14355:12;14348:30;;;14387:4;14348:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14348:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14348:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14348:45:0;;;;;;;;;;;;;;;;14324:69;;14468:54;14482:12;14496:10;14508:13;14468;:54::i;:::-;14460:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14584:66;14598:2;;;;;;;;;;;14602:10;14621:2;;;;;;;;;;;14614:20;;;14643:4;14614:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14614:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14614:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14614:35:0;;;;;;;;;;;;;;;;14584:13;:66::i;:::-;14576:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14702:51;14711:12;14725;14739:13;14702:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14771:13;14764:20;;;12590:2202;;;;;:::o;6644:81::-;6684:7;6711:6;;;;;;;;;;;6704:13;;6644:81;:::o;8548:226::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7622:66::-;;;;;;;;;;;;;:::o;10364:1017::-;10428:4;6868:10;6858:20;;:6;;;;;;;;;;;:20;;;6850:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8890:16;8909:9;8890:28;;10503:43;10513:4;;;;;;;;;;;10519:13;;;;;;;;;;;10542:2;10503:9;:43::i;:::-;10495:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10688:44;10698:2;;;;;;;;;;;10702:16;;;;;;;;;;;10728:2;10688:9;:44::i;:::-;10680:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10850:46;10860:4;;;;;;;;;;;10866:16;;;;;;;;;;;10892:2;10850:9;:46::i;:::-;10842:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11005:52;11015:16;11032:1;11015:19;;;;;;;;;;;;;;;;;;;;;;;;;11036:7;;;;;;;;;;;11053:2;11005:9;:52::i;:::-;10997:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:50;11133:16;11150:1;11133:19;;;;;;;;;;;;;;;;;;;;;;;;;11154:5;;;;;;;;;;;11169:2;11123:9;:50::i;:::-;11115:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11279:49;11289:16;11306:1;11289:19;;;;;;;;;;;;;;;;;;;;;;;;;11310:4;;;;;;;;;;;11324:2;11279:9;:49::i;:::-;11271:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8941:16;8997:8;;:15;;8991:2;:21;8979:9;8968:8;8960:5;:16;:28;:52;8941:71;;9023:3;;;;;;;;;;;:16;;;9040:10;9073:5;9064;9053:8;:16;9052:26;;;;;;9023:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9023:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9023:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9023:56:0;;;;;;;;;;;;;;;;;6926:1;;10364:1017;:::o;7090:238::-;6868:10;6858:20;;:6;;;;;;;;;;;:20;;;6850:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7193:1;7173:22;;:8;:22;;;;7165:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7283:8;7254:38;;7275:6;;;;;;;;;;;7254:38;;;;;;;;;;;;7312:8;7303:6;;:17;;;;;;;;;;;;;;;;;;7090:238;:::o;3327:627::-;3448:4;3465:12;3487:6;3465:29;;3505:11;3529:5;:14;;;3544:3;3549:7;3529:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3529:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3529:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3529:28:0;;;;;;;;;;;;;;;;;3601:16;3640:1;3635:65;;;;3723:2;3718:114;;;;3891:1;3888;3881:12;3635:65;3679:1;3675:6;3665:16;;3635:65;;3718:114;3770:2;3767:1;3764;3749:24;3811:1;3805:8;3795:18;;3594:318;;3940:6;3933:13;;;;3327:627;;;;;:::o;3962:663::-;4108:4;4125:12;4147:6;4125:29;;4165:11;4189:5;:18;;;4208:5;4215:3;4220:7;4189:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4189:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4189:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4189:39:0;;;;;;;;;;;;;;;;;4272:16;4311:1;4306:65;;;;4394:2;4389:114;;;;4562:1;4559;4552:12;4306:65;4350:1;4346:6;4336:16;;4306:65;;4389:114;4441:2;4438:1;4435;4420:24;4482:1;4476:8;4466:18;;4265:318;;4611:6;4604:13;;;;3962:663;;;;;;:::o;11515:829::-;11579:17;11600:25;11612:12;11600:11;:25::i;:::-;11579:46;;11636:27;11666:32;11688:9;11666:21;:32::i;:::-;11636:62;;11709:19;11791:1;11754:15;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11754:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11754:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11754:34:0;;;;;;;;;;;;;;;;11732:19;:56;;;;;;:60;:246;;11959:19;11732:246;;;11891:15;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11891:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11891:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11891:34:0;;;;;;;;;;;;;;;;11886:1;11849:15;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11849:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11849:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11849:34:0;;;;;;;;;;;;;;;;11827:19;:56;;;;;;:60;11826:99;11732:246;11709:269;;11992:22;12031:1;12017:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;12017:16:0;;;;11992:41;;12055:4;;;;;;;;;;;12044:5;12050:1;12044:8;;;;;;;;;;;;;:15;;;;;;;;;;;12081:2;;;;;;;;;;;12070:5;12076:1;12070:8;;;;;;;;;;;;;:13;;;;;;;;;;;12151;;;;;;;;;;;12134:56;;;12205:11;12231:9;12255:5;12283:4;12321;12303:15;:22;12134:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12134:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12134:202:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12134:202:0;;;;;;39:16:-1;36:1;17:17;2:54;12134:202:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12134:202:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;12134:202:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12134:202:0;;;;;;;;;;;;11515:829;;;;;:::o;4633:622::-;4750:4;4767:12;4789:6;4767:29;;4807:11;4831:5;:13;;;4845:3;4850:7;4831:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4831:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4831:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4831:27:0;;;;;;;;;;;;;;;;;4902:16;4941:1;4936:65;;;;5024:2;5019:114;;;;5192:1;5189;5182:12;4936:65;4980:1;4976:6;4966:16;;4936:65;;5019:114;5071:2;5068:1;5065;5050:24;5112:1;5106:8;5096:18;;4895:318;;5241:6;5234:13;;;;4633:622;;;;;:::o;9323:416::-;9384:7;9427:16;9447:22;;;;;;;;;;;:31;;;9487:1;9447:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9447:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9447:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9447:43:0;;;;;;;;;;;;;;;;9427:63;;9550:13;9566:22;;;;;;;;;;;:33;;;9608:1;9566:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9566:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9566:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9566:45:0;;;;;;;;;;;;;;;;9550:61;;9622:17;9642:62;9675:28;9694:8;9683:5;9675:18;;:28;;;;:::i;:::-;9642;9665:4;;9642:18;9654:5;9642:7;:11;;:18;;;;:::i;:::-;:22;;:28;;;;:::i;:::-;:32;;:62;;;;:::i;:::-;9622:82;;9722:9;9715:16;;;;;9323:416;;;:::o;9942:327::-;10013:7;10033:22;10072:1;10058:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;10058:16:0;;;;10033:41;;10096:4;;;;;;;;;;;10085:5;10091:1;10085:8;;;;;;;;;;;;;:15;;;;;;;;;;;10122:2;;;;;;;;;;;10111:5;10117:1;10111:8;;;;;;;;;;;;;:13;;;;;;;;;;;10135:28;10183:13;;;;;;;;;;;10166:44;;;10211:7;10220:5;10166:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10166:60:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10166:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10166:60:0;;;;;;39:16:-1;36:1;17:17;2:54;10166:60:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10166:60:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;385:12;380:3;373:25;421:4;416:3;412:14;405:21;;0:433;;10166:60:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10166:60:0;;;;;;;;;;;10135:91;;10244:14;10259:1;10244:17;;;;;;;;;;;;;;10237:24;;;;9942:327;;;:::o;342:151::-;400:9;435:1;430;:6;:30;;;;459:1;454;449;445;:5;441:9;;;440:15;;;;;;:20;430:30;422:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;342:151;;;;:::o;501:146::-;559:9;593:1;589;:5;581:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;638:1;634;:5;;;;;;630:9;;501:146;;;;:::o

Swarm Source

bzzr://6071ef4519c99249a82101a6b43543f5ac5118fb3135ef0728acb7cfea0554d3

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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.