ETH Price: $3,276.19 (+0.90%)

Contract

0x68300309047f8bC213f10e238eA6Badb700cb193
 

Overview

ETH Balance

0.0005309676805819 ETH

Eth Value

$1.74 (@ $3,276.19/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer212493872024-11-23 8:56:5949 days ago1732352219IN
Solidblock: SOLID Token
0 ETH0.001824510.19126409
Transfer212493692024-11-23 8:53:2349 days ago1732352003IN
Solidblock: SOLID Token
0 ETH0.0010146710.1467235
Transfer212378692024-11-21 18:22:5950 days ago1732213379IN
Solidblock: SOLID Token
0 ETH0.0024239524.23950375
Approve211079322024-11-03 15:12:4769 days ago1730646767IN
Solidblock: SOLID Token
0 ETH0.0003093812.70483982
Transfer209322082024-10-10 2:25:4793 days ago1728527147IN
Solidblock: SOLID Token
0 ETH0.000800658.00652455
Approve208955462024-10-04 23:47:4798 days ago1728085667IN
Solidblock: SOLID Token
0 ETH0.000059842.45749515
Transfer198372922024-05-10 4:36:59246 days ago1715315819IN
Solidblock: SOLID Token
0 ETH0.000528595.28590362
Approve192236282024-02-14 3:48:11332 days ago1707882491IN
Solidblock: SOLID Token
0 ETH0.0004641319.04055363
Approve191464602024-02-03 7:51:35343 days ago1706946695IN
Solidblock: SOLID Token
0 ETH0.0007558116.20658222
Approve190023582024-01-14 3:11:23363 days ago1705201883IN
Solidblock: SOLID Token
0 ETH0.0007540516.21075305
Approve187543922023-12-10 7:42:59398 days ago1702194179IN
Solidblock: SOLID Token
0 ETH0.0006869928.18324737
Approve187543902023-12-10 7:42:23398 days ago1702194143IN
Solidblock: SOLID Token
0 ETH0.0007458930.67508989
Approve186419442023-11-24 13:44:35414 days ago1700833475IN
Solidblock: SOLID Token
0 ETH0.0013819329.63238168
Approve186239402023-11-22 1:13:59416 days ago1700615639IN
Solidblock: SOLID Token
0 ETH0.0014442630.96891509
Transfer185744212023-11-15 2:49:23423 days ago1700016563IN
Solidblock: SOLID Token
0 ETH0.0031568331.56832488
Approve185279032023-11-08 14:42:23430 days ago1699454543IN
Solidblock: SOLID Token
0 ETH0.002019943.31210287
Approve184262172023-10-25 8:59:11444 days ago1698224351IN
Solidblock: SOLID Token
0 ETH0.0005231511.28452952
Approve184219822023-10-24 18:44:23444 days ago1698173063IN
Solidblock: SOLID Token
0 ETH0.0011425824.49998908
Approve184178802023-10-24 4:57:23445 days ago1698123443IN
Solidblock: SOLID Token
0 ETH0.0008714818.68694529
Approve184016462023-10-21 22:24:47447 days ago1697927087IN
Solidblock: SOLID Token
0 ETH0.000377688.09853579
Approve183732992023-10-17 23:13:59451 days ago1697584439IN
Solidblock: SOLID Token
0 ETH0.000159735.97447498
Approve183732892023-10-17 23:11:59451 days ago1697584319IN
Solidblock: SOLID Token
0 ETH0.000300396.44123431
Transfer183613442023-10-16 7:08:11453 days ago1697440091IN
Solidblock: SOLID Token
0 ETH0.000601726.01727674
Approve182206912023-09-26 14:57:23473 days ago1695740243IN
Solidblock: SOLID Token
0 ETH0.0007509116.10155308
Transfer182163052023-09-26 0:13:35473 days ago1695687215IN
Solidblock: SOLID Token
0 ETH0.00093339.33309574
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
178851312023-08-10 14:38:11520 days ago1691678291
Solidblock: SOLID Token
0.03 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SOLIDBLOCK

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-11
*/

//
//░██████╗░█████╗░██╗░░░░░██╗██████╗░██████╗░██╗░░░░░░█████╗░░█████╗░██╗░░██╗
//██╔════╝██╔══██╗██║░░░░░██║██╔══██╗██╔══██╗██║░░░░░██╔══██╗██╔══██╗██║░██╔╝
//╚█████╗░██║░░██║██║░░░░░██║██║░░██║██████╦╝██║░░░░░██║░░██║██║░░╚═╝█████═╝░
//░╚═══██╗██║░░██║██║░░░░░██║██║░░██║██╔══██╗██║░░░░░██║░░██║██║░░██╗██╔═██╗░
//██████╔╝╚█████╔╝███████╗██║██████╔╝██████╦╝███████╗╚█████╔╝╚█████╔╝██║░╚██╗
//╚═════╝░░╚════╝░╚══════╝╚═╝╚═════╝░╚═════╝░╚══════╝░╚════╝░░╚════╝░╚═╝░░╚═╝



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

interface IERC20 {
    function totalSupply() external view returns(uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer (address indexed from, address indexed to, uint value);
    event Approval (address indexed owner, address indexed spender, uint value);
}

interface IERC20Upgradeable {

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addTreasuryETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint treasury);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

}

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
        }
    }

    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
            _callOptionalReturn(token, approvalCall);
        }
    }

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
    }

    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
    }
}   

contract SOLIDBLOCK is IERC20, Ownable {

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
	mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isBot;
    mapping(address => bool) private _isPair;

    address[] private _excluded;
    
    bool private swapping;
    mapping(address => bool) private _operator;

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 18;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 200_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    
    uint256 public swapTokensAtAmount = 10_000 * 10 ** 18;
    uint256 public maxTxAmount = 50_000_000_000 * 10**_decimals;
    uint256 public maxWalletAmount = 1_000_000_000 * 10**_decimals;
    
    // Anti Dump //
    mapping (address => uint256) public _lastTrade;
    bool public coolDownEnabled = true;
    uint256 public coolDownTime = 30 seconds;

    address public treasuryAddress = 0x15564669B5E6737785B0b36875fC7668Fe4CAc01;
    address public developmentAddress = 0xF8449D6a454469732aD0c7f83d8a018d967BF588 ;
    address constant burnAddress = 0x000000000000000000000000000000000000dEaD;

    address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;

    string private constant _name = "SOLIDBLOCK";
    string private constant _symbol = "SOLID";

    // Black List //
    mapping (address => bool) private _isBlocked;

    // Trading
    uint256 private _launchStartTimestamp;
    uint256 private _launchBlockNumber;
    bool public isTradingEnabled;
    mapping (address => bool) private _isAllowedToTradeWhenDisabled;

    address public v1TokenAddress;
    
    struct Taxes {
      uint256 rfi;
      uint256 treasury;
      uint256 development;
      uint256 burn;
    }

    Taxes public taxes = Taxes(0,40,20,0);

    struct TotFeesPaidStruct {
        uint256 rfi;
        uint256 treasury;
        uint256 development;
        uint256 burn;
    }

    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rTreasury;
      uint256 rDevelopment;
      uint256 rBurn;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tTreasury;
      uint256 tDevelopment;
      uint256 tBurn;
    }
    
    struct splitETHStruct{
        uint256 treasury;
        uint256 development;
    }

    splitETHStruct private splitETH = splitETHStruct(40,10);

    struct ETHAmountStruct{
        uint256 treasury;
        uint256 development;
    }

    ETHAmountStruct public ETHAmount;

    event OperatorTransferred(address indexed previousOperator, address indexed newOperator);   
    event BlockedAccountChange(address indexed holder, bool indexed status);
    event FeesChanged();
    event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event TradingStatusChange(bool indexed newValue, bool indexed oldValue);
    event PresaleStatusChange(bool indexed newValue, bool indexed oldValue);

    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }

    modifier addressValidation(address _addr) {
        require(_addr != address(0), 'SOLIDBLOCK: Zero address');
        _;
    }

    modifier onlyOperatorOrOwner() {
        require(_operator[msg.sender] || owner() == msg.sender, "Caller is not an operator");
        //require(_operator == msg.sender || owner() == msg.sender, "operator: caller is not the operator or owner");
        _;
    }

    constructor () {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        
        addPair(pair);
    
        excludeFromReward(pair);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[treasuryAddress] = true;
        _isExcludedFromFee[burnAddress] = true;
        _isExcludedFromFee[developmentAddress] = true;

        _isExcludedFromMaxTransactionLimit[address(this)] = true;
		_isExcludedFromMaxTransactionLimit[owner()] = true;
        _isExcludedFromMaxTransactionLimit[_pair] = true;
        _isExcludedFromMaxTransactionLimit[address(_router)] = true;

		_isExcludedFromMaxWalletLimit[_pair] = true;
		_isExcludedFromMaxWalletLimit[address(_router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[burnAddress] = true;


        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");

        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length <= 200, "Invalid length");
        require(account != owner(), "Owner cannot be excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function isOperator(address operator) public view returns (bool) {
    return _operator[operator];
    }

    function _setOperator(address operator_, bool hasPermission) external onlyOwner {
    require(operator_ != address(0), "Invalid operator address");
    _operator[operator_] = hasPermission;
    }   


    function excludeFromFee(address account) public onlyOperatorOrOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOperatorOrOwner {
        _isExcludedFromFee[account] = false;
    }


    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner{
		require(_isExcludedFromMaxTransactionLimit[account] != excluded, "SOLIDBLOCK: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
	}

    function isExcludedFromMaxTransactionLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxTransactionLimit[account];
    }

	function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner{
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "SOLIDBLOCK: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
	}

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

    function setV1TokenAddress(address _v1TokenAddress) external onlyOwner {
        v1TokenAddress = _v1TokenAddress;
    }

    function migrate(address holder) external onlyOwner {
        require(v1TokenAddress != address(0), "V1 token address is not set");
        IERC20 v1Token = IERC20(v1TokenAddress);

        uint256 v1TokenBalance = v1Token.balanceOf(holder);
        require(v1TokenBalance > 0, "Holder has no V1 tokens");

        _transfer(_msgSender(), holder, v1TokenBalance);
    }

    function blockAccount(address account) external onlyOwner{
		require(!_isBlocked[account], "SOLIDBLOCK: Account is already blocked");
		_isBlocked[account] = true;
		emit BlockedAccountChange(account, true);
	}

	function unblockAccount(address account) external onlyOwner{
		require(_isBlocked[account], "SOLIDBLOCK: Account is not blcoked");
		_isBlocked[account] = false;
		emit BlockedAccountChange(account, false);
	}

    function activateTrading() external onlyOwner{
		isTradingEnabled = true;
        if (_launchStartTimestamp == 0) {
            _launchStartTimestamp = block.timestamp;
            _launchBlockNumber = block.number;
        }
		emit TradingStatusChange(true, false);
	}
	function deactivateTrading() external  onlyOwner{
		isTradingEnabled = false;
		emit TradingStatusChange(false, true);
	}
	function allowTradingWhenDisabled(address account, bool allowed)  external onlyOwner{
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}

    function addPair(address _pair) public onlyOwner {
        _isPair[_pair] = true;
    }

    function removePair(address _pair) public onlyOwner {
        _isPair[_pair] = false;
    }

    function isPair(address account) public view returns(bool){
        return _isPair[account];
    }

    function setTaxes(uint256 _rfi, uint256 _treasury, uint256 _development, uint256 __burn) public onlyOwner {
        taxes.rfi = _rfi;
        taxes.treasury = _treasury;
        taxes.development = _development;
        taxes.burn = __burn;
        emit FeesChanged();
    }

    function setSplitETH(uint256 _treasury, uint256 _development) public onlyOwner {
        splitETH.treasury = _treasury;
        splitETH.development = _development;
        emit FeesChanged();
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totFeesPaid.rfi += tRfi;
    }

    function _takeTreasury(uint256 rTreasury, uint256 tTreasury) private {
        totFeesPaid.treasury += tTreasury;
        if(_isExcluded[treasuryAddress]) _tOwned[treasuryAddress] += tTreasury;
        _rOwned[treasuryAddress] +=rTreasury;
    }
    
    function _takeDevelopment(uint256 rDevelopment, uint256 tDevelopment) private{
        totFeesPaid.development += tDevelopment;
        if(_isExcluded[developmentAddress]) _tOwned[developmentAddress] += tDevelopment;
        _rOwned[developmentAddress] += rDevelopment;
    }

    function _takeBurn(uint256 rBurn, uint256 tBurn) private {
        totFeesPaid.burn += tBurn;
        if(_isExcluded[developmentAddress])_tOwned[burnAddress] += tBurn;
        _rOwned[burnAddress] += rBurn;
    }

    function _getValues(uint256 tAmount, uint8 takeFee) private returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTreasury,to_return.rDevelopment, to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }


    function _getTValues(uint256 tAmount, uint8 takeFee) private returns (valuesFromGetValues memory s) {

        if(takeFee == 0) {
          s.tTransferAmount = tAmount;
          return s;
        } else if(takeFee == 1){
            s.tRfi = (tAmount*taxes.rfi)/1000;
            s.tTreasury = (tAmount*taxes.treasury)/1000;
            s.tDevelopment = tAmount*taxes.development/1000;
            s.tBurn = tAmount*taxes.burn/1000;
            ETHAmount.treasury += s.tTreasury*splitETH.treasury/taxes.treasury;
            ETHAmount.development += s.tTreasury*splitETH.development/taxes.treasury;
            s.tTransferAmount = tAmount-s.tRfi-s.tDevelopment-s.tTreasury-s.tBurn;
            return s;
        } else {
            s.tRfi = tAmount*taxes.rfi/1000;
            s.tBurn = tAmount*taxes.burn/1000;
            s.tTreasury = tAmount*splitETH.development/1000;
            ETHAmount.development += s.tTreasury;
            s.tTransferAmount = tAmount-s.tRfi-s.tTreasury-s.tBurn;
            return s;
        }
        
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, uint8 takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi,uint256 rTreasury,uint256 rDevelopment,uint256 rBurn) {
        rAmount = tAmount*currentRate;

        if(takeFee == 0) {
          return(rAmount, rAmount, 0,0,0,0);
        }else if(takeFee == 1){
            rRfi = s.tRfi*currentRate;
            rTreasury = s.tTreasury*currentRate;
            rDevelopment = s.tDevelopment*currentRate;
            rBurn = s.tBurn*currentRate;
            rTransferAmount =  rAmount-rRfi-rTreasury-rDevelopment-rBurn;
            return (rAmount, rTransferAmount, rRfi,rTreasury,rDevelopment,rBurn);
        }
        else{
            rRfi = s.tRfi*currentRate;
            rDevelopment = s.tDevelopment*currentRate;
            rBurn = s.tBurn*currentRate;
            rTransferAmount =  rAmount-rRfi-rTreasury-rDevelopment-rBurn;
            return (rAmount, rTransferAmount, rRfi,rTreasury,rDevelopment,rBurn);
        }

    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }

        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }


    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Zero amount");
        require(amount <= balanceOf(from),"Insufficient balance");
        require(!_isBot[from] && !_isBot[to], "You are a bot");

        if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
			require(isTradingEnabled, "SOLIDBLOCK: Trading is currently disabled.");
            require(!_isBlocked[to], "SOLIDBLOCK: Account is blocked");
			require(!_isBlocked[from], "SOLIDBLOCK: Account is blocked");
			if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
				require(amount <= maxTxAmount, "SOLIDBLOCK: Buy amount exceeds the maxTxBuyAmount.");
			}
			if (!_isExcludedFromMaxWalletLimit[to]) {
				require((balanceOf(to) + amount) <= maxWalletAmount, "SOLIDBLOCK: Expected wallet amount exceeds the maxWalletAmount.");

            }
		}

        if (coolDownEnabled) {
            uint256 timePassed = block.timestamp - _lastTrade[from];
            require(timePassed > coolDownTime, "You must wait coolDownTime");
        }
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && !swapping) {//check this !swapping
            if(_isPair[from] || _isPair[to]) {
                _tokenTransfer(from, to, amount, 1);
            } else {
                _tokenTransfer(from, to, amount, 2);
            }
        } else {
            _tokenTransfer(from, to, amount, 0);
        }

        _lastTrade[from] = block.timestamp;
        
        if(!swapping && from != pair && to != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            address[] memory path = new address[](3);
                path[0] = address(this);
                path[1] = router.WETH();
                path[2] = USDT;
            uint _amount = router.getAmountsOut(balanceOf(address(this)), path)[2];
            if(_amount >= swapTokensAtAmount) swapTokensForETH(balanceOf(address(this)));
        }
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, uint8 takeFee) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender] - tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rTreasury > 0 || s.tTreasury > 0){
            _takeTreasury(s.rTreasury, s.tTreasury);
            emit Transfer(sender, treasuryAddress, s.tTreasury);
        }
        if(s.rDevelopment > 0 || s.tDevelopment > 0){
            _takeDevelopment(s.rDevelopment, s.tDevelopment);
            emit Transfer(sender, developmentAddress, s.tDevelopment);
        }
        if(s.rBurn > 0 || s.tBurn > 0){
            _takeBurn(s.rBurn, s.tBurn);
            emit Transfer(sender, burnAddress, s.tBurn);
        }
        
        emit Transfer(sender, recipient, s.tTransferAmount);
        
    }

    function swapTokensForETH(uint256 tokenAmount) private lockTheSwap {
        // generate the uniswap pair path of token -> weth -> USDT
        address[] memory path = new address[](3);
            path[0] = address(this);
            path[1] = router.WETH();
            path[2] = USDT;

        _approve(address(this), address(router), tokenAmount);
        // make the swap
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        IERC20 usdt = IERC20(USDT);
        uint256 usdtBalance = usdt.balanceOf(address(this));

        usdt.approve(address(this), usdtBalance);

        uint256 usdtTreasuryAmount = (ETHAmount.treasury * usdtBalance) / tokenAmount;
        uint256 usdtDevelopmentAmount = (ETHAmount.development * usdtBalance) / tokenAmount;

        usdt.transfer(treasuryAddress, usdtTreasuryAmount);
        usdt.transfer(developmentAddress, usdtDevelopmentAmount);

        ETHAmount.treasury = 0;
        ETHAmount.development = 0;

        /*
        (bool success, ) = treasuryAddress.call{value: (ETHAmount.treasury * usdt.balanceOf(address(this)))/tokenAmount}("");
        require(success, 'ETH_TRANSFER_FAILED');
        ETHAmount.treasury = 0;

        (success, ) = developmentAddress.call{value: (ETHAmount.development * usdt.balanceOf(address(this)))/tokenAmount}("");
        require(success, 'ETH_TRANSFER_FAILED');
        ETHAmount.development = 0;
        */
    }

    function updateTreasuryWallet(address newWallet) external onlyOwner addressValidation(newWallet) {
        require(treasuryAddress != newWallet, 'SOLIDBLOCK: Wallet already set');
        treasuryAddress = newWallet;
        _isExcludedFromFee[treasuryAddress];
    }

    function updateDevelopmentWallet(address newWallet) external onlyOwner addressValidation(newWallet) {
        require(developmentAddress != newWallet, 'SOLIDBLOCK: Wallet already set');
        developmentAddress = newWallet;
        _isExcludedFromFee[developmentAddress];
    }

    function updateStableCoin(address _usdt) external onlyOwner addressValidation(_usdt) {
        require(USDT != _usdt, 'SOLIDBLOCK: Wallet already set');
        USDT = _usdt;
    }

    function updateMaxTxAmt(uint256 amount) external onlyOwner{
        require(amount >= 100);
        maxTxAmount = amount * 10**_decimals;
    }

    function updateMaxWalletAmt(uint256 amount) external onlyOwner{
        require(amount >= 100);
        maxWalletAmount = amount * 10**_decimals;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{
        require(amount > 0);
        swapTokensAtAmount = amount * 10**6;
    }

    function updateCoolDownSettings(bool _enabled, uint256 _timeInSeconds) external onlyOperatorOrOwner{
        coolDownEnabled = _enabled;
        coolDownTime = _timeInSeconds * 1 seconds;
    }

    function setAntibot(address account, bool state) external onlyOwner{
        require(_isBot[account] != state, 'SOLIDBLOCK: Value already set');
        _isBot[account] = state;
    }
    
    function bulkAntiBot(address[] memory accounts, bool state) external onlyOwner {
        require(accounts.length <= 100, "SOLIDBLOCK: Invalid");
        for(uint256 i = 0; i < accounts.length; i++){
            _isBot[accounts[i]] = state;
        }
    }
    
    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
        addPair(pair);
    }

    function updateRouterWithoutPair(address newRouter) external onlyOwner {
    require(newRouter != address(0), "Invalid router address");

    router = IRouter(newRouter);

    address newPair = IFactory(router.factory()).createPair(address(this), router.WETH());
    require(newPair != address(0), "Failed to create new pair");

    pair = newPair;
    addPair(pair);
    }
    
    function isBot(address account) public view returns(bool){
        return _isBot[account];
    }
    
    function airdropTokens(address[] memory recipients, uint256[] memory amounts) external onlyOwner {
        require(recipients.length == amounts.length,"Invalid size");
         address sender = msg.sender;

        for(uint256 i; i<recipients.length; i++){
            address recipient = recipients[i];
            uint256 rAmount = amounts[i]*_getRate();
            _rOwned[sender] = _rOwned[sender]- rAmount;
            _rOwned[recipient] = _rOwned[recipient] + rAmount;
            emit Transfer(sender, recipient, amounts[i]);
        }
    }

    //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        payable(owner()).transfer(weiAmount);
    }
    
    // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake)
    // Owner cannot transfer out catecoin from this smart contract
    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable {
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","type":"event"},{"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":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"PresaleStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ETHAmount","outputs":[{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"hasPermission","type":"bool"}],"name":"_setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"removePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"}],"name":"setSplitETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"__burn","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_v1TokenAddress","type":"address"}],"name":"setV1TokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"updateCoolDownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouterWithoutPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdt","type":"address"}],"name":"updateStableCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"v1TokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000bd6565b6200002390642e90edd00062000c97565b600f819055620000369060001962000cf1565b620000449060001962000cb9565b60105569021e19e0c9bab2400000601155620000636012600a62000bd6565b6200007490640ba43b740062000c97565b6012556012600a62000087919062000bd6565b6200009790633b9aca0062000c97565b6013556015805460ff19166001179055601e601655601780546001600160a01b03199081167315564669b5e6737785b0b36875fc7668fe4cac011790915560188054821673f8449d6a454469732ad0c7f83d8a018d967bf5881790556019805490911673dac17f958d2ee523a2206206994597c13d831ec7179055604080516080810182526000808252602860208084018290526014848601819052606090940183905282815560218290556022939093556023919091558251808401909352808352600a9290910182905280556029553480156200017557600080fd5b506200018133620005e0565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d657600080fd5b505afa158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000211919062000b4d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025a57600080fd5b505afa1580156200026f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000295919062000b4d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002de57600080fd5b505af1158015620002f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000319919062000b4d565b600d80546001600160a01b038086166001600160a01b031992831617909255600e80549284169290911682179055909150620003559062000630565b600e546200036c906001600160a01b0316620006a3565b60105460016000620003866000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000620003c0620008c260201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252600485528382208054871660019081179091556017548416835284832080548816821790557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054881682179055601854909316825283822080548716841790558152600593849052918220805490941681179093556200047b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821680825260058552838220805487166001908117909155928816808352848320805488168517905590825260069485905283822080548716841790558152828120805486168317905530815291822080549094168117909355620005176000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052600690527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549091166001179055620005886000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051620005d091815260200190565b60405180910390a3505062000d34565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200067f5760405162461bcd60e51b81526020600482018190526024820152600080516020620057fe83398151915260448201526064015b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314620006ee5760405162461bcd60e51b81526020600482018190526024820152600080516020620057fe833981519152604482015260640162000676565b6001600160a01b03811660009081526007602052604090205460ff1615620007595760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000676565b600a5460c810156200079f5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015260640162000676565b6000546001600160a01b0382811691161415620007ff5760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c756465640000000000000000604482015260640162000676565b6001600160a01b038116600090815260016020526040902054156200085c576001600160a01b0381166000908152600160205260409020546200084290620008d1565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031690565b60006010548211156200093a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000676565b6000620009466200095b565b905062000954818462000b76565b9392505050565b600080806200096962000981565b90925090506200097a818362000b76565b9250505090565b601054600f546000918291825b600a5481101562000b19578260016000600a8481548110620009c057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000a3b57508160026000600a848154811062000a1457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a5257601054600f54945094505050509091565b60016000600a838154811062000a7857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000aa9908462000cb9565b925060026000600a838154811062000ad157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000b02908362000cb9565b91508062000b108162000cd3565b9150506200098e565b50600f5460105462000b2c919062000b76565b82101562000b4457601054600f549350935050509091565b90939092509050565b60006020828403121562000b5f578081fd5b81516001600160a01b038116811462000954578182fd5b60008262000b885762000b8862000d1e565b500490565b600181815b8085111562000bce57816000190482111562000bb25762000bb262000d08565b8085161562000bc057918102915b93841c939080029062000b92565b509250929050565b60006200095460ff84168360008262000bf25750600162000c91565b8162000c015750600062000c91565b816001811462000c1a576002811462000c255762000c45565b600191505062000c91565b60ff84111562000c395762000c3962000d08565b50506001821b62000c91565b5060208310610133831016604e8410600b841016171562000c6a575081810a62000c91565b62000c76838362000b8d565b806000190482111562000c8d5762000c8d62000d08565b0290505b92915050565b600081600019048311821515161562000cb45762000cb462000d08565b500290565b60008282101562000cce5762000cce62000d08565b500390565b600060001982141562000cea5762000cea62000d08565b5060010190565b60008262000d035762000d0362000d1e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b614aba8062000d446000396000f3fe6080604052600436106104095760003560e01c806388f8202011610213578063c2b7bbb611610123578063e0baeb29116100ab578063ea2f0b371161007a578063ea2f0b3714610d50578063ee36e35914610d70578063f023f57314610d8a578063f2fde38b14610daa578063f887ea4014610dca57600080fd5b8063e0baeb2914610cc1578063e116554514610ce1578063e2f4560514610d01578063e5e31b1314610d1757600080fd5b8063d257b34f116100f2578063d257b34f14610c05578063d2ce0db214610c25578063d322157614610c3b578063dd62ed3e14610c5b578063e006eadf14610ca157600080fd5b8063c2b7bbb614610b85578063c54e44eb14610ba5578063c5f956af14610bc5578063ce5494bb14610be557600080fd5b8063a457c2d7116101a6578063a9059cbb11610175578063a9059cbb14610ad6578063aa4bde2814610af6578063af6c9c1d14610b0c578063b31470a414610b2c578063b6d5f14414610b4c57600080fd5b8063a457c2d714610a30578063a87859f614610a50578063a8a69b9d14610a7d578063a8aa1b3114610ab657600080fd5b806395d89b41116101e257806395d89b411461099f5780639ba5e4d5146109cd5780639e252f00146109f0578063a12a7d6114610a1057600080fd5b806388f82020146109125780638c0ae3df1461094b5780638c0b5e221461096b5780638da5cb5b1461098157600080fd5b80634d78fdc611610319578063706f6937116102a1578063728f8eea11610270578063728f8eea1461084f578063781edb3c146108925780637c0a893d146108b2578063809d458d146108d2578063880bcbc1146108f257600080fd5b8063706f6937146107ca57806370a08231146107ea578063715018a61461080a5780637286ec321461081f57600080fd5b80635ab8fa56116102e85780635ab8fa56146106f9578063638b1b1414610731578063657f644b1461075157806365b36ce2146107715780636d70f7ae1461079157600080fd5b80634d78fdc6146106605780634e2b57801461068057806352390c02146106a05780635342acb4146106c057600080fd5b80632d8381191161039c5780633685d4191161036b5780633685d419146105a757806339509351146105c75780633bbac579146105e757806340b28c2f14610620578063437823ec1461064057600080fd5b80632d838119146105365780632e092fe814610556578063313ce5671461057657806334cf1fea1461059257600080fd5b80630bd05b69116103d85780630bd05b69146104c25780630d65df9b146104d757806318160ddd146104f757806323b872dd1461051657600080fd5b8063064a59d014610415578063068b391b1461044457806306fdde0314610466578063095ea7b3146104a257600080fd5b3661041057005b600080fd5b34801561042157600080fd5b50601d5461042f9060ff1681565b60405190151581526020015b60405180910390f35b34801561045057600080fd5b5061046461045f3660046142cf565b610dea565b005b34801561047257600080fd5b5060408051808201909152600a815269534f4c4944424c4f434b60b01b60208201525b60405161043b9190614669565b3480156104ae57600080fd5b5061042f6104bd3660046143ac565b610e3f565b3480156104ce57600080fd5b50610464610e56565b3480156104e357600080fd5b506104646104f236600461433f565b610ecd565b34801561050357600080fd5b50600f545b60405190815260200161043b565b34801561052257600080fd5b5061042f61053136600461433f565b610f7f565b34801561054257600080fd5b506105086105513660046145a4565b61102e565b34801561056257600080fd5b506104646105713660046145a4565b6110b2565b34801561058257600080fd5b506040516012815260200161043b565b34801561059e57600080fd5b50610464611106565b3480156105b357600080fd5b506104646105c23660046142cf565b61116a565b3480156105d357600080fd5b5061042f6105e23660046143ac565b611359565b3480156105f357600080fd5b5061042f6106023660046142cf565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561062c57600080fd5b5061046461063b366004614307565b611390565b34801561064c57600080fd5b5061046461065b3660046142cf565b6113f1565b34801561066c57600080fd5b5061046461067b3660046142cf565b611468565b34801561068c57600080fd5b5061046461069b3660046145d4565b611552565b3480156106ac57600080fd5b506104646106bb3660046142cf565b6115b3565b3480156106cc57600080fd5b5061042f6106db3660046142cf565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070557600080fd5b50601f54610719906001600160a01b031681565b6040516001600160a01b03909116815260200161043b565b34801561073d57600080fd5b50601854610719906001600160a01b031681565b34801561075d57600080fd5b5061046461076c3660046145a4565b6117a8565b34801561077d57600080fd5b5061046461078c36600461437f565b6117fc565b34801561079d57600080fd5b5061042f6107ac3660046142cf565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156107d657600080fd5b506104646107e53660046143d7565b6118a7565b3480156107f657600080fd5b506105086108053660046142cf565b611a64565b34801561081657600080fd5b50610464611ac3565b34801561082b57600080fd5b50602a54602b5461083a919082565b6040805192835260208301919091520161043b565b34801561085b57600080fd5b506020546021546022546023546108729392919084565b60408051948552602085019390935291830152606082015260800161043b565b34801561089e57600080fd5b506104646108ad36600461437f565b611af9565b3480156108be57600080fd5b506104646108cd3660046142cf565b611b8d565b3480156108de57600080fd5b506104646108ed3660046142cf565b611c81565b3480156108fe57600080fd5b5061046461090d36600461437f565b611d2a565b34801561091e57600080fd5b5061042f61092d3660046142cf565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095757600080fd5b50610464610966366004614587565b611dbe565b34801561097757600080fd5b5061050860125481565b34801561098d57600080fd5b506000546001600160a01b0316610719565b3480156109ab57600080fd5b5060408051808201909152600581526414d3d3125160da1b6020820152610495565b3480156109d957600080fd5b506024546025546026546027546108729392919084565b3480156109fc57600080fd5b50610464610a0b3660046145a4565b611e31565b348015610a1c57600080fd5b50610464610a2b3660046145f5565b611ee4565b348015610a3c57600080fd5b5061042f610a4b3660046143ac565b611f51565b348015610a5c57600080fd5b50610508610a6b3660046142cf565b60146020526000908152604090205481565b348015610a8957600080fd5b5061042f610a983660046142cf565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610ac257600080fd5b50600e54610719906001600160a01b031681565b348015610ae257600080fd5b5061042f610af13660046143ac565b611fec565b348015610b0257600080fd5b5061050860135481565b348015610b1857600080fd5b50610464610b273660046142cf565b611ff9565b348015610b3857600080fd5b50610464610b47366004614493565b612044565b348015610b5857600080fd5b5061042f610b673660046142cf565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b9157600080fd5b50610464610ba03660046142cf565b612130565b348015610bb157600080fd5b50601954610719906001600160a01b031681565b348015610bd157600080fd5b50601754610719906001600160a01b031681565b348015610bf157600080fd5b50610464610c003660046142cf565b61217e565b348015610c1157600080fd5b50610464610c203660046145a4565b6122df565b348015610c3157600080fd5b5061050860165481565b348015610c4757600080fd5b50610464610c5636600461437f565b612329565b348015610c6757600080fd5b50610508610c76366004614307565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cad57600080fd5b50610464610cbc3660046142cf565b6123b2565b348015610ccd57600080fd5b50610464610cdc3660046142cf565b61264e565b348015610ced57600080fd5b50610464610cfc36600461437f565b6126f0565b348015610d0d57600080fd5b5061050860115481565b348015610d2357600080fd5b5061042f610d323660046142cf565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610d5c57600080fd5b50610464610d6b3660046142cf565b6127b4565b348015610d7c57600080fd5b5060155461042f9060ff1681565b348015610d9657600080fd5b50610464610da53660046142cf565b612828565b348015610db657600080fd5b50610464610dc53660046142cf565b6128d1565b348015610dd657600080fd5b50600d54610719906001600160a01b031681565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b8152600401610e14906146f3565b60405180910390fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4c33848461296c565b5060015b92915050565b6000546001600160a01b03163314610e805760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff19166001179055601b54610e9d5742601b5543601c555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610ef75760405162461bcd60e51b8152600401610e14906146f3565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f79919061456b565b50505050565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156110045760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e14565b61100f858585612a90565b611023853361101e86856149e3565b61296c565b506001949350505050565b60006010548211156110955760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e14565b600061109f613345565b90506110ab81846148b6565b9392505050565b6000546001600160a01b031633146110dc5760405162461bcd60e51b8152600401610e14906146f3565b60648110156110ea57600080fd5b6110f66012600a614919565b61110090826149c4565b60125550565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b6000546001600160a01b031633146111945760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff166111fc5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610e14565b60005b600a5481101561135557816001600160a01b0316600a828154811061123457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561134357600a805461125f906001906149e3565b8154811061127d57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b0390921691839081106112b757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff19169055600a80548061131d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061134d816149fa565b9150506111ff565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610e4c91859061101e90869061489e565b6000546001600160a01b031633146113ba5760405162461bcd60e51b8152600401610e14906146f3565b600d80546001600160a01b038085166001600160a01b031992831617909255600e8054928416929091168217905561135590612130565b336000908152600c602052604090205460ff168061142857503361141d6000546001600160a01b031690565b6001600160a01b0316145b6114445760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146114925760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff166115055760405162461bcd60e51b815260206004820152602260248201527f534f4c4944424c4f434b3a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b0316331461157c5760405162461bcd60e51b8152600401610e14906146f3565b602882905560298190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146115dd5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff16156116465760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e14565b600a5460c8101561168a5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610e14565b6000546001600160a01b03828116911614156116e85760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610e14565b6001600160a01b03811660009081526001602052604090205415611742576001600160a01b0381166000908152600160205260409020546117289061102e565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146117d25760405162461bcd60e51b8152600401610e14906146f3565b60648110156117e057600080fd5b6117ec6012600a614919565b6117f690826149c4565b60135550565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821661187c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f70657261746f72206164647265737300000000000000006044820152606401610e14565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118d15760405162461bcd60e51b8152600401610e14906146f3565b80518251146119115760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610e14565b3360005b8351811015610f7957600084828151811061194057634e487b7160e01b600052603260045260246000fd5b602002602001015190506000611954613345565b85848151811061197457634e487b7160e01b600052603260045260246000fd5b602002602001015161198691906149c4565b6001600160a01b0385166000908152600160205260409020549091506119ad9082906149e3565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546119dd90829061489e565b6001600160a01b03808416600081815260016020526040902092909255865190861690600080516020614a6583398151915290889087908110611a3057634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611a4791815260200190565b60405180910390a350508080611a5c906149fa565b915050611915565b6001600160a01b03811660009081526007602052604081205460ff1615611aa157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e509061102e565b6000546001600160a01b03163314611aed5760405162461bcd60e51b8152600401610e14906146f3565b611af76000613368565b565b6000546001600160a01b03163314611b235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611b625760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bb75760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff1615611c2f5760405162461bcd60e51b815260206004820152602660248201527f534f4c4944424c4f434b3a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b038116611cd25760405162461bcd60e51b8152600401610e149061475f565b6017546001600160a01b0383811691161415611d005760405162461bcd60e51b8152600401610e14906146bc565b50601780546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b03163314611d545760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526005602052604090205460ff1615158115151415611d935760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff1680611df5575033611dea6000546001600160a01b031690565b6001600160a01b0316145b611e115760405162461bcd60e51b8152600401610e1490614728565b6015805460ff1916831515179055611e2a8160016149c4565b6016555050565b6000546001600160a01b03163314611e5b5760405162461bcd60e51b8152600401610e14906146f3565b80471015611eab5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610e14565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015611355573d6000803e3d6000fd5b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610e14906146f3565b60208490556021839055602282905560238190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611fd35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e14565b611fe2338561101e86856149e3565b5060019392505050565b6000610e4c338484612a90565b6000546001600160a01b031633146120235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b0316331461206e5760405162461bcd60e51b8152600401610e14906146f3565b6064825111156120b65760405162461bcd60e51b815260206004820152601360248201527214d3d31251109313d0d2ce88125b9d985b1a59606a1b6044820152606401610e14565b60005b825181101561212b5781600860008584815181106120e757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612123816149fa565b9150506120b9565b505050565b6000546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146121a85760405162461bcd60e51b8152600401610e14906146f3565b601f546001600160a01b03166122005760405162461bcd60e51b815260206004820152601b60248201527f563120746f6b656e2061646472657373206973206e6f742073657400000000006044820152606401610e14565b601f546040516370a0823160e01b81526001600160a01b0383811660048301529091169060009082906370a082319060240160206040518083038186803b15801561224a57600080fd5b505afa15801561225e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228291906145bc565b9050600081116122d45760405162461bcd60e51b815260206004820152601760248201527f486f6c64657220686173206e6f20563120746f6b656e730000000000000000006044820152606401610e14565b61212b338483612a90565b6000546001600160a01b031633146123095760405162461bcd60e51b8152600401610e14906146f3565b6000811161231657600080fd5b61232381620f42406149c4565b60115550565b6000546001600160a01b031633146123535760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910160405180910390a25050565b6000546001600160a01b031633146123dc5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811661242b5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726f75746572206164647265737360501b6044820152606401610e14565b600d80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ba91906142eb565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561251757600080fd5b505afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f91906142eb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf91906142eb565b90506001600160a01b0381166126275760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20637265617465206e65772070616972000000000000006044820152606401610e14565b600e80546001600160a01b0319166001600160a01b03831690811790915561135590612130565b6000546001600160a01b031633146126785760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b03811661269f5760405162461bcd60e51b8152600401610e149061475f565b6019546001600160a01b03838116911614156126cd5760405162461bcd60e51b8152600401610e14906146bc565b50601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461271a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156127895760405162461bcd60e51b815260206004820152601d60248201527f534f4c4944424c4f434b3a2056616c756520616c7265616479207365740000006044820152606401610e14565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff16806127eb5750336127e06000546001600160a01b031690565b6001600160a01b0316145b6128075760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146128525760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b0381166128795760405162461bcd60e51b8152600401610e149061475f565b6018546001600160a01b03838116911614156128a75760405162461bcd60e51b8152600401610e14906146bc565b50601880546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146128fb5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166129605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e14565b61296981613368565b50565b6001600160a01b0383166129ce5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e14565b6001600160a01b038216612a2f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e14565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612af45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e14565b6001600160a01b038216612b565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e14565b60008111612b945760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610e14565b612b9d83611a64565b811115612be35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610e14565b6001600160a01b03831660009081526008602052604090205460ff16158015612c2557506001600160a01b03821660009081526008602052604090205460ff16155b612c615760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610e14565b6001600160a01b0383166000908152601e602052604090205460ff16158015612ca357506001600160a01b0382166000908152601e602052604090205460ff16155b15612f3e57601d5460ff16612d0d5760405162461bcd60e51b815260206004820152602a60248201527f534f4c4944424c4f434b3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610e14565b6001600160a01b0382166000908152601a602052604090205460ff1615612d765760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b0383166000908152601a602052604090205460ff1615612ddf5760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b03821660009081526005602052604090205460ff16158015612e2157506001600160a01b03831660009081526005602052604090205460ff16155b15612e9357601254811115612e935760405162461bcd60e51b815260206004820152603260248201527f534f4c4944424c4f434b3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610e14565b6001600160a01b03821660009081526006602052604090205460ff16612f3e5760135481612ec084611a64565b612eca919061489e565b1115612f3e5760405162461bcd60e51b815260206004820152603f60248201527f534f4c4944424c4f434b3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610e14565b60155460ff1615612fc1576001600160a01b038316600090815260146020526040812054612f6c90426149e3565b90506016548111612fbf5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610e14565b505b6001600160a01b03831660009081526004602052604090205460ff1615801561300357506001600160a01b03821660009081526004602052604090205460ff16155b80156130125750600b5460ff16155b1561307a576001600160a01b03831660009081526009602052604090205460ff168061305657506001600160a01b03821660009081526009602052604090205460ff165b1561306d5761306883838360016133b8565b613087565b61306883838360026133b8565b61308783838360006133b8565b6001600160a01b0383166000908152601460205260409020429055600b5460ff161580156130c35750600e546001600160a01b03848116911614155b80156130dd5750600e546001600160a01b03838116911614155b801561310257506001600160a01b03831660009081526004602052604090205460ff16155b801561312757506001600160a01b03821660009081526004602052604090205460ff16155b1561212b576040805160038082526080820190925260009160208201606080368337019050509050308160008151811061317157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156131c557600080fd5b505afa1580156131d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fd91906142eb565b8160018151811061321e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260195482519116908290600290811061325d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546000911663d06ca61f61328830611a64565b846040518363ffffffff1660e01b81526004016132a69291906147ec565b60006040518083038186803b1580156132be57600080fd5b505afa1580156132d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132fa91908101906144d8565b60028151811061331a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050601154811061333e5761333e61333930611a64565b6136bb565b5050505050565b6000806000613352613af8565b909250905061336181836148b6565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006133c48383613cb3565b6001600160a01b03861660009081526007602052604090205490915060ff1615613426576001600160a01b03851660009081526002602052604090205461340c9084906149e3565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526007602052604090205460ff16156134895760c08101516001600160a01b03851660009081526002602052604090205461346f919061489e565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546134ae91906149e3565b6001600160a01b03808716600090815260016020908152604080832094909455840151918716815291909120546134e5919061489e565b6001600160a01b0385166000908152600160205260409081902091909155810151151580613517575060008160e00151115b1561352e5761352e81604001518260e00151613cfb565b60008160600151118061354657506000816101000151115b156135985761355e8160600151826101000151613d30565b6017546101008201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b6000816080015111806135b057506000816101200151115b15613602576135c88160800151826101200151613dc7565b6018546101208201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b60008160a00151118061361a57506000816101400151115b15613675576136328160a00151826101400151613e5e565b61dead6001600160a01b0316856001600160a01b0316600080516020614a6583398151915283610140015160405161366c91815260200190565b60405180910390a35b836001600160a01b0316856001600160a01b0316600080516020614a658339815191528360c001516040516136ac91815260200190565b60405180910390a35050505050565b600b805460ff191660011790556040805160038082526080820190925260009160208201606080368337019050509050308160008151811061370d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561376157600080fd5b505afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906142eb565b816001815181106137ba57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526019548251911690829060029081106137f957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5461381f913091168461296c565b600d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061385890859060009086903090429060040161480d565b600060405180830381600087803b15801561387257600080fd5b505af1158015613886573d6000803e3d6000fd5b50506019546040516370a0823160e01b81523060048201526001600160a01b0390911692506000915082906370a082319060240160206040518083038186803b1580156138d257600080fd5b505afa1580156138e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390a91906145bc565b60405163095ea7b360e01b8152306004820152602481018290529091506001600160a01b0383169063095ea7b390604401602060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398d919061456b565b5060008482602a600001546139a291906149c4565b6139ac91906148b6565b905060008583602a600101546139c291906149c4565b6139cc91906148b6565b60175460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291925085169063a9059cbb90604401602060405180830381600087803b158015613a1c57600080fd5b505af1158015613a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a54919061456b565b5060185460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529085169063a9059cbb90604401602060405180830381600087803b158015613aa357600080fd5b505af1158015613ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adb919061456b565b50506000602a819055602b555050600b805460ff19169055505050565b601054600f546000918291825b600a54811015613c82578260016000600a8481548110613b3557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613bae57508160026000600a8481548110613b8757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bc457601054600f54945094505050509091565b60016000600a8381548110613be957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c1890846149e3565b925060026000600a8381548110613c3f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c6e90836149e3565b915080613c7a816149fa565b915050613b05565b50600f54601054613c9391906148b6565b821015613caa57601054600f549350935050509091565b90939092509050565b613cbb6141fd565b613cc58383613f1d565b9050613cda818484613cd5613345565b614115565b60a08701526080860152606085015260408401526020830152815292915050565b8160106000828254613d0d91906149e3565b909155505060248054829190600090613d2790849061489e565b90915550505050565b8060246001016000828254613d45919061489e565b90915550506017546001600160a01b031660009081526007602052604090205460ff1615613d9d576017546001600160a01b031660009081526002602052604081208054839290613d9790849061489e565b90915550505b6017546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246002016000828254613ddc919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613e34576018546001600160a01b031660009081526002602052604081208054839290613e2e90849061489e565b90915550505b6018546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246003016000828254613e73919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613edf5761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290613ed990849061489e565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290613d2790849061489e565b613f256141fd565b60ff8216613f395760c08101839052610e50565b8160ff166001141561407f576020546103e890613f5690856149c4565b613f6091906148b6565b60e08201526021546103e890613f7690856149c4565b613f8091906148b6565b6101008201526022546103e890613f9790856149c4565b613fa191906148b6565b6101208201526023546103e890613fb890856149c4565b613fc291906148b6565b610140820152602154602854610100830151613fde91906149c4565b613fe891906148b6565b602a8054600090613ffa90849061489e565b909155505060215460295461010083015161401591906149c4565b61401f91906148b6565b602b805460009061403190849061489e565b909155505061014081015161010082015161012083015160e084015161405790876149e3565b61406191906149e3565b61406b91906149e3565b61407591906149e3565b60c0820152610e50565b6020546103e89061409090856149c4565b61409a91906148b6565b60e08201526023546103e8906140b090856149c4565b6140ba91906148b6565b6101408201526029546103e8906140d190856149c4565b6140db91906148b6565b6101008201819052602b80546000906140f590849061489e565b909155505061014081015161010082015160e083015161406190866149e3565b60008080808080614126878a6149c4565b955060ff8816614144575084935060009250829150819050806141f0565b8760ff16600114156141cd57868a60e0015161416091906149c4565b9350868a610100015161417391906149c4565b9250868a610120015161418691906149c4565b9150868a610140015161419991906149c4565b90508082846141a8878a6149e3565b6141b291906149e3565b6141bc91906149e3565b6141c691906149e3565b94506141f0565b868a60e001516141dd91906149c4565b9350868a610120015161418691906149c4565b9499939850945094509450565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f830112614267578081fd5b8135602061427c6142778361487a565b614849565b80838252828201915082860187848660051b890101111561429b578586fd5b855b858110156142c25781356142b081614a41565b8452928401929084019060010161429d565b5090979650505050505050565b6000602082840312156142e0578081fd5b81356110ab81614a41565b6000602082840312156142fc578081fd5b81516110ab81614a41565b60008060408385031215614319578081fd5b823561432481614a41565b9150602083013561433481614a41565b809150509250929050565b600080600060608486031215614353578081fd5b833561435e81614a41565b9250602084013561436e81614a41565b929592945050506040919091013590565b60008060408385031215614391578182fd5b823561439c81614a41565b9150602083013561433481614a56565b600080604083850312156143be578182fd5b82356143c981614a41565b946020939093013593505050565b600080604083850312156143e9578182fd5b823567ffffffffffffffff80821115614400578384fd5b61440c86838701614257565b9350602091508185013581811115614422578384fd5b85019050601f81018613614434578283fd5b80356144426142778261487a565b80828252848201915084840189868560051b8701011115614461578687fd5b8694505b83851015614483578035835260019490940193918501918501614465565b5080955050505050509250929050565b600080604083850312156144a5578182fd5b823567ffffffffffffffff8111156144bb578283fd5b6144c785828601614257565b925050602083013561433481614a56565b600060208083850312156144ea578182fd5b825167ffffffffffffffff811115614500578283fd5b8301601f81018513614510578283fd5b805161451e6142778261487a565b80828252848201915084840188868560051b870101111561453d578687fd5b8694505b8385101561455f578051835260019490940193918501918501614541565b50979650505050505050565b60006020828403121561457c578081fd5b81516110ab81614a56565b60008060408385031215614599578182fd5b82356143c981614a56565b6000602082840312156145b5578081fd5b5035919050565b6000602082840312156145cd578081fd5b5051919050565b600080604083850312156145e6578182fd5b50508035926020909101359150565b6000806000806080858703121561460a578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b8381101561465e5781516001600160a01b031687529582019590820190600101614639565b509495945050505050565b6000602080835283518082850152825b8181101561469557858101830151858201604001528201614679565b818111156146a65783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f534f4c4944424c4f434b3a2057616c6c657420616c7265616479207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f43616c6c6572206973206e6f7420616e206f70657261746f7200000000000000604082015260600190565b60208082526018908201527f534f4c4944424c4f434b3a205a65726f20616464726573730000000000000000604082015260600190565b60208082526036908201527f534f4c4944424c4f434b3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b8281526040602082015260006148056040830184614626565b949350505050565b85815284602082015260a06040820152600061482c60a0830186614626565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561487257614872614a2b565b604052919050565b600067ffffffffffffffff82111561489457614894614a2b565b5060051b60200190565b600082198211156148b1576148b1614a15565b500190565b6000826148d157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156149115781600019048211156148f7576148f7614a15565b8085161561490457918102915b93841c93908002906148db565b509250929050565b60006110ab60ff84168360008261493257506001610e50565b8161493f57506000610e50565b8160018114614955576002811461495f5761497b565b6001915050610e50565b60ff84111561497057614970614a15565b50506001821b610e50565b5060208310610133831016604e8410600b841016171561499e575081810a610e50565b6149a883836148d6565b80600019048211156149bc576149bc614a15565b029392505050565b60008160001904831182151516156149de576149de614a15565b500290565b6000828210156149f5576149f5614a15565b500390565b6000600019821415614a0e57614a0e614a15565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461296957600080fd5b801515811461296957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c064b03aab7fdbcbac88b04ff6bfffa542218e5f5cab2bf03fecfac640609fa264736f6c634300080400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106104095760003560e01c806388f8202011610213578063c2b7bbb611610123578063e0baeb29116100ab578063ea2f0b371161007a578063ea2f0b3714610d50578063ee36e35914610d70578063f023f57314610d8a578063f2fde38b14610daa578063f887ea4014610dca57600080fd5b8063e0baeb2914610cc1578063e116554514610ce1578063e2f4560514610d01578063e5e31b1314610d1757600080fd5b8063d257b34f116100f2578063d257b34f14610c05578063d2ce0db214610c25578063d322157614610c3b578063dd62ed3e14610c5b578063e006eadf14610ca157600080fd5b8063c2b7bbb614610b85578063c54e44eb14610ba5578063c5f956af14610bc5578063ce5494bb14610be557600080fd5b8063a457c2d7116101a6578063a9059cbb11610175578063a9059cbb14610ad6578063aa4bde2814610af6578063af6c9c1d14610b0c578063b31470a414610b2c578063b6d5f14414610b4c57600080fd5b8063a457c2d714610a30578063a87859f614610a50578063a8a69b9d14610a7d578063a8aa1b3114610ab657600080fd5b806395d89b41116101e257806395d89b411461099f5780639ba5e4d5146109cd5780639e252f00146109f0578063a12a7d6114610a1057600080fd5b806388f82020146109125780638c0ae3df1461094b5780638c0b5e221461096b5780638da5cb5b1461098157600080fd5b80634d78fdc611610319578063706f6937116102a1578063728f8eea11610270578063728f8eea1461084f578063781edb3c146108925780637c0a893d146108b2578063809d458d146108d2578063880bcbc1146108f257600080fd5b8063706f6937146107ca57806370a08231146107ea578063715018a61461080a5780637286ec321461081f57600080fd5b80635ab8fa56116102e85780635ab8fa56146106f9578063638b1b1414610731578063657f644b1461075157806365b36ce2146107715780636d70f7ae1461079157600080fd5b80634d78fdc6146106605780634e2b57801461068057806352390c02146106a05780635342acb4146106c057600080fd5b80632d8381191161039c5780633685d4191161036b5780633685d419146105a757806339509351146105c75780633bbac579146105e757806340b28c2f14610620578063437823ec1461064057600080fd5b80632d838119146105365780632e092fe814610556578063313ce5671461057657806334cf1fea1461059257600080fd5b80630bd05b69116103d85780630bd05b69146104c25780630d65df9b146104d757806318160ddd146104f757806323b872dd1461051657600080fd5b8063064a59d014610415578063068b391b1461044457806306fdde0314610466578063095ea7b3146104a257600080fd5b3661041057005b600080fd5b34801561042157600080fd5b50601d5461042f9060ff1681565b60405190151581526020015b60405180910390f35b34801561045057600080fd5b5061046461045f3660046142cf565b610dea565b005b34801561047257600080fd5b5060408051808201909152600a815269534f4c4944424c4f434b60b01b60208201525b60405161043b9190614669565b3480156104ae57600080fd5b5061042f6104bd3660046143ac565b610e3f565b3480156104ce57600080fd5b50610464610e56565b3480156104e357600080fd5b506104646104f236600461433f565b610ecd565b34801561050357600080fd5b50600f545b60405190815260200161043b565b34801561052257600080fd5b5061042f61053136600461433f565b610f7f565b34801561054257600080fd5b506105086105513660046145a4565b61102e565b34801561056257600080fd5b506104646105713660046145a4565b6110b2565b34801561058257600080fd5b506040516012815260200161043b565b34801561059e57600080fd5b50610464611106565b3480156105b357600080fd5b506104646105c23660046142cf565b61116a565b3480156105d357600080fd5b5061042f6105e23660046143ac565b611359565b3480156105f357600080fd5b5061042f6106023660046142cf565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561062c57600080fd5b5061046461063b366004614307565b611390565b34801561064c57600080fd5b5061046461065b3660046142cf565b6113f1565b34801561066c57600080fd5b5061046461067b3660046142cf565b611468565b34801561068c57600080fd5b5061046461069b3660046145d4565b611552565b3480156106ac57600080fd5b506104646106bb3660046142cf565b6115b3565b3480156106cc57600080fd5b5061042f6106db3660046142cf565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070557600080fd5b50601f54610719906001600160a01b031681565b6040516001600160a01b03909116815260200161043b565b34801561073d57600080fd5b50601854610719906001600160a01b031681565b34801561075d57600080fd5b5061046461076c3660046145a4565b6117a8565b34801561077d57600080fd5b5061046461078c36600461437f565b6117fc565b34801561079d57600080fd5b5061042f6107ac3660046142cf565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156107d657600080fd5b506104646107e53660046143d7565b6118a7565b3480156107f657600080fd5b506105086108053660046142cf565b611a64565b34801561081657600080fd5b50610464611ac3565b34801561082b57600080fd5b50602a54602b5461083a919082565b6040805192835260208301919091520161043b565b34801561085b57600080fd5b506020546021546022546023546108729392919084565b60408051948552602085019390935291830152606082015260800161043b565b34801561089e57600080fd5b506104646108ad36600461437f565b611af9565b3480156108be57600080fd5b506104646108cd3660046142cf565b611b8d565b3480156108de57600080fd5b506104646108ed3660046142cf565b611c81565b3480156108fe57600080fd5b5061046461090d36600461437f565b611d2a565b34801561091e57600080fd5b5061042f61092d3660046142cf565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095757600080fd5b50610464610966366004614587565b611dbe565b34801561097757600080fd5b5061050860125481565b34801561098d57600080fd5b506000546001600160a01b0316610719565b3480156109ab57600080fd5b5060408051808201909152600581526414d3d3125160da1b6020820152610495565b3480156109d957600080fd5b506024546025546026546027546108729392919084565b3480156109fc57600080fd5b50610464610a0b3660046145a4565b611e31565b348015610a1c57600080fd5b50610464610a2b3660046145f5565b611ee4565b348015610a3c57600080fd5b5061042f610a4b3660046143ac565b611f51565b348015610a5c57600080fd5b50610508610a6b3660046142cf565b60146020526000908152604090205481565b348015610a8957600080fd5b5061042f610a983660046142cf565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610ac257600080fd5b50600e54610719906001600160a01b031681565b348015610ae257600080fd5b5061042f610af13660046143ac565b611fec565b348015610b0257600080fd5b5061050860135481565b348015610b1857600080fd5b50610464610b273660046142cf565b611ff9565b348015610b3857600080fd5b50610464610b47366004614493565b612044565b348015610b5857600080fd5b5061042f610b673660046142cf565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b9157600080fd5b50610464610ba03660046142cf565b612130565b348015610bb157600080fd5b50601954610719906001600160a01b031681565b348015610bd157600080fd5b50601754610719906001600160a01b031681565b348015610bf157600080fd5b50610464610c003660046142cf565b61217e565b348015610c1157600080fd5b50610464610c203660046145a4565b6122df565b348015610c3157600080fd5b5061050860165481565b348015610c4757600080fd5b50610464610c5636600461437f565b612329565b348015610c6757600080fd5b50610508610c76366004614307565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cad57600080fd5b50610464610cbc3660046142cf565b6123b2565b348015610ccd57600080fd5b50610464610cdc3660046142cf565b61264e565b348015610ced57600080fd5b50610464610cfc36600461437f565b6126f0565b348015610d0d57600080fd5b5061050860115481565b348015610d2357600080fd5b5061042f610d323660046142cf565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610d5c57600080fd5b50610464610d6b3660046142cf565b6127b4565b348015610d7c57600080fd5b5060155461042f9060ff1681565b348015610d9657600080fd5b50610464610da53660046142cf565b612828565b348015610db657600080fd5b50610464610dc53660046142cf565b6128d1565b348015610dd657600080fd5b50600d54610719906001600160a01b031681565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b8152600401610e14906146f3565b60405180910390fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4c33848461296c565b5060015b92915050565b6000546001600160a01b03163314610e805760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff19166001179055601b54610e9d5742601b5543601c555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610ef75760405162461bcd60e51b8152600401610e14906146f3565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f79919061456b565b50505050565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156110045760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e14565b61100f858585612a90565b611023853361101e86856149e3565b61296c565b506001949350505050565b60006010548211156110955760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e14565b600061109f613345565b90506110ab81846148b6565b9392505050565b6000546001600160a01b031633146110dc5760405162461bcd60e51b8152600401610e14906146f3565b60648110156110ea57600080fd5b6110f66012600a614919565b61110090826149c4565b60125550565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b6000546001600160a01b031633146111945760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff166111fc5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610e14565b60005b600a5481101561135557816001600160a01b0316600a828154811061123457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561134357600a805461125f906001906149e3565b8154811061127d57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b0390921691839081106112b757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff19169055600a80548061131d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061134d816149fa565b9150506111ff565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610e4c91859061101e90869061489e565b6000546001600160a01b031633146113ba5760405162461bcd60e51b8152600401610e14906146f3565b600d80546001600160a01b038085166001600160a01b031992831617909255600e8054928416929091168217905561135590612130565b336000908152600c602052604090205460ff168061142857503361141d6000546001600160a01b031690565b6001600160a01b0316145b6114445760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146114925760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff166115055760405162461bcd60e51b815260206004820152602260248201527f534f4c4944424c4f434b3a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b0316331461157c5760405162461bcd60e51b8152600401610e14906146f3565b602882905560298190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146115dd5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff16156116465760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e14565b600a5460c8101561168a5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610e14565b6000546001600160a01b03828116911614156116e85760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610e14565b6001600160a01b03811660009081526001602052604090205415611742576001600160a01b0381166000908152600160205260409020546117289061102e565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146117d25760405162461bcd60e51b8152600401610e14906146f3565b60648110156117e057600080fd5b6117ec6012600a614919565b6117f690826149c4565b60135550565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821661187c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f70657261746f72206164647265737300000000000000006044820152606401610e14565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118d15760405162461bcd60e51b8152600401610e14906146f3565b80518251146119115760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610e14565b3360005b8351811015610f7957600084828151811061194057634e487b7160e01b600052603260045260246000fd5b602002602001015190506000611954613345565b85848151811061197457634e487b7160e01b600052603260045260246000fd5b602002602001015161198691906149c4565b6001600160a01b0385166000908152600160205260409020549091506119ad9082906149e3565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546119dd90829061489e565b6001600160a01b03808416600081815260016020526040902092909255865190861690600080516020614a6583398151915290889087908110611a3057634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611a4791815260200190565b60405180910390a350508080611a5c906149fa565b915050611915565b6001600160a01b03811660009081526007602052604081205460ff1615611aa157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e509061102e565b6000546001600160a01b03163314611aed5760405162461bcd60e51b8152600401610e14906146f3565b611af76000613368565b565b6000546001600160a01b03163314611b235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611b625760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bb75760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff1615611c2f5760405162461bcd60e51b815260206004820152602660248201527f534f4c4944424c4f434b3a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b038116611cd25760405162461bcd60e51b8152600401610e149061475f565b6017546001600160a01b0383811691161415611d005760405162461bcd60e51b8152600401610e14906146bc565b50601780546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b03163314611d545760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526005602052604090205460ff1615158115151415611d935760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff1680611df5575033611dea6000546001600160a01b031690565b6001600160a01b0316145b611e115760405162461bcd60e51b8152600401610e1490614728565b6015805460ff1916831515179055611e2a8160016149c4565b6016555050565b6000546001600160a01b03163314611e5b5760405162461bcd60e51b8152600401610e14906146f3565b80471015611eab5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610e14565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015611355573d6000803e3d6000fd5b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610e14906146f3565b60208490556021839055602282905560238190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611fd35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e14565b611fe2338561101e86856149e3565b5060019392505050565b6000610e4c338484612a90565b6000546001600160a01b031633146120235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b0316331461206e5760405162461bcd60e51b8152600401610e14906146f3565b6064825111156120b65760405162461bcd60e51b815260206004820152601360248201527214d3d31251109313d0d2ce88125b9d985b1a59606a1b6044820152606401610e14565b60005b825181101561212b5781600860008584815181106120e757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612123816149fa565b9150506120b9565b505050565b6000546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146121a85760405162461bcd60e51b8152600401610e14906146f3565b601f546001600160a01b03166122005760405162461bcd60e51b815260206004820152601b60248201527f563120746f6b656e2061646472657373206973206e6f742073657400000000006044820152606401610e14565b601f546040516370a0823160e01b81526001600160a01b0383811660048301529091169060009082906370a082319060240160206040518083038186803b15801561224a57600080fd5b505afa15801561225e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228291906145bc565b9050600081116122d45760405162461bcd60e51b815260206004820152601760248201527f486f6c64657220686173206e6f20563120746f6b656e730000000000000000006044820152606401610e14565b61212b338483612a90565b6000546001600160a01b031633146123095760405162461bcd60e51b8152600401610e14906146f3565b6000811161231657600080fd5b61232381620f42406149c4565b60115550565b6000546001600160a01b031633146123535760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910160405180910390a25050565b6000546001600160a01b031633146123dc5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811661242b5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726f75746572206164647265737360501b6044820152606401610e14565b600d80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ba91906142eb565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561251757600080fd5b505afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f91906142eb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf91906142eb565b90506001600160a01b0381166126275760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20637265617465206e65772070616972000000000000006044820152606401610e14565b600e80546001600160a01b0319166001600160a01b03831690811790915561135590612130565b6000546001600160a01b031633146126785760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b03811661269f5760405162461bcd60e51b8152600401610e149061475f565b6019546001600160a01b03838116911614156126cd5760405162461bcd60e51b8152600401610e14906146bc565b50601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461271a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156127895760405162461bcd60e51b815260206004820152601d60248201527f534f4c4944424c4f434b3a2056616c756520616c7265616479207365740000006044820152606401610e14565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff16806127eb5750336127e06000546001600160a01b031690565b6001600160a01b0316145b6128075760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146128525760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b0381166128795760405162461bcd60e51b8152600401610e149061475f565b6018546001600160a01b03838116911614156128a75760405162461bcd60e51b8152600401610e14906146bc565b50601880546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146128fb5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166129605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e14565b61296981613368565b50565b6001600160a01b0383166129ce5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e14565b6001600160a01b038216612a2f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e14565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612af45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e14565b6001600160a01b038216612b565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e14565b60008111612b945760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610e14565b612b9d83611a64565b811115612be35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610e14565b6001600160a01b03831660009081526008602052604090205460ff16158015612c2557506001600160a01b03821660009081526008602052604090205460ff16155b612c615760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610e14565b6001600160a01b0383166000908152601e602052604090205460ff16158015612ca357506001600160a01b0382166000908152601e602052604090205460ff16155b15612f3e57601d5460ff16612d0d5760405162461bcd60e51b815260206004820152602a60248201527f534f4c4944424c4f434b3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610e14565b6001600160a01b0382166000908152601a602052604090205460ff1615612d765760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b0383166000908152601a602052604090205460ff1615612ddf5760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b03821660009081526005602052604090205460ff16158015612e2157506001600160a01b03831660009081526005602052604090205460ff16155b15612e9357601254811115612e935760405162461bcd60e51b815260206004820152603260248201527f534f4c4944424c4f434b3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610e14565b6001600160a01b03821660009081526006602052604090205460ff16612f3e5760135481612ec084611a64565b612eca919061489e565b1115612f3e5760405162461bcd60e51b815260206004820152603f60248201527f534f4c4944424c4f434b3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610e14565b60155460ff1615612fc1576001600160a01b038316600090815260146020526040812054612f6c90426149e3565b90506016548111612fbf5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610e14565b505b6001600160a01b03831660009081526004602052604090205460ff1615801561300357506001600160a01b03821660009081526004602052604090205460ff16155b80156130125750600b5460ff16155b1561307a576001600160a01b03831660009081526009602052604090205460ff168061305657506001600160a01b03821660009081526009602052604090205460ff165b1561306d5761306883838360016133b8565b613087565b61306883838360026133b8565b61308783838360006133b8565b6001600160a01b0383166000908152601460205260409020429055600b5460ff161580156130c35750600e546001600160a01b03848116911614155b80156130dd5750600e546001600160a01b03838116911614155b801561310257506001600160a01b03831660009081526004602052604090205460ff16155b801561312757506001600160a01b03821660009081526004602052604090205460ff16155b1561212b576040805160038082526080820190925260009160208201606080368337019050509050308160008151811061317157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156131c557600080fd5b505afa1580156131d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fd91906142eb565b8160018151811061321e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260195482519116908290600290811061325d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546000911663d06ca61f61328830611a64565b846040518363ffffffff1660e01b81526004016132a69291906147ec565b60006040518083038186803b1580156132be57600080fd5b505afa1580156132d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132fa91908101906144d8565b60028151811061331a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050601154811061333e5761333e61333930611a64565b6136bb565b5050505050565b6000806000613352613af8565b909250905061336181836148b6565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006133c48383613cb3565b6001600160a01b03861660009081526007602052604090205490915060ff1615613426576001600160a01b03851660009081526002602052604090205461340c9084906149e3565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526007602052604090205460ff16156134895760c08101516001600160a01b03851660009081526002602052604090205461346f919061489e565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546134ae91906149e3565b6001600160a01b03808716600090815260016020908152604080832094909455840151918716815291909120546134e5919061489e565b6001600160a01b0385166000908152600160205260409081902091909155810151151580613517575060008160e00151115b1561352e5761352e81604001518260e00151613cfb565b60008160600151118061354657506000816101000151115b156135985761355e8160600151826101000151613d30565b6017546101008201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b6000816080015111806135b057506000816101200151115b15613602576135c88160800151826101200151613dc7565b6018546101208201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b60008160a00151118061361a57506000816101400151115b15613675576136328160a00151826101400151613e5e565b61dead6001600160a01b0316856001600160a01b0316600080516020614a6583398151915283610140015160405161366c91815260200190565b60405180910390a35b836001600160a01b0316856001600160a01b0316600080516020614a658339815191528360c001516040516136ac91815260200190565b60405180910390a35050505050565b600b805460ff191660011790556040805160038082526080820190925260009160208201606080368337019050509050308160008151811061370d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561376157600080fd5b505afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906142eb565b816001815181106137ba57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526019548251911690829060029081106137f957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5461381f913091168461296c565b600d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061385890859060009086903090429060040161480d565b600060405180830381600087803b15801561387257600080fd5b505af1158015613886573d6000803e3d6000fd5b50506019546040516370a0823160e01b81523060048201526001600160a01b0390911692506000915082906370a082319060240160206040518083038186803b1580156138d257600080fd5b505afa1580156138e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390a91906145bc565b60405163095ea7b360e01b8152306004820152602481018290529091506001600160a01b0383169063095ea7b390604401602060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398d919061456b565b5060008482602a600001546139a291906149c4565b6139ac91906148b6565b905060008583602a600101546139c291906149c4565b6139cc91906148b6565b60175460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291925085169063a9059cbb90604401602060405180830381600087803b158015613a1c57600080fd5b505af1158015613a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a54919061456b565b5060185460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529085169063a9059cbb90604401602060405180830381600087803b158015613aa357600080fd5b505af1158015613ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adb919061456b565b50506000602a819055602b555050600b805460ff19169055505050565b601054600f546000918291825b600a54811015613c82578260016000600a8481548110613b3557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613bae57508160026000600a8481548110613b8757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bc457601054600f54945094505050509091565b60016000600a8381548110613be957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c1890846149e3565b925060026000600a8381548110613c3f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c6e90836149e3565b915080613c7a816149fa565b915050613b05565b50600f54601054613c9391906148b6565b821015613caa57601054600f549350935050509091565b90939092509050565b613cbb6141fd565b613cc58383613f1d565b9050613cda818484613cd5613345565b614115565b60a08701526080860152606085015260408401526020830152815292915050565b8160106000828254613d0d91906149e3565b909155505060248054829190600090613d2790849061489e565b90915550505050565b8060246001016000828254613d45919061489e565b90915550506017546001600160a01b031660009081526007602052604090205460ff1615613d9d576017546001600160a01b031660009081526002602052604081208054839290613d9790849061489e565b90915550505b6017546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246002016000828254613ddc919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613e34576018546001600160a01b031660009081526002602052604081208054839290613e2e90849061489e565b90915550505b6018546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246003016000828254613e73919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613edf5761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290613ed990849061489e565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290613d2790849061489e565b613f256141fd565b60ff8216613f395760c08101839052610e50565b8160ff166001141561407f576020546103e890613f5690856149c4565b613f6091906148b6565b60e08201526021546103e890613f7690856149c4565b613f8091906148b6565b6101008201526022546103e890613f9790856149c4565b613fa191906148b6565b6101208201526023546103e890613fb890856149c4565b613fc291906148b6565b610140820152602154602854610100830151613fde91906149c4565b613fe891906148b6565b602a8054600090613ffa90849061489e565b909155505060215460295461010083015161401591906149c4565b61401f91906148b6565b602b805460009061403190849061489e565b909155505061014081015161010082015161012083015160e084015161405790876149e3565b61406191906149e3565b61406b91906149e3565b61407591906149e3565b60c0820152610e50565b6020546103e89061409090856149c4565b61409a91906148b6565b60e08201526023546103e8906140b090856149c4565b6140ba91906148b6565b6101408201526029546103e8906140d190856149c4565b6140db91906148b6565b6101008201819052602b80546000906140f590849061489e565b909155505061014081015161010082015160e083015161406190866149e3565b60008080808080614126878a6149c4565b955060ff8816614144575084935060009250829150819050806141f0565b8760ff16600114156141cd57868a60e0015161416091906149c4565b9350868a610100015161417391906149c4565b9250868a610120015161418691906149c4565b9150868a610140015161419991906149c4565b90508082846141a8878a6149e3565b6141b291906149e3565b6141bc91906149e3565b6141c691906149e3565b94506141f0565b868a60e001516141dd91906149c4565b9350868a610120015161418691906149c4565b9499939850945094509450565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f830112614267578081fd5b8135602061427c6142778361487a565b614849565b80838252828201915082860187848660051b890101111561429b578586fd5b855b858110156142c25781356142b081614a41565b8452928401929084019060010161429d565b5090979650505050505050565b6000602082840312156142e0578081fd5b81356110ab81614a41565b6000602082840312156142fc578081fd5b81516110ab81614a41565b60008060408385031215614319578081fd5b823561432481614a41565b9150602083013561433481614a41565b809150509250929050565b600080600060608486031215614353578081fd5b833561435e81614a41565b9250602084013561436e81614a41565b929592945050506040919091013590565b60008060408385031215614391578182fd5b823561439c81614a41565b9150602083013561433481614a56565b600080604083850312156143be578182fd5b82356143c981614a41565b946020939093013593505050565b600080604083850312156143e9578182fd5b823567ffffffffffffffff80821115614400578384fd5b61440c86838701614257565b9350602091508185013581811115614422578384fd5b85019050601f81018613614434578283fd5b80356144426142778261487a565b80828252848201915084840189868560051b8701011115614461578687fd5b8694505b83851015614483578035835260019490940193918501918501614465565b5080955050505050509250929050565b600080604083850312156144a5578182fd5b823567ffffffffffffffff8111156144bb578283fd5b6144c785828601614257565b925050602083013561433481614a56565b600060208083850312156144ea578182fd5b825167ffffffffffffffff811115614500578283fd5b8301601f81018513614510578283fd5b805161451e6142778261487a565b80828252848201915084840188868560051b870101111561453d578687fd5b8694505b8385101561455f578051835260019490940193918501918501614541565b50979650505050505050565b60006020828403121561457c578081fd5b81516110ab81614a56565b60008060408385031215614599578182fd5b82356143c981614a56565b6000602082840312156145b5578081fd5b5035919050565b6000602082840312156145cd578081fd5b5051919050565b600080604083850312156145e6578182fd5b50508035926020909101359150565b6000806000806080858703121561460a578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b8381101561465e5781516001600160a01b031687529582019590820190600101614639565b509495945050505050565b6000602080835283518082850152825b8181101561469557858101830151858201604001528201614679565b818111156146a65783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f534f4c4944424c4f434b3a2057616c6c657420616c7265616479207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f43616c6c6572206973206e6f7420616e206f70657261746f7200000000000000604082015260600190565b60208082526018908201527f534f4c4944424c4f434b3a205a65726f20616464726573730000000000000000604082015260600190565b60208082526036908201527f534f4c4944424c4f434b3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b8281526040602082015260006148056040830184614626565b949350505050565b85815284602082015260a06040820152600061482c60a0830186614626565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561487257614872614a2b565b604052919050565b600067ffffffffffffffff82111561489457614894614a2b565b5060051b60200190565b600082198211156148b1576148b1614a15565b500190565b6000826148d157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156149115781600019048211156148f7576148f7614a15565b8085161561490457918102915b93841c93908002906148db565b509250929050565b60006110ab60ff84168360008261493257506001610e50565b8161493f57506000610e50565b8160018114614955576002811461495f5761497b565b6001915050610e50565b60ff84111561497057614970614a15565b50506001821b610e50565b5060208310610133831016604e8410600b841016171561499e575081810a610e50565b6149a883836148d6565b80600019048211156149bc576149bc614a15565b029392505050565b60008160001904831182151516156149de576149de614a15565b500290565b6000828210156149f5576149f5614a15565b500390565b6000600019821415614a0e57614a0e614a15565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461296957600080fd5b801515811461296957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c064b03aab7fdbcbac88b04ff6bfffa542218e5f5cab2bf03fecfac640609fa264736f6c63430008040033

Deployed Bytecode Sourcemap

15906:26155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:28;;;;;;;;;;-1:-1:-1;17835:28:0;;;;;;;;;;;8639:14:1;;8632:22;8614:41;;8602:2;8587:18;17835:28:0;;;;;;;;26189:122;;;;;;;;;;-1:-1:-1;26189:122:0;;;;;:::i;:::-;;:::i;:::-;;21150:83;;;;;;;;;;-1:-1:-1;21220:5:0;;;;;;;;;;;;-1:-1:-1;;;21220:5:0;;;;21150:83;;;;;;;:::i;22058:161::-;;;;;;;;;;-1:-1:-1;22058:161:0;;;;;:::i;:::-;;:::i;27144:276::-;;;;;;;;;;;;;:::i;41861:154::-;;;;;;;;;;-1:-1:-1;41861:154:0;;;;;:::i;:::-;;:::i;21423:95::-;;;;;;;;;;-1:-1:-1;21503:7:0;;21423:95;;;23131:25:1;;;23119:2;23104:18;21423:95:0;23086:76:1;22227:422:0;;;;;;;;;;-1:-1:-1;22227:422:0;;;;;:::i;:::-;;:::i;23393:248::-;;;;;;;;;;-1:-1:-1;23393:248:0;;;;;:::i;:::-;;:::i;39017:146::-;;;;;;;;;;-1:-1:-1;39017:146:0;;;;;:::i;:::-;;:::i;21332:83::-;;;;;;;;;;-1:-1:-1;21332:83:0;;16682:2;24882:36:1;;24870:2;24855:18;21332:83:0;24837:87:1;27423:124:0;;;;;;;;;;;;;:::i;24115:475::-;;;;;;;;;;-1:-1:-1;24115:475:0;;;;;:::i;:::-;;:::i;22657:215::-;;;;;;;;;;-1:-1:-1;22657:215:0;;;;;:::i;:::-;;:::i;40749:98::-;;;;;;;;;;-1:-1:-1;40749:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;40824:15:0;40801:4;40824:15;;;:6;:15;;;;;;;;;40749:98;40167:179;;;;;;;;;;-1:-1:-1;40167:179:0;;;;;:::i;:::-;;:::i;24923:121::-;;;;;;;;;;-1:-1:-1;24923:121:0;;;;;:::i;:::-;;:::i;26923:213::-;;;;;;;;;;-1:-1:-1;26923:213:0;;;;;:::i;:::-;;:::i;28354:202::-;;;;;;;;;;-1:-1:-1;28354:202:0;;;;;:::i;:::-;;:::i;23649:458::-;;;;;;;;;;-1:-1:-1;23649:458:0;;;;;:::i;:::-;;:::i;25182:123::-;;;;;;;;;;-1:-1:-1;25182:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;25270:27:0;25246:4;25270:27;;;:18;:27;;;;;;;;;25182:123;17942:29;;;;;;;;;;-1:-1:-1;17942:29:0;;;;-1:-1:-1;;;;;17942:29:0;;;;;;-1:-1:-1;;;;;7842:32:1;;;7824:51;;7812:2;7797:18;17942:29:0;7779:102:1;17317:78:0;;;;;;;;;;-1:-1:-1;17317:78:0;;;;-1:-1:-1;;;;;17317:78:0;;;39171:154;;;;;;;;;;-1:-1:-1;39171:154:0;;;;;:::i;:::-;;:::i;24712:198::-;;;;;;;;;;-1:-1:-1;24712:198:0;;;;;:::i;:::-;;:::i;24598:106::-;;;;;;;;;;-1:-1:-1;24598:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;24677:19:0;24657:4;24677:19;;;:9;:19;;;;;;;;;24598:106;40859:560;;;;;;;;;;-1:-1:-1;40859:560:0;;;;;:::i;:::-;;:::i;21526:198::-;;;;;;;;;;-1:-1:-1;21526:198:0;;;;;:::i;:::-;;:::i;3652:94::-;;;;;;;;;;;;;:::i;18924:32::-;;;;;;;;;;-1:-1:-1;18924:32:0;;;;;;;;;;;;;24265:25:1;;;24321:2;24306:18;;24299:34;;;;24238:18;18924:32:0;24220:119:1;18107:37:0;;;;;;;;;;-1:-1:-1;18107:37:0;;;;;;;;;;;;;;;;;;;24575:25:1;;;24631:2;24616:18;;24609:34;;;;24659:18;;;24652:34;24717:2;24702:18;;24695:34;24562:3;24547:19;18107:37:0;24529:206:1;25762:266:0;;;;;;;;;;-1:-1:-1;25762:266:0;;;;;:::i;:::-;;:::i;26704:214::-;;;;;;;;;;-1:-1:-1;26704:214:0;;;;;:::i;:::-;;:::i;38256:271::-;;;;;;;;;;-1:-1:-1;38256:271:0;;;;;:::i;:::-;;:::i;25313:281::-;;;;;;;;;;-1:-1:-1;25313:281:0;;;;;:::i;:::-;;:::i;23265:120::-;;;;;;;;;;-1:-1:-1;23265:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23357:20:0;23333:4;23357:20;;;:11;:20;;;;;;;;;23265:120;39493:196;;;;;;;;;;-1:-1:-1;39493:196:0;;;;;:::i;:::-;;:::i;16930:59::-;;;;;;;;;;;;;;;;3429:87;;;;;;;;;;-1:-1:-1;3475:7:0;3502:6;-1:-1:-1;;;;;3502:6:0;3429:87;;21239;;;;;;;;;;-1:-1:-1;21311:7:0;;;;;;;;;;;;-1:-1:-1;;;21311:7:0;;;;21239:87;;18296:36;;;;;;;;;;-1:-1:-1;18296:36:0;;;;;;;;;;;;;;;41491:193;;;;;;;;;;-1:-1:-1;41491:193:0;;;;;:::i;:::-;;:::i;28066:280::-;;;;;;;;;;-1:-1:-1;28066:280:0;;;;;:::i;:::-;;:::i;22880:377::-;;;;;;;;;;-1:-1:-1;22880:377:0;;;;;:::i;:::-;;:::i;17092:46::-;;;;;;;;;;-1:-1:-1;17092:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;26036:145;;;;;;;;;;-1:-1:-1;26036:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;26135:38:0;26111:4;26135:38;;;:29;:38;;;;;;;;;26036:145;16619:19;;;;;;;;;;-1:-1:-1;16619:19:0;;;;-1:-1:-1;;;;;16619:19:0;;;21732:167;;;;;;;;;;-1:-1:-1;21732:167:0;;;;;:::i;:::-;;:::i;16996:62::-;;;;;;;;;;;;;;;;27857:93;;;;;;;;;;-1:-1:-1;27857:93:0;;;;;:::i;:::-;;:::i;39895:260::-;;;;;;;;;;-1:-1:-1;39895:260:0;;;;;:::i;:::-;;:::i;25602:155::-;;;;;;;;;;-1:-1:-1;25602:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;25706:43:0;25682:4;25706:43;;;:34;:43;;;;;;;;;25602:155;27760:89;;;;;;;;;;-1:-1:-1;27760:89:0;;;;;:::i;:::-;;:::i;17485:64::-;;;;;;;;;;-1:-1:-1;17485:64:0;;;;-1:-1:-1;;;;;17485:64:0;;;17235:75;;;;;;;;;;-1:-1:-1;17235:75:0;;;;-1:-1:-1;;;;;17235:75:0;;;26319:377;;;;;;;;;;-1:-1:-1;26319:377:0;;;;;:::i;:::-;;:::i;39333:152::-;;;;;;;;;;-1:-1:-1;39333:152:0;;;;;:::i;:::-;;:::i;17186:40::-;;;;;;;;;;;;;;;;27550:202;;;;;;;;;;-1:-1:-1;27550:202:0;;;;;:::i;:::-;;:::i;21907:143::-;;;;;;;;;;-1:-1:-1;21907:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;22015:18:0;;;21988:7;22015:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21907:143;40354:383;;;;;;;;;;-1:-1:-1;40354:383:0;;;;;:::i;:::-;;:::i;38826:183::-;;;;;;;;;;-1:-1:-1;38826:183:0;;;;;:::i;:::-;;:::i;39697:186::-;;;;;;;;;;-1:-1:-1;39697:186:0;;;;;:::i;:::-;;:::i;16870:53::-;;;;;;;;;;;;;;;;27958:100;;;;;;;;;;-1:-1:-1;27958:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;28034:16:0;28011:4;28034:16;;;:7;:16;;;;;;;;;27958:100;25052:120;;;;;;;;;;-1:-1:-1;25052:120:0;;;;;:::i;:::-;;:::i;17145:34::-;;;;;;;;;;-1:-1:-1;17145:34:0;;;;;;;;38535:283;;;;;;;;;;-1:-1:-1;38535:283:0;;;;;:::i;:::-;;:::i;3754:192::-;;;;;;;;;;-1:-1:-1;3754:192:0;;;;;:::i;:::-;;:::i;16591:21::-;;;;;;;;;;-1:-1:-1;16591:21:0;;;;-1:-1:-1;;;;;16591:21:0;;;26189:122;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;;;;;;;;;26271:14:::1;:32:::0;;-1:-1:-1;;;;;;26271:32:0::1;-1:-1:-1::0;;;;;26271:32:0;;;::::1;::::0;;;::::1;::::0;;26189:122::o;22058:161::-;22133:4;22150:39;2930:10;22173:7;22182:6;22150:8;:39::i;:::-;-1:-1:-1;22207:4:0;22058:161;;;;;:::o;27144:276::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;27194:16:::1;:23:::0;;-1:-1:-1;;27194:23:0::1;27213:4;27194:23;::::0;;27232:21:::1;::::0;27228:146:::1;;27299:15;27275:21;:39:::0;27350:12:::1;27329:18;:33:::0;27228:146:::1;27383:32;::::0;27409:5:::1;::::0;27383:32;;::::1;::::0;27409:5;;27383:32:::1;27144:276::o:0;41861:154::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;41966:41:::1;::::0;-1:-1:-1;;;41966:41:0;;-1:-1:-1;;;;;8387:32:1;;;41966:41:0::1;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;41966:27:0;::::1;::::0;::::1;::::0;8342:18:1;;41966:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41861:154:::0;;;:::o;22227:422::-;-1:-1:-1;;;;;22377:19:0;;22333:4;22377:19;;;:11;:19;;;;;;;;2930:10;22377:33;;;;;;;;22429:26;;;;22421:79;;;;-1:-1:-1;;;22421:79:0;;17403:2:1;22421:79:0;;;17385:21:1;17442:2;17422:18;;;17415:30;17481:34;17461:18;;;17454:62;-1:-1:-1;;;17532:18:1;;;17525:38;17580:19;;22421:79:0;17375:230:1;22421:79:0;22513:36;22523:6;22531:9;22542:6;22513:9;:36::i;:::-;22560:57;22569:6;2930:10;22591:25;22610:6;22591:16;:25;:::i;:::-;22560:8;:57::i;:::-;-1:-1:-1;22637:4:0;;22227:422;-1:-1:-1;;;;22227:422:0:o;23393:248::-;23459:7;23498;;23487;:18;;23479:73;;;;-1:-1:-1;;;23479:73:0;;12556:2:1;23479:73:0;;;12538:21:1;12595:2;12575:18;;;12568:30;12634:34;12614:18;;;12607:62;-1:-1:-1;;;12685:18:1;;;12678:40;12735:19;;23479:73:0;12528:232:1;23479:73:0;23563:19;23586:10;:8;:10::i;:::-;23563:33;-1:-1:-1;23614:19:0;23563:33;23614:7;:19;:::i;:::-;23607:26;23393:248;-1:-1:-1;;;23393:248:0:o;39017:146::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;39104:3:::1;39094:6;:13;;39086:22;;;::::0;::::1;;39142:13;16682:2;39142;:13;:::i;:::-;39133:22;::::0;:6;:22:::1;:::i;:::-;39119:11;:36:::0;-1:-1:-1;39017:146:0:o;27423:124::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;27476:16:::1;:24:::0;;-1:-1:-1;;27476:24:0::1;::::0;;27510:32:::1;::::0;27476:24;;27495:5:::1;::::0;27510:32:::1;::::0;27495:5;;27510:32:::1;27423:124::o:0;24115:475::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24197:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24189:56;;;::::0;-1:-1:-1;;;24189:56:0;;15937:2:1;24189:56:0::1;::::0;::::1;15919:21:1::0;15976:2;15956:18;;;15949:30;16015:25;15995:18;;;15988:53;16058:18;;24189:56:0::1;15909:173:1::0;24189:56:0::1;24261:9;24256:327;24280:9;:16:::0;24276:20;::::1;24256:327;;;24338:7;-1:-1:-1::0;;;;;24322:23:0::1;:9;24332:1;24322:12;;;;;;-1:-1:-1::0;;;24322:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24322:12:0::1;:23;24318:254;;;24381:9;24391:16:::0;;:20:::1;::::0;24410:1:::1;::::0;24391:20:::1;:::i;:::-;24381:31;;;;;;-1:-1:-1::0;;;24381:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24366:9:::1;:12:::0;;-1:-1:-1;;;;;24381:31:0;;::::1;::::0;24376:1;;24366:12;::::1;;;-1:-1:-1::0;;;24366:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24366:46:0::1;-1:-1:-1::0;;;;;24366:46:0;;::::1;;::::0;;24431:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24470:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24470:28:0::1;::::0;;24517:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;24517:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24517:15:0;;;;;-1:-1:-1;;;;;;24517:15:0::1;::::0;;;;;24256:327:::1;24115:475:::0;:::o;24318:254::-:1;24298:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24256:327;;;;24115:475:::0;:::o;22657:215::-;2930:10;22745:4;22794:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22794:34:0;;;;;;;;;;22745:4;;22762:80;;22785:7;;22794:47;;22831:10;;22794:47;:::i;40167:179::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;40262:6:::1;:27:::0;;-1:-1:-1;;;;;40262:27:0;;::::1;-1:-1:-1::0;;;;;;40262:27:0;;::::1;;::::0;;;40300:4:::1;:14:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;40325:13:::1;::::0;:7:::1;:13::i;24923:121::-:0;19711:10;19701:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;19737:10:0;19726:7;3475;3502:6;-1:-1:-1;;;;;3502:6:0;;3429:87;19726:7;-1:-1:-1;;;;;19726:21:0;;19701:46;19693:84;;;;-1:-1:-1;;;19693:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25002:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25002:34:0::1;25032:4;25002:34;::::0;;24923:121::o;26923:213::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26995:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;26987:66;;;::::0;-1:-1:-1;;;26987:66:0;;13777:2:1;26987:66:0::1;::::0;::::1;13759:21:1::0;13816:2;13796:18;;;13789:30;13855:34;13835:18;;;13828:62;-1:-1:-1;;;13906:18:1;;;13899:32;13948:19;;26987:66:0::1;13749:224:1::0;26987:66:0::1;-1:-1:-1::0;;;;;27058:19:0;::::1;27080:5;27058:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;27058:27:0::1;::::0;;27095:36;27080:5;;27058:19;27095:36:::1;::::0;27080:5;;27095:36:::1;26923:213:::0;:::o;28354:202::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;28444:8:::1;:29:::0;;;28484:20;:35;;;28535:13:::1;::::0;::::1;::::0;28444:17:::1;::::0;28535:13:::1;28354:202:::0;;:::o;23649:458::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23730:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23729:21;23721:61;;;::::0;-1:-1:-1;;;23721:61:0;;14180:2:1;23721:61:0::1;::::0;::::1;14162:21:1::0;14219:2;14199:18;;;14192:30;14258:29;14238:18;;;14231:57;14305:18;;23721:61:0::1;14152:177:1::0;23721:61:0::1;23801:9;:16:::0;23821:3:::1;-1:-1:-1::0;23801:23:0::1;23793:50;;;::::0;-1:-1:-1;;;23793:50:0;;10103:2:1;23793:50:0::1;::::0;::::1;10085:21:1::0;10142:2;10122:18;;;10115:30;-1:-1:-1;;;10161:18:1;;;10154:44;10215:18;;23793:50:0::1;10075:164:1::0;23793:50:0::1;3475:7:::0;3502:6;-1:-1:-1;;;;;23862:18:0;;::::1;3502:6:::0;;23862:18:::1;;23854:55;;;::::0;-1:-1:-1;;;23854:55:0;;11849:2:1;23854:55:0::1;::::0;::::1;11831:21:1::0;11888:2;11868:18;;;11861:30;11927:26;11907:18;;;11900:54;11971:18;;23854:55:0::1;11821:174:1::0;23854:55:0::1;-1:-1:-1::0;;;;;23923:16:0;::::1;23942:1;23923:16:::0;;;:7:::1;:16;::::0;;;;;:20;23920:108:::1;;-1:-1:-1::0;;;;;23999:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23979:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23960:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23920:108:::1;-1:-1:-1::0;;;;;24038:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24038:27:0::1;24061:4;24038:27:::0;;::::1;::::0;;;24076:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24076:23:0::1;::::0;;::::1;::::0;;23649:458::o;39171:154::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;39262:3:::1;39252:6;:13;;39244:22;;;::::0;::::1;;39304:13;16682:2;39304;:13;:::i;:::-;39295:22;::::0;:6;:22:::1;:::i;:::-;39277:15;:40:::0;-1:-1:-1;39171:154:0:o;24712:198::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24807:23:0;::::1;24799:60;;;::::0;-1:-1:-1;;;24799:60:0;;15225:2:1;24799:60:0::1;::::0;::::1;15207:21:1::0;15264:2;15244:18;;;15237:30;15303:26;15283:18;;;15276:54;15347:18;;24799:60:0::1;15197:174:1::0;24799:60:0::1;-1:-1:-1::0;;;;;24866:20:0;;;::::1;;::::0;;;:9:::1;:20;::::0;;;;:36;;-1:-1:-1;;24866:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24712:198::o;40859:560::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;40996:7:::1;:14;40975:10;:17;:35;40967:59;;;::::0;-1:-1:-1;;;40967:59:0;;11508:2:1;40967:59:0::1;::::0;::::1;11490:21:1::0;11547:2;11527:18;;;11520:30;-1:-1:-1;;;11566:18:1;;;11559:42;11618:18;;40967:59:0::1;11480:162:1::0;40967:59:0::1;41055:10;41038:14;41078:334;41095:10;:17;41093:1;:19;41078:334;;;41133:17;41153:10;41164:1;41153:13;;;;;;-1:-1:-1::0;;;41153:13:0::1;;;;;;;;;;;;;;;41133:33;;41181:15;41210:10;:8;:10::i;:::-;41199:7;41207:1;41199:10;;;;;;-1:-1:-1::0;;;41199:10:0::1;;;;;;;;;;;;;;;:21;;;;:::i;:::-;-1:-1:-1::0;;;;;41253:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;41181:39;;-1:-1:-1;41253:24:0::1;::::0;41181:39;;41253:24:::1;:::i;:::-;-1:-1:-1::0;;;;;41235:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;:42;;;;41313:18;;::::1;::::0;;;;:28:::1;::::0;41334:7;;41313:28:::1;:::i;:::-;-1:-1:-1::0;;;;;41292:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;:49;;;;41389:10;;41361:39;;::::1;::::0;-1:-1:-1;;;;;;;;;;;41361:39:0;41389:7;;41397:1;;41389:10;::::1;;;-1:-1:-1::0;;;41389:10:0::1;;;;;;;;;;;;;;;41361:39;;;;23131:25:1::0;;23119:2;23104:18;;23086:76;41361:39:0::1;;;;;;;;41078:334;;41114:3;;;;;:::i;:::-;;;;41078:334;;21526:198:::0;-1:-1:-1;;;;;21616:20:0;;21592:7;21616:20;;;:11;:20;;;;;;;;21612:49;;;-1:-1:-1;;;;;;21645:16:0;;;;;:7;:16;;;;;;;21526:198::o;21612:49::-;-1:-1:-1;;;;;21699:16:0;;;;;;:7;:16;;;;;;21679:37;;:19;:37::i;3652:94::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;3717:21:::1;3735:1;3717:9;:21::i;:::-;3652:94::o:0;25762:266::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25860:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;:50;;::::0;::::1;;;;25852:117;;;;-1:-1:-1::0;;;25852:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25974:38:0;;;::::1;;::::0;;;:29:::1;:38;::::0;;;;:49;;-1:-1:-1;;25974:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25762:266::o;26704:214::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26775:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;26774:20;26766:71;;;::::0;-1:-1:-1;;;26766:71:0;;16289:2:1;26766:71:0::1;::::0;::::1;16271:21:1::0;16328:2;16308:18;;;16301:30;16367:34;16347:18;;;16340:62;-1:-1:-1;;;16418:18:1;;;16411:36;16464:19;;26766:71:0::1;16261:228:1::0;26766:71:0::1;-1:-1:-1::0;;;;;26842:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;26842:26:0::1;26864:4;26842:26:::0;;::::1;::::0;;;26878:35;;26864:4;;26842:19;26878:35:::1;::::0;::::1;26704:214:::0;:::o;38256:271::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;38342:9;-1:-1:-1;;;;;19575:19:0;::::1;19567:56;;;;-1:-1:-1::0;;;19567:56:0::1;;;;;;;:::i;:::-;38372:15:::2;::::0;-1:-1:-1;;;;;38372:28:0;;::::2;:15:::0;::::2;:28;;38364:71;;;;-1:-1:-1::0;;;38364:71:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;38446:15:0::2;:27:::0;;-1:-1:-1;;;;;38446:27:0;;::::2;-1:-1:-1::0;;;;;;38446:27:0;;::::2;::::0;::::2;::::0;;:15:::2;38484:35:::0;:18:::2;:35;::::0;38256:271::o;25313:281::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25416:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;::::1;;:55;;::::0;::::1;;;;25408:122;;;;-1:-1:-1::0;;;25408:122:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25535:43:0;;;::::1;;::::0;;;:34:::1;:43;::::0;;;;:54;;-1:-1:-1;;25535:54:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25313:281::o;39493:196::-;19711:10;19701:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;19737:10:0;19726:7;3475;3502:6;-1:-1:-1;;;;;3502:6:0;;3429:87;19726:7;-1:-1:-1;;;;;19726:21:0;;19701:46;19693:84;;;;-1:-1:-1;;;19693:84:0;;;;;;;:::i;:::-;39603:15:::1;:26:::0;;-1:-1:-1;;39603:26:0::1;::::0;::::1;;;::::0;;39655::::1;:14:::0;-1:-1:-1;39655:26:0::1;:::i;:::-;39640:12;:41:::0;-1:-1:-1;;39493:196:0:o;41491:193::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;41591:9:::1;41566:21;:34;;41558:71;;;::::0;-1:-1:-1;;;41558:71:0;;18173:2:1;41558:71:0::1;::::0;::::1;18155:21:1::0;18212:2;18192:18;;;18185:30;18251:26;18231:18;;;18224:54;18295:18;;41558:71:0::1;18145:174:1::0;41558:71:0::1;3475:7:::0;3502:6;;41640:36:::1;::::0;-1:-1:-1;;;;;3502:6:0;;;;41640:36;::::1;;;::::0;41666:9;;41640:36;3475:7;41640:36;41666:9;3502:6;41640:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;28066:280:::0;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;28183:5:::1;:16:::0;;;28210:14;:26;;;28247:17;:32;;;28290:10;:19;;;28325:13:::1;::::0;::::1;::::0;28183:9:::1;::::0;28325:13:::1;28066:280:::0;;;;:::o;22880:377::-;2930:10;22973:4;23017:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23017:34:0;;;;;;;;;;23070:35;;;;23062:85;;;;-1:-1:-1;;;23062:85:0;;22358:2:1;23062:85:0;;;22340:21:1;22397:2;22377:18;;;22370:30;22436:34;22416:18;;;22409:62;-1:-1:-1;;;22487:18:1;;;22480:35;22532:19;;23062:85:0;22330:227:1;23062:85:0;23158:67;2930:10;23181:7;23190:34;23209:15;23190:16;:34;:::i;23158:67::-;-1:-1:-1;23245:4:0;;22880:377;-1:-1:-1;;;22880:377:0:o;21732:167::-;21810:4;21827:42;2930:10;21851:9;21862:6;21827:9;:42::i;27857:93::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27920:14:0::1;27937:5;27920:14:::0;;;:7:::1;:14;::::0;;;;:22;;-1:-1:-1;;27920:22:0::1;::::0;;27857:93::o;39895:260::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;40012:3:::1;39993:8;:15;:22;;39985:54;;;::::0;-1:-1:-1;;;39985:54:0;;10802:2:1;39985:54:0::1;::::0;::::1;10784:21:1::0;10841:2;10821:18;;;10814:30;-1:-1:-1;;;10860:18:1;;;10853:49;10919:18;;39985:54:0::1;10774:169:1::0;39985:54:0::1;40054:9;40050:98;40073:8;:15;40069:1;:19;40050:98;;;40131:5;40109:6;:19;40116:8;40125:1;40116:11;;;;;;-1:-1:-1::0;;;40116:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;40109:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;40109:19:0;:27;;-1:-1:-1;;40109:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40090:3;::::1;::::0;::::1;:::i;:::-;;;;40050:98;;;;39895:260:::0;;:::o;27760:89::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27820:14:0::1;;::::0;;;:7:::1;:14;::::0;;;;:21;;-1:-1:-1;;27820:21:0::1;27837:4;27820:21;::::0;;27760:89::o;26319:377::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;26390:14:::1;::::0;-1:-1:-1;;;;;26390:14:0::1;26382:68;;;::::0;-1:-1:-1;;;26382:68:0;;10446:2:1;26382:68:0::1;::::0;::::1;10428:21:1::0;10485:2;10465:18;;;10458:30;10524:29;10504:18;;;10497:57;10571:18;;26382:68:0::1;10418:177:1::0;26382:68:0::1;26485:14;::::0;26538:25:::1;::::0;-1:-1:-1;;;26538:25:0;;-1:-1:-1;;;;;7842:32:1;;;26538:25:0::1;::::0;::::1;7824:51:1::0;26485:14:0;;::::1;::::0;26461::::1;::::0;26485;;26538:17:::1;::::0;7797:18:1;;26538:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26513:50;;26599:1;26582:14;:18;26574:54;;;::::0;-1:-1:-1;;;26574:54:0;;16696:2:1;26574:54:0::1;::::0;::::1;16678:21:1::0;16735:2;16715:18;;;16708:30;16774:25;16754:18;;;16747:53;16817:18;;26574:54:0::1;16668:173:1::0;26574:54:0::1;26641:47;2930:10:::0;26665:6:::1;26673:14;26641:9;:47::i;39333:152::-:0;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;39429:1:::1;39420:6;:10;39412:19;;;::::0;::::1;;39463:14;:6:::0;39472:5:::1;39463:14;:::i;:::-;39442:18;:35:::0;-1:-1:-1;39333:152:0:o;27550:202::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27639:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;27639:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27697:50;;8614:41:1;;;27697:50:0::1;::::0;8587:18:1;27697:50:0::1;;;;;;;27550:202:::0;;:::o;40354:383::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40440:23:0;::::1;40432:58;;;::::0;-1:-1:-1;;;40432:58:0;;18526:2:1;40432:58:0::1;::::0;::::1;18508:21:1::0;18565:2;18545:18;;;18538:30;-1:-1:-1;;;18584:18:1;;;18577:52;18646:18;;40432:58:0::1;18498:172:1::0;40432:58:0::1;40499:6;:27:::0;;-1:-1:-1;;;;;;40499:27:0::1;-1:-1:-1::0;;;;;40499:27:0;::::1;::::0;;::::1;::::0;;;40562:16:::1;::::0;;-1:-1:-1;;;40562:16:0;;;;-1:-1:-1;;40499:27:0;40562:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;40499:27;40562:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40553:37:0::1;;40599:4;40606:6;;;;;;;;;-1:-1:-1::0;;;;;40606:6:0::1;-1:-1:-1::0;;;;;40606:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40553:67;::::0;-1:-1:-1;;;;;;40553:67:0::1;::::0;;;;;;-1:-1:-1;;;;;8116:15:1;;;40553:67:0::1;::::0;::::1;8098:34:1::0;8168:15;;8148:18;;;8141:43;8033:18;;40553:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40535:85:::0;-1:-1:-1;;;;;;40635:21:0;::::1;40627:59;;;::::0;-1:-1:-1;;;40627:59:0;;12202:2:1;40627:59:0::1;::::0;::::1;12184:21:1::0;12241:2;12221:18;;;12214:30;12280:27;12260:18;;;12253:55;12325:18;;40627:59:0::1;12174:175:1::0;40627:59:0::1;40695:4;:14:::0;;-1:-1:-1;;;;;;40695:14:0::1;-1:-1:-1::0;;;;;40695:14:0;::::1;::::0;;::::1;::::0;;;40716:13:::1;::::0;:7:::1;:13::i;38826:183::-:0;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;38904:5;-1:-1:-1;;;;;19575:19:0;::::1;19567:56;;;;-1:-1:-1::0;;;19567:56:0::1;;;;;;;:::i;:::-;38930:4:::2;::::0;-1:-1:-1;;;;;38930:13:0;;::::2;:4:::0;::::2;:13;;38922:56;;;;-1:-1:-1::0;;;38922:56:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;38989:4:0::2;:12:::0;;-1:-1:-1;;;;;;38989:12:0::2;-1:-1:-1::0;;;;;38989:12:0;;;::::2;::::0;;;::::2;::::0;;38826:183::o;39697:186::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39783:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;:24;;::::0;::::1;;;;39775:66;;;::::0;-1:-1:-1;;;39775:66:0;;11150:2:1;39775:66:0::1;::::0;::::1;11132:21:1::0;11189:2;11169:18;;;11162:30;11228:31;11208:18;;;11201:59;11277:18;;39775:66:0::1;11122:179:1::0;39775:66:0::1;-1:-1:-1::0;;;;;39852:15:0;;;::::1;;::::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;39852:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39697:186::o;25052:120::-;19711:10;19701:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;19737:10:0;19726:7;3475;3502:6;-1:-1:-1;;;;;3502:6:0;;3429:87;19726:7;-1:-1:-1;;;;;19726:21:0;;19701:46;19693:84;;;;-1:-1:-1;;;19693:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25129:27:0::1;25159:5;25129:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25129:35:0::1;::::0;;25052:120::o;38535:283::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;38624:9;-1:-1:-1;;;;;19575:19:0;::::1;19567:56;;;;-1:-1:-1::0;;;19567:56:0::1;;;;;;;:::i;:::-;38654:18:::2;::::0;-1:-1:-1;;;;;38654:31:0;;::::2;:18:::0;::::2;:31;;38646:74;;;;-1:-1:-1::0;;;38646:74:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;38731:18:0::2;:30:::0;;-1:-1:-1;;;;;38731:30:0;;::::2;-1:-1:-1::0;;;;;;38731:30:0;;::::2;::::0;::::2;::::0;;:18:::2;38772:38:::0;:18:::2;:38;::::0;38535:283::o;3754:192::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3843:22:0;::::1;3835:73;;;::::0;-1:-1:-1;;;3835:73:0;;12967:2:1;3835:73:0::1;::::0;::::1;12949:21:1::0;13006:2;12986:18;;;12979:30;13045:34;13025:18;;;13018:62;-1:-1:-1;;;13096:18:1;;;13089:36;13142:19;;3835:73:0::1;12939:228:1::0;3835:73:0::1;3919:19;3929:8;3919:9;:19::i;:::-;3754:192:::0;:::o;32728:335::-;-1:-1:-1;;;;;32821:19:0;;32813:68;;;;-1:-1:-1;;;32813:68:0;;19637:2:1;32813:68:0;;;19619:21:1;19676:2;19656:18;;;19649:30;19715:34;19695:18;;;19688:62;-1:-1:-1;;;19766:18:1;;;19759:34;19810:19;;32813:68:0;19609:226:1;32813:68:0;-1:-1:-1;;;;;32900:21:0;;32892:68;;;;-1:-1:-1;;;32892:68:0;;13374:2:1;32892:68:0;;;13356:21:1;13413:2;13393:18;;;13386:30;13452:34;13432:18;;;13425:62;-1:-1:-1;;;13503:18:1;;;13496:32;13545:19;;32892:68:0;13346:224:1;32892:68:0;-1:-1:-1;;;;;32971:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33023:32;;23131:25:1;;;33023:32:0;;23104:18:1;33023:32:0;;;;;;;32728:335;;;:::o;33073:2209::-;-1:-1:-1;;;;;33161:18:0;;33153:68;;;;-1:-1:-1;;;33153:68:0;;18877:2:1;33153:68:0;;;18859:21:1;18916:2;18896:18;;;18889:30;18955:34;18935:18;;;18928:62;-1:-1:-1;;;19006:18:1;;;18999:35;19051:19;;33153:68:0;18849:227:1;33153:68:0;-1:-1:-1;;;;;33240:16:0;;33232:64;;;;-1:-1:-1;;;33232:64:0;;9699:2:1;33232:64:0;;;9681:21:1;9738:2;9718:18;;;9711:30;9777:34;9757:18;;;9750:62;-1:-1:-1;;;9828:18:1;;;9821:33;9871:19;;33232:64:0;9671:225:1;33232:64:0;33324:1;33315:6;:10;33307:34;;;;-1:-1:-1;;;33307:34:0;;14885:2:1;33307:34:0;;;14867:21:1;14924:2;14904:18;;;14897:30;-1:-1:-1;;;14943:18:1;;;14936:41;14994:18;;33307:34:0;14857:161:1;33307:34:0;33370:15;33380:4;33370:9;:15::i;:::-;33360:6;:25;;33352:57;;;;-1:-1:-1;;;33352:57:0;;14536:2:1;33352:57:0;;;14518:21:1;14575:2;14555:18;;;14548:30;-1:-1:-1;;;14594:18:1;;;14587:50;14654:18;;33352:57:0;14508:170:1;33352:57:0;-1:-1:-1;;;;;33429:12:0;;;;;;:6;:12;;;;;;;;33428:13;:28;;;;-1:-1:-1;;;;;;33446:10:0;;;;;;:6;:10;;;;;;;;33445:11;33428:28;33420:54;;;;-1:-1:-1;;;33420:54:0;;20833:2:1;33420:54:0;;;20815:21:1;20872:2;20852:18;;;20845:30;-1:-1:-1;;;20891:18:1;;;20884:43;20944:18;;33420:54:0;20805:163:1;33420:54:0;-1:-1:-1;;;;;33491:35:0;;;;;;:29;:35;;;;;;;;33490:36;:74;;;;-1:-1:-1;;;;;;33531:33:0;;;;;;:29;:33;;;;;;;;33530:34;33490:74;33487:683;;;33580:16;;;;33572:71;;;;-1:-1:-1;;;33572:71:0;;21947:2:1;33572:71:0;;;21929:21:1;21986:2;21966:18;;;21959:30;22025:34;22005:18;;;21998:62;-1:-1:-1;;;22076:18:1;;;22069:40;22126:19;;33572:71:0;21919:232:1;33572:71:0;-1:-1:-1;;;;;33667:14:0;;;;;;:10;:14;;;;;;;;33666:15;33658:58;;;;-1:-1:-1;;;33658:58:0;;20042:2:1;33658:58:0;;;20024:21:1;20081:2;20061:18;;;20054:30;20120:32;20100:18;;;20093:60;20170:18;;33658:58:0;20014:180:1;33658:58:0;-1:-1:-1;;;;;33731:16:0;;;;;;:10;:16;;;;;;;;33730:17;33722:60;;;;-1:-1:-1;;;33722:60:0;;20042:2:1;33722:60:0;;;20024:21:1;20081:2;20061:18;;;20054:30;20120:32;20100:18;;;20093:60;20170:18;;33722:60:0;20014:180:1;33722:60:0;-1:-1:-1;;;;;33793:38:0;;;;;;:34;:38;;;;;;;;33792:39;:84;;;;-1:-1:-1;;;;;;33836:40:0;;;;;;:34;:40;;;;;;;;33835:41;33792:84;33788:188;;;33903:11;;33893:6;:21;;33885:84;;;;-1:-1:-1;;;33885:84:0;;21528:2:1;33885:84:0;;;21510:21:1;21567:2;21547:18;;;21540:30;21606:34;21586:18;;;21579:62;-1:-1:-1;;;21657:18:1;;;21650:48;21715:19;;33885:84:0;21500:240:1;33885:84:0;-1:-1:-1;;;;;33986:33:0;;;;;;:29;:33;;;;;;;;33981:184;;34064:15;;34053:6;34037:13;34047:2;34037:9;:13::i;:::-;:22;;;;:::i;:::-;34036:43;;34028:119;;;;-1:-1:-1;;;34028:119:0;;20401:2:1;34028:119:0;;;20383:21:1;20440:2;20420:18;;;20413:30;20479:34;20459:18;;;20452:62;20550:33;20530:18;;;20523:61;20601:19;;34028:119:0;20373:253:1;34028:119:0;34186:15;;;;34182:182;;;-1:-1:-1;;;;;34257:16:0;;34218:18;34257:16;;;:10;:16;;;;;;34239:34;;:15;:34;:::i;:::-;34218:55;;34309:12;;34296:10;:25;34288:64;;;;-1:-1:-1;;;34288:64:0;;17048:2:1;34288:64:0;;;17030:21:1;17087:2;17067:18;;;17060:30;17126:28;17106:18;;;17099:56;17172:18;;34288:64:0;17020:176:1;34288:64:0;34182:182;;-1:-1:-1;;;;;34388:24:0;;;;;;:18;:24;;;;;;;;34387:25;:52;;;;-1:-1:-1;;;;;;34417:22:0;;;;;;:18;:22;;;;;;;;34416:23;34387:52;:65;;;;-1:-1:-1;34444:8:0;;;;34443:9;34387:65;34384:365;;;-1:-1:-1;;;;;34494:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;34511:11:0;;;;;;:7;:11;;;;;;;;34494:28;34491:179;;;34543:35;34558:4;34564:2;34568:6;34576:1;34543:14;:35::i;:::-;34384:365;;34491:179;34619:35;34634:4;34640:2;34644:6;34652:1;34619:14;:35::i;34384:365::-;34702:35;34717:4;34723:2;34727:6;34735:1;34702:14;:35::i;:::-;-1:-1:-1;;;;;34761:16:0;;;;;;:10;:16;;;;;34780:15;34761:34;;34820:8;;;;34819:9;:25;;;;-1:-1:-1;34840:4:0;;-1:-1:-1;;;;;34832:12:0;;;34840:4;;34832:12;;34819:25;:39;;;;-1:-1:-1;34854:4:0;;-1:-1:-1;;;;;34848:10:0;;;34854:4;;34848:10;;34819:39;:68;;;;-1:-1:-1;;;;;;34863:24:0;;;;;;:18;:24;;;;;;;;34862:25;34819:68;:95;;;;-1:-1:-1;;;;;;34892:22:0;;;;;;:18;:22;;;;;;;;34891:23;34819:95;34816:459;;;34954:16;;;34968:1;34954:16;;;;;;;;;34930:21;;34954:16;;;;;;;;;;-1:-1:-1;34954:16:0;34930:40;;35007:4;34989;34994:1;34989:7;;;;;;-1:-1:-1;;;34989:7:0;;;;;;;;;-1:-1:-1;;;;;34989:23:0;;;:7;;;;;;;;;;:23;;;;35041:6;;:13;;;-1:-1:-1;;;35041:13:0;;;;:6;;;;;:11;;:13;;;;;34989:7;;35041:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35031:4;35036:1;35031:7;;;;;;-1:-1:-1;;;35031:7:0;;;;;;;;;-1:-1:-1;;;;;35031:23:0;;;:7;;;;;;;;;:23;35083:4;;35073:7;;35083:4;;;35073;;35078:1;;35073:7;;;;-1:-1:-1;;;35073:7:0;;;;;;;;;-1:-1:-1;;;;;35073:14:0;;;:7;;;;;;;;;:14;35117:6;;35102:12;;35117:6;:20;35138:24;35156:4;35138:9;:24::i;:::-;35164:4;35117:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35117:52:0;;;;;;;;;;;;:::i;:::-;35170:1;35117:55;;;;;;-1:-1:-1;;;35117:55:0;;;;;;;;;;;;;;;35102:70;;35201:18;;35190:7;:29;35187:76;;35221:42;35238:24;35256:4;35238:9;:24::i;:::-;35221:16;:42::i;:::-;34816:459;;33073:2209;;;:::o;32012:158::-;32053:7;32074:15;32091;32110:19;:17;:19::i;:::-;32073:56;;-1:-1:-1;32073:56:0;-1:-1:-1;32147:15:0;32073:56;;32147:15;:::i;:::-;32140:22;;;;32012:158;:::o;3954:174::-;4011:16;4030:6;;-1:-1:-1;;;;;4047:17:0;;;-1:-1:-1;;;;;;4047:17:0;;;;;;4080:40;;4030:6;;;;;;;4080:40;;4011:16;4080:40;3954:174;;:::o;35363:1266::-;35475:28;35506;35517:7;35526;35506:10;:28::i;:::-;-1:-1:-1;;;;;35551:19:0;;;;;;:11;:19;;;;;;35475:59;;-1:-1:-1;35551:19:0;;35547:117;;;-1:-1:-1;;;;;35627:15:0;;;;;;:7;:15;;;;;;:25;;35645:7;;35627:25;:::i;:::-;-1:-1:-1;;;;;35609:15:0;;;;;;:7;:15;;;;;:43;35547:117;-1:-1:-1;;;;;35678:22:0;;;;;;:11;:22;;;;;;;;35674:132;;;35777:17;;;;-1:-1:-1;;;;;35756:18:0;;;;;;:7;:18;;;;;;:38;;35777:17;35756:38;:::i;:::-;-1:-1:-1;;;;;35735:18:0;;;;;;:7;:18;;;;;:59;35674:132;35852:9;;-1:-1:-1;;;;;35836:15:0;;35852:9;35836:15;;;:7;:15;;;;;;:25;;35852:9;35836:25;:::i;:::-;-1:-1:-1;;;;;35818:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;35912:17;;;35893:18;;;;;;;;;;:36;;35912:17;35893:36;:::i;:::-;-1:-1:-1;;;;;35872:18:0;;;;;;:7;:18;;;;;;;:57;;;;35953:6;;;:10;;;:24;;;35976:1;35967;:6;;;:10;35953:24;35950:56;;;35979:27;35991:1;:6;;;35999:1;:6;;;35979:11;:27::i;:::-;36034:1;36020;:11;;;:15;:34;;;;36053:1;36039;:11;;;:15;36020:34;36017:170;;;36070:39;36084:1;:11;;;36097:1;:11;;;36070:13;:39::i;:::-;36146:15;;;36163:11;;;36129:46;;23131:25:1;;;-1:-1:-1;;;;;36146:15:0;;;;36129:46;;;-1:-1:-1;;;;;;;;;;;36129:46:0;23119:2:1;23104:18;36129:46:0;;;;;;;36017:170;36217:1;36200;:14;;;:18;:40;;;;36239:1;36222;:14;;;:18;36200:40;36197:191;;;36256:48;36273:1;:14;;;36289:1;:14;;;36256:16;:48::i;:::-;36341:18;;36361:14;;;;36324:52;;23131:25:1;;;-1:-1:-1;;;;;36341:18:0;;;;36324:52;;;-1:-1:-1;;;;;;;;;;;36324:52:0;23119:2:1;23104:18;36324:52:0;;;;;;;36197:191;36411:1;36401;:7;;;:11;:26;;;;36426:1;36416;:7;;;:11;36401:26;36398:142;;;36443:27;36453:1;:7;;;36462:1;:7;;;36443:9;:27::i;:::-;17434:42;-1:-1:-1;;;;;36490:38:0;36499:6;-1:-1:-1;;;;;36490:38:0;-1:-1:-1;;;;;;;;;;;36520:1:0;:7;;;36490:38;;;;23131:25:1;;23119:2;23104:18;;23086:76;36490:38:0;;;;;;;;36398:142;36582:9;-1:-1:-1;;;;;36565:46:0;36574:6;-1:-1:-1;;;;;36565:46:0;-1:-1:-1;;;;;;;;;;;36593:1:0;:17;;;36565:46;;;;23131:25:1;;23119:2;23104:18;;23086:76;36565:46:0;;;;;;;;35363:1266;;;;;:::o;36637:1611::-;19444:8;:15;;-1:-1:-1;;19444:15:0;19455:4;19444:15;;;36807:16:::1;::::0;;36821:1:::1;36807:16:::0;;;;;::::1;::::0;;;-1:-1:-1;;36807:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;36807:16:0::1;36783:40;;36856:4;36838;36843:1;36838:7;;;;;;-1:-1:-1::0;;;36838:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;36838:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;36886:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;36886:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;36838:7;;36886:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36876:4;36881:1;36876:7;;;;;;-1:-1:-1::0;;;36876:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;36876:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;36924:4:::1;::::0;36914:7;;36924:4;::::1;::::0;36914;;36919:1:::1;::::0;36914:7;::::1;;;-1:-1:-1::0;;;36914:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;36914:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;36973:6:::1;::::0;36941:53:::1;::::0;36958:4:::1;::::0;36973:6:::1;36982:11:::0;36941:8:::1;:53::i;:::-;37031:6;::::0;:218:::1;::::0;-1:-1:-1;;;37031:218:0;;-1:-1:-1;;;;;37031:6:0;;::::1;::::0;:60:::1;::::0;:218:::1;::::0;37106:11;;37031:6:::1;::::0;37176:4;;37203::::1;::::0;37223:15:::1;::::0;37031:218:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;37283:4:0::1;::::0;37321:29:::1;::::0;-1:-1:-1;;;37321:29:0;;37344:4:::1;37321:29;::::0;::::1;7824:51:1::0;-1:-1:-1;;;;;37283:4:0;;::::1;::::0;-1:-1:-1;37262:11:0::1;::::0;-1:-1:-1;37283:4:0;;37321:14:::1;::::0;7797:18:1;;37321:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37363:40;::::0;-1:-1:-1;;;37363:40:0;;37384:4:::1;37363:40;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;37299:51:0;;-1:-1:-1;;;;;;37363:12:0;::::1;::::0;::::1;::::0;8342:18:1;;37363:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37416:26;37482:11;37467;37446:9;:18;;;:32;;;;:::i;:::-;37445:48;;;;:::i;:::-;37416:77;;37504:29;37576:11;37561;37537:9;:21;;;:35;;;;:::i;:::-;37536:51;;;;:::i;:::-;37614:15;::::0;37600:50:::1;::::0;-1:-1:-1;;;37600:50:0;;-1:-1:-1;;;;;37614:15:0;;::::1;37600:50;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;37504:83:0;;-1:-1:-1;37600:13:0;::::1;::::0;::::1;::::0;8342:18:1;;37600:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37675:18:0::1;::::0;37661:56:::1;::::0;-1:-1:-1;;;37661:56:0;;-1:-1:-1;;;;;37675:18:0;;::::1;37661:56;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;37661:13:0;;::::1;::::0;::::1;::::0;8342:18:1;;37661:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37751:1:0::1;37730:9;:22:::0;;;37763:21;:25;-1:-1:-1;;19482:8:0;:16;;-1:-1:-1;;19482:16:0;;;-1:-1:-1;;;36637:1611:0:o;32178:542::-;32275:7;;32311;;32228;;;;;32329:279;32353:9;:16;32349:20;;32329:279;;;32419:7;32395;:21;32403:9;32413:1;32403:12;;;;;;-1:-1:-1;;;32403:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32403:12:0;32395:21;;;;;;;;;;;;;:31;;:66;;;32454:7;32430;:21;32438:9;32448:1;32438:12;;;;;;-1:-1:-1;;;32438:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32438:12:0;32430:21;;;;;;;;;;;;;:31;32395:66;32391:97;;;32471:7;;32480;;32463:25;;;;;;;32178:542;;:::o;32391:97::-;32521:7;:21;32529:9;32539:1;32529:12;;;;;;-1:-1:-1;;;32529:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32529:12:0;32521:21;;;;;;;;;;;;;32513:29;;:7;:29;:::i;:::-;32503:39;;32575:7;:21;32583:9;32593:1;32583:12;;;;;;-1:-1:-1;;;32583:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32583:12:0;32575:21;;;;;;;;;;;;;32567:29;;:7;:29;:::i;:::-;32557:39;-1:-1:-1;32371:3:0;;;;:::i;:::-;;;;32329:279;;;;32642:7;;32634;;:15;;;;:::i;:::-;32624:7;:25;32620:56;;;32659:7;;32668;;32651:25;;;;;;32178:542;;:::o;32620:56::-;32695:7;;32704;;-1:-1:-1;32178:542:0;-1:-1:-1;32178:542:0:o;29468:383::-;29537:36;;:::i;:::-;29598:29;29610:7;29619;29598:11;:29::i;:::-;29586:41;;29764:52;29776:9;29787:7;29796;29805:10;:8;:10::i;:::-;29764:11;:52::i;:::-;29745:15;;;29638:178;29721:22;;;29638:178;29701:19;;;29638:178;29685:14;;;29638:178;29658:25;;;29638:178;;;29468:383;;;;:::o;28564:124::-;28642:4;28632:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;28657:11:0;:23;;28676:4;;28657:11;:15;;:23;;28676:4;;28657:23;:::i;:::-;;;;-1:-1:-1;;;;28564:124:0:o;28696:249::-;28800:9;28776:11;:20;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;28835:15:0;;-1:-1:-1;;;;;28835:15:0;28823:28;;;;:11;:28;;;;;;;;28820:70;;;28861:15;;-1:-1:-1;;;;;28861:15:0;28853:24;;;;:7;:24;;;;;:37;;28881:9;;28853:24;:37;;28881:9;;28853:37;:::i;:::-;;;;-1:-1:-1;;28820:70:0;28909:15;;-1:-1:-1;;;;;28909:15:0;28901:24;;;;:7;:24;;;;;:36;;28928:9;;28901:24;:36;;28928:9;;28901:36;:::i;28957:279::-;29072:12;29045:11;:23;;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;29110:18:0;;-1:-1:-1;;;;;29110:18:0;29098:31;;;;:11;:31;;;;;;;;29095:79;;;29139:18;;-1:-1:-1;;;;;29139:18:0;29131:27;;;;:7;:27;;;;;:43;;29162:12;;29131:27;:43;;29162:12;;29131:43;:::i;:::-;;;;-1:-1:-1;;29095:79:0;29193:18;;-1:-1:-1;;;;;29193:18:0;29185:27;;;;:7;:27;;;;;:43;;29216:12;;29185:27;:43;;29216:12;;29185:43;:::i;29244:216::-;29332:5;29312:11;:16;;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;29363:18:0;;-1:-1:-1;;;;;29363:18:0;29351:31;;;;:11;:31;;;;;;;;29348:64;;;17434:42;29383:20;;;;:7;:20;;;:29;;29407:5;;29383:20;:29;;29407:5;;29383:29;:::i;:::-;;;;-1:-1:-1;;29348:64:0;17434:42;29423:20;;;;:7;:20;;;:29;;29447:5;;29423:20;:29;;29447:5;;29423:29;:::i;29861:1062::-;29931:28;;:::i;:::-;29977:12;;;29974:932;;30004:17;;;:27;;;30044:8;;29974:932;30073:7;:12;;30084:1;30073:12;30070:836;;;30119:5;:9;30130:4;;30111:17;;:7;:17;:::i;:::-;30110:24;;;;:::i;:::-;30101:6;;;:33;30172:14;;30188:4;;30164:22;;:7;:22;:::i;:::-;30163:29;;;;:::i;:::-;30149:11;;;:43;30232:17;;30250:4;;30224:25;;:7;:25;:::i;:::-;:30;;;;:::i;:::-;30207:14;;;:47;30287:10;;30298:4;;30279:18;;:7;:18;:::i;:::-;:23;;;;:::i;:::-;30269:7;;;:33;30369:14;;30351:8;:17;30339:11;;;;:29;;30351:17;30339:29;:::i;:::-;:44;;;;:::i;:::-;30317:9;:66;;:18;;:66;;;;;:::i;:::-;;;;-1:-1:-1;;30456:14:0;;30435:20;;30423:11;;;;:32;;30435:20;30423:32;:::i;:::-;:47;;;;:::i;:::-;30398:21;:72;;:21;;:72;;;;;:::i;:::-;;;;-1:-1:-1;;30547:7:0;;;;30535:11;;;;30520:14;;;;30513:6;;;;30505:14;;:7;:14;:::i;:::-;:29;;;;:::i;:::-;:41;;;;:::i;:::-;:49;;;;:::i;:::-;30485:17;;;:69;30569:8;;30070:836;30627:5;:9;30637:4;;30619:17;;:7;:17;:::i;:::-;:22;;;;:::i;:::-;30610:6;;;:31;30674:10;;30685:4;;30666:18;;:7;:18;:::i;:::-;:23;;;;:::i;:::-;30656:7;;;:33;30726:20;;30747:4;;30718:28;;:7;:28;:::i;:::-;:33;;;;:::i;:::-;30704:11;;;:47;;;30766:21;:36;;:21;;:36;;30704:47;;30766:36;:::i;:::-;;;;-1:-1:-1;;30864:7:0;;;;30852:11;;;;30845:6;;;;30837:14;;:7;:14;:::i;30931:1073::-;31057:15;;;;;;31187:19;31195:11;31187:7;:19;:::i;:::-;31177:29;-1:-1:-1;31222:12:0;;;31219:776;;-1:-1:-1;31256:7:0;;-1:-1:-1;31274:1:0;;-1:-1:-1;31274:1:0;;-1:-1:-1;31274:1:0;;-1:-1:-1;31274:1:0;31249:33;;31219:776;31302:7;:12;;31313:1;31302:12;31299:696;;;31344:11;31337:1;:6;;;:18;;;;:::i;:::-;31330:25;;31394:11;31382:1;:11;;;:23;;;;:::i;:::-;31370:35;;31450:11;31435:1;:14;;;:26;;;;:::i;:::-;31420:41;;31492:11;31484:1;:7;;;:19;;;;:::i;:::-;31476:27;-1:-1:-1;31476:27:0;31560:12;31550:9;31537:12;31545:4;31537:7;:12;:::i;:::-;:22;;;;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;31518:60;;31593:68;;31299:696;31716:11;31709:1;:6;;;:18;;;;:::i;:::-;31702:25;;31772:11;31757:1;:14;;;:26;;;;:::i;31299:696::-;30931:1073;;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:768:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:238;529:2;526:1;523:9;515:238;;;600:3;587:17;617:31;642:5;617:31;:::i;:::-;661:18;;699:12;;;;731;;;;547:1;540:9;515:238;;;-1:-1:-1;771:5:1;;78:704;-1:-1:-1;;;;;;;78:704:1:o;787:257::-;846:6;899:2;887:9;878:7;874:23;870:32;867:2;;;920:6;912;905:22;867:2;964:9;951:23;983:31;1008:5;983:31;:::i;1049:261::-;1119:6;1172:2;1160:9;1151:7;1147:23;1143:32;1140:2;;;1193:6;1185;1178:22;1140:2;1230:9;1224:16;1249:31;1274:5;1249:31;:::i;1315:398::-;1383:6;1391;1444:2;1432:9;1423:7;1419:23;1415:32;1412:2;;;1465:6;1457;1450:22;1412:2;1509:9;1496:23;1528:31;1553:5;1528:31;:::i;:::-;1578:5;-1:-1:-1;1635:2:1;1620:18;;1607:32;1648:33;1607:32;1648:33;:::i;:::-;1700:7;1690:17;;;1402:311;;;;;:::o;1718:466::-;1795:6;1803;1811;1864:2;1852:9;1843:7;1839:23;1835:32;1832:2;;;1885:6;1877;1870:22;1832:2;1929:9;1916:23;1948:31;1973:5;1948:31;:::i;:::-;1998:5;-1:-1:-1;2055:2:1;2040:18;;2027:32;2068:33;2027:32;2068:33;:::i;:::-;1822:362;;2120:7;;-1:-1:-1;;;2174:2:1;2159:18;;;;2146:32;;1822:362::o;2189:392::-;2254:6;2262;2315:2;2303:9;2294:7;2290:23;2286:32;2283:2;;;2336:6;2328;2321:22;2283:2;2380:9;2367:23;2399:31;2424:5;2399:31;:::i;:::-;2449:5;-1:-1:-1;2506:2:1;2491:18;;2478:32;2519:30;2478:32;2519:30;:::i;2586:325::-;2654:6;2662;2715:2;2703:9;2694:7;2690:23;2686:32;2683:2;;;2736:6;2728;2721:22;2683:2;2780:9;2767:23;2799:31;2824:5;2799:31;:::i;:::-;2849:5;2901:2;2886:18;;;;2873:32;;-1:-1:-1;;;2673:238:1:o;2916:1204::-;3034:6;3042;3095:2;3083:9;3074:7;3070:23;3066:32;3063:2;;;3116:6;3108;3101:22;3063:2;3161:9;3148:23;3190:18;3231:2;3223:6;3220:14;3217:2;;;3252:6;3244;3237:22;3217:2;3280:61;3333:7;3324:6;3313:9;3309:22;3280:61;:::i;:::-;3270:71;;3360:2;3350:12;;3415:2;3404:9;3400:18;3387:32;3444:2;3434:8;3431:16;3428:2;;;3465:6;3457;3450:22;3428:2;3493:24;;;-1:-1:-1;3548:4:1;3540:13;;3536:27;-1:-1:-1;3526:2:1;;3582:6;3574;3567:22;3526:2;3623;3610:16;3646:60;3662:43;3702:2;3662:43;:::i;3646:60::-;3728:3;3752:2;3747:3;3740:15;3780:2;3775:3;3771:12;3764:19;;3811:2;3807;3803:11;3859:7;3854:2;3848;3845:1;3841:10;3837:2;3833:19;3829:28;3826:41;3823:2;;;3885:6;3877;3870:22;3823:2;3912:6;3903:15;;3927:163;3941:2;3938:1;3935:9;3927:163;;;3998:17;;3986:30;;3959:1;3952:9;;;;;4036:12;;;;4068;;3927:163;;;3931:3;4109:5;4099:15;;;;;;;3053:1067;;;;;:::o;4125:497::-;4215:6;4223;4276:2;4264:9;4255:7;4251:23;4247:32;4244:2;;;4297:6;4289;4282:22;4244:2;4342:9;4329:23;4375:18;4367:6;4364:30;4361:2;;;4412:6;4404;4397:22;4361:2;4440:61;4493:7;4484:6;4473:9;4469:22;4440:61;:::i;:::-;4430:71;;;4551:2;4540:9;4536:18;4523:32;4564:28;4586:5;4564:28;:::i;4627:937::-;4722:6;4753:2;4796;4784:9;4775:7;4771:23;4767:32;4764:2;;;4817:6;4809;4802:22;4764:2;4855:9;4849:16;4888:18;4880:6;4877:30;4874:2;;;4925:6;4917;4910:22;4874:2;4953:22;;5006:4;4998:13;;4994:27;-1:-1:-1;4984:2:1;;5040:6;5032;5025:22;4984:2;5074;5068:9;5097:60;5113:43;5153:2;5113:43;:::i;5097:60::-;5179:3;5203:2;5198:3;5191:15;5231:2;5226:3;5222:12;5215:19;;5262:2;5258;5254:11;5310:7;5305:2;5299;5296:1;5292:10;5288:2;5284:19;5280:28;5277:41;5274:2;;;5336:6;5328;5321:22;5274:2;5363:6;5354:15;;5378:156;5392:2;5389:1;5386:9;5378:156;;;5449:10;;5437:23;;5410:1;5403:9;;;;;5480:12;;;;5512;;5378:156;;;-1:-1:-1;5553:5:1;4733:831;-1:-1:-1;;;;;;;4733:831:1:o;5569:255::-;5636:6;5689:2;5677:9;5668:7;5664:23;5660:32;5657:2;;;5710:6;5702;5695:22;5657:2;5747:9;5741:16;5766:28;5788:5;5766:28;:::i;5829:319::-;5894:6;5902;5955:2;5943:9;5934:7;5930:23;5926:32;5923:2;;;5976:6;5968;5961:22;5923:2;6020:9;6007:23;6039:28;6061:5;6039:28;:::i;6153:190::-;6212:6;6265:2;6253:9;6244:7;6240:23;6236:32;6233:2;;;6286:6;6278;6271:22;6233:2;-1:-1:-1;6314:23:1;;6223:120;-1:-1:-1;6223:120:1:o;6348:194::-;6418:6;6471:2;6459:9;6450:7;6446:23;6442:32;6439:2;;;6492:6;6484;6477:22;6439:2;-1:-1:-1;6520:16:1;;6429:113;-1:-1:-1;6429:113:1:o;6547:258::-;6615:6;6623;6676:2;6664:9;6655:7;6651:23;6647:32;6644:2;;;6697:6;6689;6682:22;6644:2;-1:-1:-1;;6725:23:1;;;6795:2;6780:18;;;6767:32;;-1:-1:-1;6634:171:1:o;6810:395::-;6896:6;6904;6912;6920;6973:3;6961:9;6952:7;6948:23;6944:33;6941:2;;;6995:6;6987;6980:22;6941:2;-1:-1:-1;;7023:23:1;;;7093:2;7078:18;;7065:32;;-1:-1:-1;7144:2:1;7129:18;;7116:32;;7195:2;7180:18;7167:32;;-1:-1:-1;6931:274:1;-1:-1:-1;6931:274:1:o;7210:463::-;7263:3;7301:5;7295:12;7328:6;7323:3;7316:19;7354:4;7383:2;7378:3;7374:12;7367:19;;7420:2;7413:5;7409:14;7441:3;7453:195;7467:6;7464:1;7461:13;7453:195;;;7532:13;;-1:-1:-1;;;;;7528:39:1;7516:52;;7588:12;;;;7623:15;;;;7564:1;7482:9;7453:195;;;-1:-1:-1;7664:3:1;;7271:402;-1:-1:-1;;;;;7271:402:1:o;8889:603::-;9001:4;9030:2;9059;9048:9;9041:21;9091:6;9085:13;9134:6;9129:2;9118:9;9114:18;9107:34;9159:4;9172:140;9186:6;9183:1;9180:13;9172:140;;;9281:14;;;9277:23;;9271:30;9247:17;;;9266:2;9243:26;9236:66;9201:10;;9172:140;;;9330:6;9327:1;9324:13;9321:2;;;9400:4;9395:2;9386:6;9375:9;9371:22;9367:31;9360:45;9321:2;-1:-1:-1;9476:2:1;9455:15;-1:-1:-1;;9451:29:1;9436:45;;;;9483:2;9432:54;;9010:482;-1:-1:-1;;;9010:482:1:o;15376:354::-;15578:2;15560:21;;;15617:2;15597:18;;;15590:30;15656:32;15651:2;15636:18;;15629:60;15721:2;15706:18;;15550:180::o;17610:356::-;17812:2;17794:21;;;17831:18;;;17824:30;17890:34;17885:2;17870:18;;17863:62;17957:2;17942:18;;17784:182::o;19081:349::-;19283:2;19265:21;;;19322:2;19302:18;;;19295:30;19361:27;19356:2;19341:18;;19334:55;19421:2;19406:18;;19255:175::o;20973:348::-;21175:2;21157:21;;;21214:2;21194:18;;;21187:30;21253:26;21248:2;21233:18;;21226:54;21312:2;21297:18;;21147:174::o;22562:418::-;22764:2;22746:21;;;22803:2;22783:18;;;22776:30;22842:34;22837:2;22822:18;;22815:62;-1:-1:-1;;;22908:2:1;22893:18;;22886:52;22970:3;22955:19;;22736:244::o;23167:332::-;23374:6;23363:9;23356:25;23417:2;23412;23401:9;23397:18;23390:30;23337:4;23437:56;23489:2;23478:9;23474:18;23466:6;23437:56;:::i;:::-;23429:64;23346:153;-1:-1:-1;;;;23346:153:1:o;23504:582::-;23803:6;23792:9;23785:25;23846:6;23841:2;23830:9;23826:18;23819:34;23889:3;23884:2;23873:9;23869:18;23862:31;23766:4;23910:57;23962:3;23951:9;23947:19;23939:6;23910:57;:::i;:::-;-1:-1:-1;;;;;24003:32:1;;;;23998:2;23983:18;;23976:60;-1:-1:-1;24067:3:1;24052:19;24045:35;23902:65;23775:311;-1:-1:-1;;;23775:311:1:o;24929:275::-;25000:2;24994:9;25065:2;25046:13;;-1:-1:-1;;25042:27:1;25030:40;;25100:18;25085:34;;25121:22;;;25082:62;25079:2;;;25147:18;;:::i;:::-;25183:2;25176:22;24974:230;;-1:-1:-1;24974:230:1:o;25209:183::-;25269:4;25302:18;25294:6;25291:30;25288:2;;;25324:18;;:::i;:::-;-1:-1:-1;25369:1:1;25365:14;25381:4;25361:25;;25278:114::o;25397:128::-;25437:3;25468:1;25464:6;25461:1;25458:13;25455:2;;;25474:18;;:::i;:::-;-1:-1:-1;25510:9:1;;25445:80::o;25530:217::-;25570:1;25596;25586:2;;-1:-1:-1;;;25621:31:1;;25675:4;25672:1;25665:15;25703:4;25628:1;25693:15;25586:2;-1:-1:-1;25732:9:1;;25576:171::o;25752:422::-;25841:1;25884:5;25841:1;25898:270;25919:7;25909:8;25906:21;25898:270;;;25978:4;25974:1;25970:6;25966:17;25960:4;25957:27;25954:2;;;25987:18;;:::i;:::-;26037:7;26027:8;26023:22;26020:2;;;26057:16;;;;26020:2;26136:22;;;;26096:15;;;;25898:270;;;25902:3;25816:358;;;;;:::o;26179:140::-;26237:5;26266:47;26307:4;26297:8;26293:19;26287:4;26373:5;26403:8;26393:2;;-1:-1:-1;26444:1:1;26458:5;;26393:2;26492:4;26482:2;;-1:-1:-1;26529:1:1;26543:5;;26482:2;26574:4;26592:1;26587:59;;;;26660:1;26655:130;;;;26567:218;;26587:59;26617:1;26608:10;;26631:5;;;26655:130;26692:3;26682:8;26679:17;26676:2;;;26699:18;;:::i;:::-;-1:-1:-1;;26755:1:1;26741:16;;26770:5;;26567:218;;26869:2;26859:8;26856:16;26850:3;26844:4;26841:13;26837:36;26831:2;26821:8;26818:16;26813:2;26807:4;26804:12;26800:35;26797:77;26794:2;;;-1:-1:-1;26906:19:1;;;26938:5;;26794:2;26985:34;27010:8;27004:4;26985:34;:::i;:::-;27055:6;27051:1;27047:6;27043:19;27034:7;27031:32;27028:2;;;27066:18;;:::i;:::-;27104:20;;26383:747;-1:-1:-1;;;26383:747:1:o;27135:168::-;27175:7;27241:1;27237;27233:6;27229:14;27226:1;27223:21;27218:1;27211:9;27204:17;27200:45;27197:2;;;27248:18;;:::i;:::-;-1:-1:-1;27288:9:1;;27187:116::o;27308:125::-;27348:4;27376:1;27373;27370:8;27367:2;;;27381:18;;:::i;:::-;-1:-1:-1;27418:9:1;;27357:76::o;27438:135::-;27477:3;-1:-1:-1;;27498:17:1;;27495:2;;;27518:18;;:::i;:::-;-1:-1:-1;27565:1:1;27554:13;;27485:88::o;27578:127::-;27639:10;27634:3;27630:20;27627:1;27620:31;27670:4;27667:1;27660:15;27694:4;27691:1;27684:15;27710:127;27771:10;27766:3;27762:20;27759:1;27752:31;27802:4;27799:1;27792:15;27826:4;27823:1;27816:15;27842:131;-1:-1:-1;;;;;27917:31:1;;27907:42;;27897:2;;27963:1;27960;27953:12;27978:118;28064:5;28057:13;28050:21;28043:5;28040:32;28030:2;;28086:1;28083;28076:12

Swarm Source

ipfs://c064b03aab7fdbcbac88b04ff6bfffa542218e5f5cab2bf03fecfac640609fa2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Solidblock is a project of cloud computing project that offers a development platform that includes build, deploy, and serverless for web3 with AI.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.