Token Magus Nodes

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
10,000,000 MAGUS

Holders:
240 addresses

Transfers:
-

Contract:
0xa57ca211cd6820bd3d930978271538d07e31a2120xA57ca211cd6820bd3d930978271538d07e31A212

Decimals:
6

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
magus

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 2: magusTookeenNew.sol
/*Auther by STQC, Please credit this repo and my github https://github.com/stqc if you use this in your project */
/**
 *Submitted for verification at BscScan.com on 2021-07-27
*/

pragma solidity ^0.8.0;
// SPDX-License-Identifier: Creative Commons Attribution Non Commercial Share Alike 4.0 International

import "magus.sol";


interface IUniswapV2Factory {
    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;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    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;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

interface nodeMethods{

   
    function confirmSaleOnP2P(address seller, address buyer, uint256 amount) external;

}

contract magus is Context, IBEP20, Ownable, ReentrancyGuard, nodeMethods {
  using SafeMath for uint256;
  using Address for address;
    
    
  mapping (address => uint256) private _balances;
  mapping (address => uint256) public _interest;
  mapping (address => uint256) public _lastClaim;
  mapping(address=>uint256) public nodeBalance;
  mapping (address => mapping (address => uint256)) private _allowances;
  mapping(address => bool) private exclude;
  mapping(address => bool) private isHolder;
  mapping (uint256=>address)private tokensForClaim;
  mapping(address=>uint256) private wasInSale;
  mapping(address=>bool) private blackList;
  mapping(address=>bool) public claimedPre;
 
  uint8 private _decimals;
  uint256 private _totalSupply;
  uint256 private _burntamt;
  uint256 private totalTaxCollected;
  uint256 public earlySaleTax = 20; 
  uint256 public minAmount;
  uint256 public maxTxAllowed;
  uint256 public nodeSupply;

  uint256 public claimTax=10;
  uint256 public launchTime;
  uint256 public nodePrice;
  uint256 public availableNodes;
  uint256 public threshold;
  uint256 public presaleTokens;
  string private _symbol;
  string private _name;
  
  
  address public USDC =0xc21223249CA28397B4B6541dfFaEcC539BfF0c59;//mainnet cro
  address public treasuryWallet =0x96c10FC094fC95f4bD4E4F85E74F7d6DeB28947d;//treasuryWallet
  address public devWallet =0x8c46309D78e1e80bCeFE915aBBeC0FB15eEd085c;//devWallet
  address public rewardsPool= 0x243357d074270993B83229f49f5c2B825493c699;
  address public burnAddress = 0x000000000000000000000000000000000000dEaD; //burnAddress
  address public presale;
  address private P2P;
  IUniswapV2Router02 public immutable uniswapV2Router;
  address public immutable uniswapV2Pair;

 
  constructor() ReentrancyGuard() public {
   
    _decimals = 6;
    _totalSupply = 10000000*10**uint256(_decimals); 
    presaleTokens = 150000*10**uint256(_decimals);
    uint256 initialTransfer = _totalSupply.sub(presaleTokens);
    nodeSupply = 100000;
    availableNodes=nodeSupply;
    nodePrice = 100;
    _balances[msg.sender] = initialTransfer;
    _name = "Magus Nodes";
    _symbol = "MAGUS";
    maxTxAllowed = 0*10**uint256(_decimals);
    minAmount = 1000*10**uint256(_decimals);

    exclude[owner()]=true;
    exclude[address(this)]=true;
    exclude[treasuryWallet]=true;
    exclude[burnAddress]=true;
    exclude[devWallet]=true;

    
    IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);//pancake v2 router
         
    address PairCreated = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), USDC);
        
    uniswapV2Router = _uniswapV2Router;
    uniswapV2Pair = PairCreated;
     launchTime=block.timestamp;
    emit Transfer(address(0), msg.sender, initialTransfer);
    emit Transfer(address(0),address(this),presaleTokens);
  }

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view override returns (address) {
    return owner();
  }

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view override returns (uint8) {
    return _decimals;
  }

  
  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view override returns (string memory) {
    return _symbol;
  }

  /**
  * @dev Returns the token name.
  */
  function name() external view override returns (string memory) {
    return _name;
  }

  /**
   * @dev See {BEP20-totalSupply}.
   */
  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }
  
    function total_burnt() external view returns(uint256){
        return _burntamt;
    }
    
  /**
   * @dev See {BEP20-balanceOf}.
   */
  function balanceOf(address account) public view override returns (uint256) {
      return _balances[account];
     
  }
  
 
    function changeDevWallet(address add) external onlyOwner{
        devWallet = add;
    }    
    function changeRewardWallet(address add) external onlyOwner{
        rewardsPool = add;
    }
    function changeTreasurey(address add) external onlyOwner{
        treasuryWallet = add;
    }
  
   function totalburnt() public view returns(uint256){
       return _burntamt;
   }
      
  function isExcludedfromFee(address account) external view returns(bool){
        return exclude[account];
    }
 
 function checkBlackList(address account) external view returns (bool){
     return blackList[account];
 }

 function airdropNode(address nodeOwner,uint256 amount) external onlyOwner{
     _lastClaim[nodeOwner]=block.timestamp;
    nodeBalance[nodeOwner] = nodeBalance[nodeOwner].add(amount);
    availableNodes=availableNodes.sub(amount);
 }
  
  function addMorePresaleTokens(uint256 amount) external onlyOwner{
    amount=amount*10**uint256(_decimals);
    _balances[msg.sender]=_balances[msg.sender].sub(amount);
    presaleTokens=presaleTokens.add(amount);
    emit Transfer(msg.sender,address(this),amount);
  }
  function removeePresaleTokens(uint256 amount) external onlyOwner{
    amount=amount*10**uint256(_decimals);
    presaleTokens=presaleTokens.sub(amount);
    _balances[msg.sender] = _balances[msg.sender].add(amount);
    emit Transfer(address(this),msg.sender,amount);
  }
     
  function claimTokenAndNode() external{
    require(!claimedPre[msg.sender],"You have already made your claims");
    magusPresale MagusPre = magusPresale(presale);
    require(MagusPre.balanceOf(msg.sender)>0,"You have no presale tokens");
    claimedPre[msg.sender]=true;
    uint256 bal = MagusPre.balanceOf(msg.sender);
    bal = bal.div(100);
    uint256 nodeToGive = bal.div(2);
    bal = bal.sub(nodeToGive);
    nodeToGive = nodeToGive.div(10**uint256(_decimals));
    availableNodes = availableNodes.sub(nodeToGive);
    presaleTokens= presaleTokens.sub(bal.mul(100));
    nodeBalance[msg.sender] = nodeBalance[msg.sender].add(nodeToGive);
    _balances[msg.sender] = _balances[msg.sender].add(bal.mul(100));
    _lastClaim[msg.sender] = block.timestamp;

    emit Transfer(address(this),msg.sender,bal.mul(100));
  }
 
 
  function manualburn( uint256 amount) external  returns (bool){
        _burn(msg.sender,amount);
        return true;
    }
    

    function updatePresaleAddress(address pre) external onlyOwner{
            presale =pre;
    }

    function removeFromFee(address account) external onlyOwner{
        exclude[account]=true;
    }
    
    function includeInFee(address account) external onlyOwner{
        exclude[account]=false;
    }

    function setMaxTx(uint256 amount) external onlyOwner{
        maxTxAllowed = amount*10**uint256(_decimals);
    }

    function changeMinAmount(uint256 amount) external onlyOwner{
        minAmount = amount*10**uint256(_decimals);
    }

    

    function addToBlacklist(address account) external onlyOwner{
        blackList[account]=true;
    }
    function removeFromBlackList(address account) external onlyOwner{
        blackList[account]=false;
    }
    function setP2Paddress(address p2p) external onlyOwner{
      P2P = p2p;
    }

  /**
   * @dev See {BEP20-transfer}.
   *
   * Requirements:
   *
   * - `recipient` cannot be the zero address.
   * - the caller must have a balance of at least `amount`.
   */
  function transfer(address recipient, uint256 amount) external override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  /**
   * @dev See {BEP20-allowance}.
   */
  function allowance(address owner, address spender) external view override returns (uint256) {
    return _allowances[owner][spender];
  }

  /**
   * @dev See {BEP20-approve}.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function approve(address spender, uint256 amount) external override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }
    
  /**
   * @dev See {BEP20-transferFrom}.
   *
   * Emits an {Approval} event indicating the updated allowance. This is not
   * required by the EIP. See the note at the beginning of {BEP20};
   *
   * Requirements:
   * - `sender` and `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   * - the caller must have allowance for `sender`'s tokens of at least
   * `amount`.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "trnsfr amt > alonce"));
    return true;
  }

  /**
   * @dev Atomically increases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {BEP20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  /**
   * @dev Atomically decreases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {BEP20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   * - `spender` must have allowance for the caller of at least
   * `subtractedValue`.
   */
  function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "alonce < 0"));
    return true;
  }
   
    receive() external payable{}
  /**
   * @dev Moves tokens `amount` from `sender` to `recipient`.
   *
   * This is internal function is equivalent to {transfer}, and can be used to
   * e.g. implement automatic token fees, slashing mechanisms, etc.
   *
   * Emits a {Transfer} event.
   *
   * Requirements:
   *
   * - `sender` cannot be the zero address.
   * - `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   */
  function _transfer(address sender, address recipient, uint256 amount) internal {
    require(sender != address(0), "trnfr frm 0 addr");
    require(recipient != address(0), "trnfr to 0 addr");
    require(!blackList[sender],"you have been flagged as a bot please contact the devs");
    require(!blackList[recipient],"you have been flagged as a bot please contact the devs");
        
        uint256 tax=1;
        uint256 txTax;
        if(exclude[sender] || exclude[recipient]){    
       
        _balances[sender] = _balances[sender].sub(amount);
       
        
        _balances[recipient] = _balances[recipient].add(amount);
        
        }
        
        else{
            require(amount<=maxTxAllowed,"amount larger than allowed");
                if(sender!=address(uniswapV2Router) && sender!=address(uniswapV2Pair) && _balances[devWallet]>=threshold){
                    swapUSDC();
                }
                  uint256 daysSincelaunch = (block.timestamp.sub(launchTime)).div(86400);
                  if(daysSincelaunch<10 && sender!=address(uniswapV2Pair) && sender!=address(uniswapV2Router)){
                      tax= 20-(daysSincelaunch.mul(2));
                  }

                  _balances[sender]= _balances[sender].sub(amount);
                   txTax = (amount.mul(tax)).div(100);
                  amount=amount.sub(txTax);
                  _balances[rewardsPool] = _balances[rewardsPool].add(txTax.div(2));
                  txTax=txTax.sub(txTax.div(2));
                  _balances[devWallet]=_balances[devWallet].add(txTax);
                  _balances[recipient]=_balances[recipient].add(amount); 
        }
                
    emit Transfer(sender, recipient, amount);
    emit Transfer(sender,devWallet,txTax);
    emit Transfer(sender,rewardsPool,txTax);
    
  }
  function setThreshold(uint256 amt) external onlyOwner{
    amt = amt*10**uint256(_decimals);
    threshold = amt;
  }

function swapUSDC() internal  nonReentrant{
    _balances[devWallet] = _balances[devWallet].sub(threshold);
    _balances[address(this)] = _balances[address(this)].add(threshold);

    emit Transfer(devWallet,address(this),threshold);

    address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USDC;
         _approve(address(this), address(uniswapV2Router), threshold);
    
        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            threshold,
            0, // accept any amount of USDC
            path,
            devWallet,
            block.timestamp
        );


}
  
 /**************************************************************
                    NODE RELATED FUNCTIONS
 ****************************************************************/
  
  function makeClaimNodeReward(address claimer) external nonReentrant{
    //require(block.timestamp.sub(_lastClaim[claimer])>=1 days,"Can't claim more than once per day");
    uint256 dayCount = (block.timestamp.sub(_lastClaim[claimer])).div(86400);
    if(dayCount>0){
    _lastClaim[claimer]=block.timestamp;
    uint256 roi = nodeBalance[claimer]*10**uint256(_decimals);
    roi=roi.mul(dayCount);
    //add a multiplier of days here in the code
    _balances[rewardsPool] =_balances[rewardsPool].sub(roi);
    uint256 txTax = (roi.mul(claimTax)).div(100);
    uint256 toDev = (txTax.mul(10)).div(100);
    roi = roi.sub(txTax);
    txTax=txTax.sub(toDev);
    _balances[devWallet] =_balances[devWallet].add(toDev);
    txTax =txTax.sub(toDev);
    _balances[treasuryWallet] = _balances[treasuryWallet].add(toDev);
    _balances[rewardsPool] =_balances[rewardsPool].add(txTax);
    _balances[claimer] = _balances[claimer].add(roi);
    _interest[claimer] =_interest[claimer].add(roi);
    emit Transfer(rewardsPool,claimer,roi);
    emit Transfer(rewardsPool,devWallet,toDev);
    emit Transfer(rewardsPool,treasuryWallet,toDev);
    emit Transfer(address(this),rewardsPool,txTax);
    }
    
    
  }

   function buyNode(uint256 amount) external { 
    require(amount.mod(100)==0,"You can buy nodes only in multiples of 100");
    require(availableNodes>0,"nodes available are 0 headover to P2P");
    uint256 numOfNodes = amount.div(100);
    uint256 cost = amount*10**uint256(_decimals);
    uint256 toRew= cost.div(2);
    _balances[msg.sender] = _balances[msg.sender].sub(cost);
    cost = cost.sub(toRew);
    _balances[rewardsPool] = _balances[rewardsPool].add(toRew);
    _balances[devWallet] =_balances[devWallet].add(cost);
    availableNodes=availableNodes.sub(numOfNodes);
    this.makeClaimNodeReward(msg.sender);
    nodeBalance[msg.sender] = nodeBalance[msg.sender].add(numOfNodes);
    emit Transfer(msg.sender,address(this),cost.add(toRew));
    emit Transfer(address(this),rewardsPool,toRew);
    emit Transfer(address(this),devWallet,cost);
  }
   
  
   function confirmSaleOnP2P(address seller, address buyer ,uint256 amount) external override{
      require(msg.sender==P2P,"you are not authorized to call this function");
      this.makeClaimNodeReward(seller);
      this.makeClaimNodeReward(buyer);
      if(_lastClaim[buyer]==0){
          _lastClaim[buyer]=block.timestamp;
      }
      nodeBalance[seller] =nodeBalance[seller].sub(amount);
      nodeBalance[buyer] = nodeBalance[buyer].add(amount);

   }
  /***************************************************************
                    NODE FUNCTION END
  ***************************************************************/                  
    
    function pricePerToken(uint256 amount) external view returns(uint256){
        IBEP20 USD = IBEP20(USDC);
        uint256 busdinLP = USD.balanceOf(uniswapV2Pair);
        uint256 tokensInLP = balanceOf(uniswapV2Pair);
        uint256 priceInUSD = (busdinLP.mul(10**uint256(_decimals))).div(tokensInLP);
        return amount.mul(priceInUSD);
    }
    



  /**
   * @dev Destroys `amount` tokens from `account`, reducing the
   * total supply.
   *
   * Emits a {Transfer} event with `to` set to the zero address.
   *
   * Requirements
   *
   * - `account` cannot be the zero address.
   * - `account` must have at least `amount` tokens.
   */
  function _burn(address account, uint256 amount) internal {
    require(account != address(0), "brn frm 0 addr");

    _balances[account] = _balances[account].sub(amount, "brn amt > bal");
    _balances[burnAddress] = _balances[burnAddress].add(amount);
    _burntamt = _burntamt.add(amount);
    emit Transfer(account, address(0), amount);
  }
  
 
  /**
   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
   *
   * This is internal function is equivalent to `approve`, and can be used to
   * e.g. set automatic allowances for certain subsystems, etc.
   *
   * Emits an {Approval} event.
   *
   * Requirements:
   *
   * - `owner` cannot be the zero address.
   * - `spender` cannot be the zero address.
   */
  function _approve(address owner, address spender, uint256 amount) internal {
    require(owner != address(0), "approve frm 0 add");
    require(spender != address(0), "approve to 0 add");

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }

  /**
   * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
   * from the caller's allowance.
   *
   * See {_burn} and {_approve}.
   */
  function _burnFrom(address account, uint256 amount) internal {
    _burn(account, amount);
    _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "brn amt > alonce"));
  }
}

File 1 of 2: magus.sol
/* Code by STQC find me on https://github.com/stqc */


// SPDX-License-Identifier: Creative Commons Attribution Non Commercial Share Alike 4.0 International
pragma solidity ^0.8.0;

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

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

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

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

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

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

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

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

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

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
  // Empty internal constructor, to prevent people from mistakenly deploying
  // an instance of this contract, which should be used via inheritance.
  constructor () { }

  function _msgSender() internal view returns (address) {
    return msg.sender;
  }

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Returns the multiplication of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `*` operator.
   *
   * Requirements:
   * - Multiplication cannot overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return div(a, b, "SafeMath: division by zero");
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, errorMessage);
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    return mod(a, b, "SafeMath: modulo by zero");
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts with custom message when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
  address private _owner;

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

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

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

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

  /**
   * @dev Leaves the contract without owner. It will not be possible to call
   * `onlyOwner` functions anymore. Can only be called by the current owner.
   *
   * NOTE: Renouncing ownership will leave the contract without an owner,
   * thereby removing any functionality that is only available to the owner.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}



contract ReentrancyGuard {
    bool private _notEntered;

    constructor () {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "low-lvl call fail");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "lowlvl call with val fail");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "low bal 4 call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "call 2 nocontract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract magusPresale is Context, IBEP20, Ownable, ReentrancyGuard {
  using SafeMath for uint256;
  using Address for address;
    
   
mapping (address => uint256) private _balances;
mapping(address=>bool) private hasClaimed;
mapping (address => mapping (address => uint256)) private _allowances;
 mapping(address=>bool) public isWhiteListed;
 mapping(address=>uint256) public contAMT;
  uint8 private _decimals;
  uint256 private _totalSupply;
  uint256 private _burntamt;
  string private _symbol;
  string private _name;

 
 address private magusContract;

    modifier onlyContract(){
        require(msg.sender==address(magusContract),"You are not the contract");
        _;
    }
  constructor() ReentrancyGuard()  {
   
    _decimals = 6;
    _totalSupply = 0*10**uint256(_decimals);
    
    _balances[msg.sender] = _totalSupply;
    _name = "Magus Presale";
    _symbol = "MagusPre";
    
    emit Transfer(address(0), msg.sender, _totalSupply);
  }

  function insertMagusAdd(address con) public onlyOwner{
    magusContract=con;
  }
  function addToWhiteList(address [] calldata add)  external onlyOwner{
    for(uint256 i=0; i<add.length; i++){
    isWhiteListed[add[i]]=true;
    }
  }
  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view override returns (address) {
    return owner();
  }

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view override returns (uint8) {
    return _decimals;
  }

  
  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view override returns (string memory) {
    return _symbol;
  }

  /**
  * @dev Returns the token name.
  */
  function name() external view override returns (string memory) {
    return _name;
  }

  /**
   * @dev See {BEP20-totalSupply}.
   */
  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }
  
   function total_burnt() external view returns(uint256){
        return _burntamt;
  }
    
  /**
   * @dev See {BEP20-balanceOf}.
   */
  function balanceOf(address account) public view override returns (uint256) {
      return _balances[account];
     
  }
  
   function totalburnt() public view returns(uint256){
       return _burntamt;
   }
       
    
   function checkClaimed(address acc) public view returns(bool){
     return hasClaimed[acc];
   } 
    
  /**
   * @dev See {BEP20-transfer}.
   *
   * Requirements:
   *
   * - `recipient` cannot be the zero address.
   * - the caller must have a balance of at least `amount`.
   */
  function transfer(address recipient, uint256 amount) external override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  /**
   * @dev See {BEP20-allowance}.
   */
  function allowance(address owner, address spender) external view override returns (uint256) {
    return _allowances[owner][spender];
  }

  /**
   * @dev See {BEP20-approve}.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function approve(address spender, uint256 amount) external override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }
    
  /**
   * @dev See {BEP20-transferFrom}.
   *
   * Emits an {Approval} event indicating the updated allowance. This is not
   * required by the EIP. See the note at the beginning of {BEP20};
   *
   * Requirements:
   * - `sender` and `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   * - the caller must have allowance for `sender`'s tokens of at least
   * `amount`.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "trnsfr amt > alonce"));
    return true;
  }

  /**
   * @dev Atomically increases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {BEP20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  /**
   * @dev Atomically decreases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {BEP20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   * - `spender` must have allowance for the caller of at least
   * `subtractedValue`.
   */
  function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "alonce < 0"));
    return true;
  }
   
  /**
   * @dev Moves tokens `amount` from `sender` to `recipient`.
   *
   * This is internal function is equivalent to {transfer}, and can be used to
   * e.g. implement automatic token fees, slashing mechanisms, etc.
   *
   * Emits a {Transfer} event.
   *
   * Requirements:
   *
   * - `sender` cannot be the zero address.
   * - `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   */
  function _transfer(address sender, address recipient, uint256 amount) internal {
    require(sender != address(0), "trnfr frm 0 addr");
    require(recipient != address(0), "trnfr to 0 addr");
    _balances[sender]=_balances[sender].sub(amount);
    _balances[recipient] = _balances[recipient].add(amount);
    emit Transfer(sender,recipient, amount);  
  }
  
  function fund(uint256 amount) external nonReentrant{
      require(amount>=200*10**uint256(_decimals),"Minimum contribution is $200");
      require(amount<=1000*10**uint256(_decimals),"Maximum contribution is $1000");
      require(contAMT[msg.sender]<=1000*10**uint256(_decimals),"can't contribute more than $1000");
      require(isWhiteListed[msg.sender]==true,"You are not whitelisted");
      IBEP20 USDC = IBEP20(0xc21223249CA28397B4B6541dfFaEcC539BfF0c59); // write address

      uint256 prevBalance=USDC.balanceOf(owner());
      
      // USDC.approve(address(this), amount);
      USDC.transferFrom(msg.sender, owner(), amount);
      

     require(USDC.balanceOf(owner()).sub(prevBalance)>=amount,"Amount not successfully transfered");

      _totalSupply = _totalSupply.add(amount);
      contAMT[msg.sender] = contAMT[msg.sender].add(amount);
      _balances[owner()] = _balances[owner()].add(amount);
      _transfer(owner(),msg.sender, amount);
      hasClaimed[msg.sender]=false;
  }
  
  function changeHasClaimed(address presaler,bool state) external onlyOwner {
      hasClaimed[presaler]=state;
  }

  function changeHasClaimedFromContract(address presaler) external onlyContract{
      hasClaimed[presaler]=true;
      _balances[presaler]=0;
  }
 
  /**
   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
   *
   * This is internal function is equivalent to `approve`, and can be used to
   * e.g. set automatic allowances for certain subsystems, etc.
   *
   * Emits an {Approval} event.
   *
   * Requirements:
   *
   * - `owner` cannot be the zero address.
   * - `spender` cannot be the zero address.
   */
  function _approve(address owner, address spender, uint256 amount) internal {
    require(owner != address(0), "approve frm 0 add");
    require(spender != address(0), "approve to 0 add");

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }

  /**
   * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
   * from the caller's allowance.
   *
   * See {_burn} and {_approve}.
   */
  function _burnFrom(address account, uint256 amount) internal {
   // _burn(account, amount);
    _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "brn amt > alonce"));
  }
}

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"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_interest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addMorePresaleTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nodeOwner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropNode","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":[],"name":"availableNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"changeDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"changeRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"changeTreasurey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokenAndNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedPre","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"confirmSaleOnP2P","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySaleTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedfromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"claimer","type":"address"}],"name":"makeClaimNodeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualburn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nodeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pricePerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeePresaleTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p2p","type":"address"}],"name":"setP2Paddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","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":"total_burnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalburnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pre","type":"address"}],"name":"updatePresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260146010819055600a9055601c80546001600160a01b031990811673c21223249ca28397b4b6541dffaecc539bff0c5917909155601d805482167396c10fc094fc95f4bd4e4f85e74f7d6deb28947d179055601e80548216738c46309d78e1e80bcefe915abbec0fb15eed085c179055601f8054821673243357d074270993b83229f49f5c2b825493c6991790556020805490911661dead179055348015620000ac57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b1916600160a01b179055600c805460ff191660069081179091556200011e90600a62000684565b6200012d906298968062000740565b600d55600c54620001439060ff16600a62000684565b6200015290620249f062000740565b601981905550600062000178601954600d546200047060201b6200201a1790919060201c565b620186a060138190556017556064601655336000908152600160209081526040918290208390558151808301909252600b8083526a4d61677573204e6f64657360a81b92909101918252919250620001d491601b91906200050b565b50604080518082019091526005808252644d4147555360d81b60209092019182526200020391601a916200050b565b50600c54620002179060ff16600a62000684565b6200022490600062000740565b601255600c546200023a9060ff16600a62000684565b62000248906103e862000740565b601155600160066000620002646000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260068452828120805486166001908117909155601d548316825283822080548716821790558454831682528382208054871682179055601e5490921681528281208054909516909117909355805163c45a015560e01b8152905173145677fc4d9b8f19b5d56d1820c48e0443049a309392849263c45a01559260048083019392829003018186803b1580156200032a57600080fd5b505afa1580156200033f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003659190620005b1565b601c546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b158015620003b257600080fd5b505af1158015620003c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ed9190620005b1565b6001600160601b0319606084811b821660805282901b1660a0524260155560405190915033906000906000805160206200399283398151915290620004359087815260200190565b60405180910390a36019546040519081523090600090600080516020620039928339815191529060200160405180910390a3505050620007cf565b6000620004ba83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620004c360201b60201c565b90505b92915050565b60008184841115620004f35760405162461bcd60e51b8152600401620004ea9190620005e3565b60405180910390fd5b50600062000502848662000762565b95945050505050565b82805462000519906200077c565b90600052602060002090601f0160209004810192826200053d576000855562000588565b82601f106200055857805160ff191683800117855562000588565b8280016001018555821562000588579182015b82811115620005885782518255916020019190600101906200056b565b50620005969291506200059a565b5090565b5b808211156200059657600081556001016200059b565b600060208284031215620005c457600080fd5b81516001600160a01b0381168114620005dc57600080fd5b9392505050565b600060208083528351808285015260005b818110156200061257858101830151858201604001528201620005f4565b8181111562000625576000604083870101525b50601f01601f1916929092016040019392505050565b600181815b808511156200067c578160001904821115620006605762000660620007b9565b808516156200066e57918102915b93841c939080029062000640565b509250929050565b6000620004ba83836000826200069d57506001620004bd565b81620006ac57506000620004bd565b8160018114620006c55760028114620006d057620006f0565b6001915050620004bd565b60ff841115620006e457620006e4620007b9565b50506001821b620004bd565b5060208310610133831016604e8410600b841016171562000715575081810a620004bd565b6200072183836200063b565b8060001904821115620007385762000738620007b9565b029392505050565b60008160001904831182151516156200075d576200075d620007b9565b500290565b600082821015620007775762000777620007b9565b500390565b600181811c908216806200079157607f821691505b60208210811415620007b357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c61315f62000833600039600081816106ed01528181611735015281816117c60152818161239b01526124320152600081816104bb0152818161235e0152818161247001528181612ba90152612bed015261315f6000f3fe6080604052600436106103b15760003560e01c806370d5ae05116101e7578063ac6ae79e1161010d578063e4f282ad116100a0578063f1fec2b81161006f578063f1fec2b814610b58578063f2fde38b14610b6e578063f4754847146106c6578063fdea8e0b14610b8e57600080fd5b8063e4f282ad14610abf578063e8c231dc14610af8578063ea2f0b3714610b18578063edd47fe614610b3857600080fd5b8063d1cc6e3f116100dc578063d1cc6e3f14610a19578063d600ecc114610a39578063dd62ed3e14610a59578063e34ffcb814610a9f57600080fd5b8063ac6ae79e1461098c578063b8781c82146109b9578063bc337182146109d9578063bd8d8211146109f957600080fd5b80638ea5220f11610185578063a457c2d711610154578063a457c2d71461090c578063a6dee3191461092c578063a9059cbb1461094c578063abe110b61461096c57600080fd5b80638ea5220f146108a157806395d89b41146108c1578063960bfe04146108d65780639b2cb5d8146108f657600080fd5b806385b8154e116101c157806385b8154e14610843578063893d20e81461086357806389a30271146108815780638da5cb5b1461086357600080fd5b806370d5ae05146107f8578063715018a614610818578063790ca4131461082d57600080fd5b806339509351116102d7578063489c3a0a1161026a5780634d5496a8116102395780634d5496a81461074f5780635f6d54ac1461077c578063683c67dd1461079257806370a08231146107c257600080fd5b8063489c3a0a146106c657806349bd5a5e146106db5780634a49ac4c1461070f5780634bbe59041461072f57600080fd5b806342cde4e8116102a657806342cde4e81461065a57806344337ea114610670578063448883d7146106905780634626402b146106a657600080fd5b806339509351146105cd5780633b73904a146105ed5780633e7556ed1461061a578063420a7bb71461063a57600080fd5b80631d820e4f1161034f5780632d9af9211161031e5780632d9af921146105605780632fde382614610575578063313ce5671461059557806334789740146105b757600080fd5b80631d820e4f146104f2578063204401e71461050857806323b872dd1461051e57806324d01aa21461053e57600080fd5b80630a09815c1161038b5780630a09815c1461044c5780630b84a6c6146104705780631694505e146104a957806318160ddd146104dd57600080fd5b80630359fea9146103bd57806306fdde03146103fa578063095ea7b31461041c57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b50601f546103dd906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040657600080fd5b5061040f610bae565b6040516103f19190612dda565b34801561042857600080fd5b5061043c610437366004612d7e565b610c40565b60405190151581526020016103f1565b34801561045857600080fd5b5061046260195481565b6040519081526020016103f1565b34801561047c57600080fd5b5061043c61048b366004612cf4565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104b557600080fd5b506103dd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e957600080fd5b50600d54610462565b3480156104fe57600080fd5b5061046260125481565b34801561051457600080fd5b5061046260175481565b34801561052a57600080fd5b5061043c610539366004612d42565b610c57565b34801561054a57600080fd5b5061055e610559366004612cf4565b610cf7565b005b34801561056c57600080fd5b5061055e610d4c565b34801561058157600080fd5b5061055e610590366004612cf4565b61102b565b3480156105a157600080fd5b50600c5460405160ff90911681526020016103f1565b3480156105c357600080fd5b5061046260105481565b3480156105d957600080fd5b5061043c6105e8366004612d7e565b611077565b3480156105f957600080fd5b50610462610608366004612cf4565b60026020526000908152604090205481565b34801561062657600080fd5b5061055e610635366004612cf4565b6110ad565b34801561064657600080fd5b5061055e610655366004612d42565b6110f9565b34801561066657600080fd5b5061046260185481565b34801561067c57600080fd5b5061055e61068b366004612cf4565b6112c6565b34801561069c57600080fd5b5061046260145481565b3480156106b257600080fd5b50601d546103dd906001600160a01b031681565b3480156106d257600080fd5b50600e54610462565b3480156106e757600080fd5b506103dd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561071b57600080fd5b5061055e61072a366004612cf4565b611314565b34801561073b57600080fd5b5061055e61074a366004612da8565b61135f565b34801561075b57600080fd5b5061046261076a366004612cf4565b60036020526000908152604090205481565b34801561078857600080fd5b5061046260135481565b34801561079e57600080fd5b5061043c6107ad366004612cf4565b600b6020526000908152604090205460ff1681565b3480156107ce57600080fd5b506104626107dd366004612cf4565b6001600160a01b031660009081526001602052604090205490565b34801561080457600080fd5b506020546103dd906001600160a01b031681565b34801561082457600080fd5b5061055e61140a565b34801561083957600080fd5b5061046260155481565b34801561084f57600080fd5b5061043c61085e366004612da8565b61147e565b34801561086f57600080fd5b506000546001600160a01b03166103dd565b34801561088d57600080fd5b50601c546103dd906001600160a01b031681565b3480156108ad57600080fd5b50601e546103dd906001600160a01b031681565b3480156108cd57600080fd5b5061040f611492565b3480156108e257600080fd5b5061055e6108f1366004612da8565b6114a1565b34801561090257600080fd5b5061046260115481565b34801561091857600080fd5b5061043c610927366004612d7e565b6114ec565b34801561093857600080fd5b5061055e610947366004612cf4565b611556565b34801561095857600080fd5b5061043c610967366004612d7e565b6115a4565b34801561097857600080fd5b5061055e610987366004612cf4565b6115b1565b34801561099857600080fd5b506104626109a7366004612cf4565b60046020526000908152604090205481565b3480156109c557600080fd5b5061055e6109d4366004612d7e565b6115fd565b3480156109e557600080fd5b5061055e6109f4366004612da8565b611684565b348015610a0557600080fd5b5061055e610a14366004612cf4565b6116cf565b348015610a2557600080fd5b50610462610a34366004612da8565b61171b565b348015610a4557600080fd5b5061055e610a54366004612cf4565b611844565b348015610a6557600080fd5b50610462610a74366004612d0f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610aab57600080fd5b5061055e610aba366004612da8565b611bcb565b348015610acb57600080fd5b5061043c610ada366004612cf4565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610b0457600080fd5b5061055e610b13366004612da8565b611c16565b348015610b2457600080fd5b5061055e610b33366004612cf4565b611cbe565b348015610b4457600080fd5b5061055e610b53366004612da8565b611d09565b348015610b6457600080fd5b5061046260165481565b348015610b7a57600080fd5b5061055e610b89366004612cf4565b611fe4565b348015610b9a57600080fd5b506021546103dd906001600160a01b031681565b6060601b8054610bbd90613078565b80601f0160208091040260200160405190810160405280929190818152602001828054610be990613078565b8015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b5050505050905090565b6000610c4d338484612063565b5060015b92915050565b6000610c6484848461214f565b610ced8433610ce8856040518060400160405280601381526020017274726e73667220616d74203e20616c6f6e636560681b815250600560008b6001600160a01b03166001600160a01b031681526020019081526020016000206000610cc73390565b6001600160a01b031681526020810191909152604001600020549190612698565b612063565b5060019392505050565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610d2190612e2f565b60405180910390fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600b602052604090205460ff1615610db65760405162461bcd60e51b815260206004820152602160248201527f596f75206861766520616c7265616479206d61646520796f757220636c61696d6044820152607360f81b6064820152608401610d21565b6021546040516370a0823160e01b81523360048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610dfe57600080fd5b505afa158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e369190612dc1565b11610e835760405162461bcd60e51b815260206004820152601a60248201527f596f752068617665206e6f2070726573616c6520746f6b656e730000000000006044820152606401610d21565b336000818152600b6020526040808220805460ff19166001179055516370a0823160e01b81526004810192909252906001600160a01b038316906370a082319060240160206040518083038186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f169190612dc1565b9050610f238160646126d2565b90506000610f328260026126d2565b9050610f3e828261201a565b600c54909250610f5d90610f569060ff16600a612f9a565b82906126d2565b601754909150610f6d908261201a565b601755610f87610f7e836064612714565b6019549061201a565b60195533600090815260046020526040902054610fa49082612793565b33600090815260046020526040902055610fd8610fc2836064612714565b3360009081526001602052604090205490612793565b3360008181526001602090815260408083209490945560039052919091204290553060008051602061310a833981519152611014856064612714565b6040519081526020015b60405180910390a3505050565b6000546001600160a01b031633146110555760405162461bcd60e51b8152600401610d2190612e2f565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c4d918590610ce89086612793565b6000546001600160a01b031633146110d75760405162461bcd60e51b8152600401610d2190612e2f565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6022546001600160a01b031633146111685760405162461bcd60e51b815260206004820152602c60248201527f796f7520617265206e6f7420617574686f72697a656420746f2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610d21565b60405163d600ecc160e01b81526001600160a01b0384166004820152309063d600ecc190602401600060405180830381600087803b1580156111a957600080fd5b505af11580156111bd573d6000803e3d6000fd5b505060405163d600ecc160e01b81526001600160a01b038516600482015230925063d600ecc19150602401600060405180830381600087803b15801561120257600080fd5b505af1158015611216573d6000803e3d6000fd5b505050506001600160a01b038216600090815260036020526040902054611253576001600160a01b03821660009081526003602052604090204290555b6001600160a01b038316600090815260046020526040902054611276908261201a565b6001600160a01b0380851660009081526004602052604080822093909355908416815220546112a59082612793565b6001600160a01b039092166000908152600460205260409020919091555050565b6000546001600160a01b031633146112f05760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b0316331461133e5760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610d2190612e2f565b600c5461139a9060ff16600a612f9a565b6113a49082613042565b336000908152600160205260409020549091506113c1908261201a565b336000908152600160205260409020556019546113de9082612793565b6019556040518181523090339060008051602061310a833981519152906020015b60405180910390a350565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610d2190612e2f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061148a33836127f2565b506001919050565b6060601a8054610bbd90613078565b6000546001600160a01b031633146114cb5760405162461bcd60e51b8152600401610d2190612e2f565b600c546114dc9060ff16600a612f9a565b6114e69082613042565b60185550565b6000610c4d3384610ce8856040518060400160405280600a8152602001690616c6f6e6365203c20360b41b815250600560006115253390565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612698565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000610c4d33848461214f565b6000546001600160a01b031633146115db5760405162461bcd60e51b8152600401610d2190612e2f565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116275760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b038216600090815260036020908152604080832042905560049091529020546116579082612793565b6001600160a01b03831660009081526004602052604090205560175461167d908261201a565b6017555050565b6000546001600160a01b031633146116ae5760405162461bcd60e51b8152600401610d2190612e2f565b600c546116bf9060ff16600a612f9a565b6116c99082613042565b60125550565b6000546001600160a01b031633146116f95760405162461bcd60e51b8152600401610d2190612e2f565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000921690829082906370a082319060240160206040518083038186803b15801561178557600080fd5b505afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd9190612dc1565b905060006118007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526001602052604090205490565b600c5490915060009061182e908390611828906118219060ff16600a612f9a565b8690612714565b906126d2565b905061183a8682612714565b9695505050505050565b600054600160a01b900460ff1661189d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d21565b6000805460ff60a01b191681556001600160a01b0382168152600360205260408120546118d490620151809061182890429061201a565b90508015611bb4576001600160a01b0382166000908152600360205260408120429055600c546119089060ff16600a612f9a565b6001600160a01b03841660009081526004602052604090205461192b9190613042565b90506119378183612714565b601f546001600160a01b031660009081526001602052604090205490915061195f908261201a565b601f546001600160a01b031660009081526001602052604081209190915560145461199290606490611828908590612714565b905060006119a6606461182884600a612714565b90506119b2838361201a565b92506119be828261201a565b601e546001600160a01b03166000908152600160205260409020549092506119e69082612793565b601e546001600160a01b0316600090815260016020526040902055611a0b828261201a565b601d546001600160a01b0316600090815260016020526040902054909250611a339082612793565b601d546001600160a01b0390811660009081526001602052604080822093909355601f5490911681522054611a689083612793565b601f546001600160a01b039081166000908152600160205260408082209390935590871681522054611a9a9084612793565b6001600160a01b038616600090815260016020908152604080832093909355600290522054611ac99084612793565b6001600160a01b0386811660008181526002602090815260409182902094909455601f549051878152919392169160008051602061310a833981519152910160405180910390a3601e54601f546040518381526001600160a01b03928316929091169060008051602061310a8339815191529060200160405180910390a3601d54601f546040518381526001600160a01b03928316929091169060008051602061310a8339815191529060200160405180910390a3601f546040518381526001600160a01b0390911690309060008051602061310a8339815191529060200160405180910390a35050505b50506000805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314611bf55760405162461bcd60e51b8152600401610d2190612e2f565b600c54611c069060ff16600a612f9a565b611c109082613042565b60115550565b6000546001600160a01b03163314611c405760405162461bcd60e51b8152600401610d2190612e2f565b600c54611c519060ff16600a612f9a565b611c5b9082613042565b601954909150611c6b908261201a565b60195533600090815260016020526040902054611c889082612793565b3360008181526001602052604090819020929092559051309060008051602061310a833981519152906113ff9085815260200190565b6000546001600160a01b03163314611ce85760405162461bcd60e51b8152600401610d2190612e2f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b611d14816064612915565b15611d745760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e20627579206e6f646573206f6e6c7920696e206d756c74697060448201526906c6573206f66203130360b41b6064820152608401610d21565b600060175411611dd45760405162461bcd60e51b815260206004820152602560248201527f6e6f64657320617661696c61626c6520617265203020686561646f766572207460448201526406f205032560dc1b6064820152608401610d21565b6000611de18260646126d2565b600c54909150600090611df89060ff16600a612f9a565b611e029084613042565b90506000611e118260026126d2565b33600090815260016020526040902054909150611e2e908361201a565b33600090815260016020526040902055611e48828261201a565b601f546001600160a01b0316600090815260016020526040902054909250611e709082612793565b601f546001600160a01b0390811660009081526001602052604080822093909355601e5490911681522054611ea59083612793565b601e546001600160a01b0316600090815260016020526040902055601754611ecd908461201a565b60175560405163d600ecc160e01b8152336004820152309063d600ecc190602401600060405180830381600087803b158015611f0857600080fd5b505af1158015611f1c573d6000803e3d6000fd5b505033600090815260046020526040902054611f3b9250905084612793565b33600081815260046020526040902091909155309060008051602061310a833981519152611f698585612793565b60405190815260200160405180910390a3601f546040518281526001600160a01b0390911690309060008051602061310a8339815191529060200160405180910390a3601e546040518381526001600160a01b0390911690309060008051602061310a8339815191529060200160405180910390a350505050565b6000546001600160a01b0316331461200e5760405162461bcd60e51b8152600401610d2190612e2f565b61201781612957565b50565b600061205c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612698565b9392505050565b6001600160a01b0383166120ad5760405162461bcd60e51b8152602060048201526011602482015270185c1c1c9bdd9948199c9b480c08185919607a1b6044820152606401610d21565b6001600160a01b0382166120f65760405162461bcd60e51b815260206004820152601060248201526f185c1c1c9bdd99481d1bc80c0818591960821b6044820152606401610d21565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161101e565b6001600160a01b0383166121985760405162461bcd60e51b815260206004820152601060248201526f3a393733391033393690181030b2323960811b6044820152606401610d21565b6001600160a01b0382166121e05760405162461bcd60e51b815260206004820152600f60248201526e3a39373339103a3790181030b2323960891b6044820152606401610d21565b6001600160a01b0383166000908152600a602052604090205460ff16156122195760405162461bcd60e51b8152600401610d2190612e64565b6001600160a01b0382166000908152600a602052604090205460ff16156122525760405162461bcd60e51b8152600401610d2190612e64565b6001600160a01b0383166000908152600660205260408120546001919060ff168061229557506001600160a01b03841660009081526006602052604090205460ff165b1561230a576001600160a01b0385166000908152600160205260409020546122bd908461201a565b6001600160a01b0380871660009081526001602052604080822093909355908616815220546122ec9084612793565b6001600160a01b0385166000908152600160205260409020556125f0565b60125483111561235c5760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74206c6172676572207468616e20616c6c6f7765640000000000006044820152606401610d21565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141580156123d057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156123f85750601854601e546001600160a01b031660009081526001602052604090205410155b1561240557612405612a17565b6000612423620151806118286015544261201a90919063ffffffff16565b9050600a8110801561246757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b80156124a557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b156124c3576124b5816002612714565b6124c0906014613061565b92505b6001600160a01b0386166000908152600160205260409020546124e6908561201a565b6001600160a01b03871660009081526001602052604090205561250e60646118288686612714565b915061251a848361201a565b935061254b61252a8360026126d2565b601f546001600160a01b031660009081526001602052604090205490612793565b601f546001600160a01b031660009081526001602052604090205561257b6125748360026126d2565b839061201a565b601e546001600160a01b03166000908152600160205260409020549092506125a39083612793565b601e546001600160a01b0390811660009081526001602052604080822093909355908716815220546125d59085612793565b6001600160a01b038616600090815260016020526040902055505b836001600160a01b0316856001600160a01b031660008051602061310a8339815191528560405161262391815260200190565b60405180910390a3601e546040518281526001600160a01b039182169187169060008051602061310a8339815191529060200160405180910390a3601f546040518281526001600160a01b039182169187169060008051602061310a8339815191529060200160405180910390a35050505050565b600081848411156126bc5760405162461bcd60e51b8152600401610d219190612dda565b5060006126c98486613061565b95945050505050565b600061205c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c76565b60008261272357506000610c51565b600061272f8385613042565b90508261273c8583612f43565b1461205c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d21565b6000806127a08385612f2b565b90508381101561205c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d21565b6001600160a01b0382166128395760405162461bcd60e51b815260206004820152600e60248201526d3139371033393690181030b2323960911b6044820152606401610d21565b604080518082018252600d81526c189c9b88185b5d080f8818985b609a1b6020808301919091526001600160a01b038516600090815260019091529190912054612884918390612698565b6001600160a01b0380841660009081526001602090815260408083209490945554909116815220546128b69082612793565b602080546001600160a01b0316600090815260019091526040902055600e546128df9082612793565b600e556040518181526000906001600160a01b0384169060008051602061310a8339815191529060200160405180910390a35050565b600061205c83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612ca4565b6001600160a01b0381166129bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d21565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff16612a705760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d21565b6000805460ff60a01b19168155601854601e546001600160a01b031682526001602052604090912054612aa29161201a565b601e546001600160a01b03166000908152600160205260408082209290925560185430825291902054612ad491612793565b3060008181526001602090815260409182902093909355601e54601854915191825291926001600160a01b039092169160008051602061310a833981519152910160405180910390a36040805160028082526060820183526000926020830190803683370190505090503081600081518110612b5257612b526130f3565b6001600160a01b039283166020918202929092010152601c54825191169082906001908110612b8357612b836130f3565b60200260200101906001600160a01b031690816001600160a01b031681525050612bd0307f0000000000000000000000000000000000000000000000000000000000000000601854612063565b601854601e54604051635c11d79560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693635c11d79593612c2e9391926000928892909116904290600401612eba565b600060405180830381600087803b158015612c4857600080fd5b505af1158015612c5c573d6000803e3d6000fd5b50506000805460ff60a01b1916600160a01b179055505050565b60008183612c975760405162461bcd60e51b8152600401610d219190612dda565b5060006126c98486612f43565b60008183612cc55760405162461bcd60e51b8152600401610d219190612dda565b50612cd083856130b3565b949350505050565b80356001600160a01b0381168114612cef57600080fd5b919050565b600060208284031215612d0657600080fd5b61205c82612cd8565b60008060408385031215612d2257600080fd5b612d2b83612cd8565b9150612d3960208401612cd8565b90509250929050565b600080600060608486031215612d5757600080fd5b612d6084612cd8565b9250612d6e60208501612cd8565b9150604084013590509250925092565b60008060408385031215612d9157600080fd5b612d9a83612cd8565b946020939093013593505050565b600060208284031215612dba57600080fd5b5035919050565b600060208284031215612dd357600080fd5b5051919050565b600060208083528351808285015260005b81811015612e0757858101830151858201604001528201612deb565b81811115612e19576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526036908201527f796f752068617665206265656e20666c6167676564206173206120626f7420706040820152756c6561736520636f6e7461637420746865206465767360501b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f0a5784516001600160a01b031683529383019391830191600101612ee5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f3e57612f3e6130c7565b500190565b600082612f5257612f526130dd565b500490565b600181815b80851115612f92578160001904821115612f7857612f786130c7565b80851615612f8557918102915b93841c9390800290612f5c565b509250929050565b600061205c8383600082612fb057506001610c51565b81612fbd57506000610c51565b8160018114612fd35760028114612fdd57612ff9565b6001915050610c51565b60ff841115612fee57612fee6130c7565b50506001821b610c51565b5060208310610133831016604e8410600b841016171561301c575081810a610c51565b6130268383612f57565b806000190482111561303a5761303a6130c7565b029392505050565b600081600019048311821515161561305c5761305c6130c7565b500290565b600082821015613073576130736130c7565b500390565b600181811c9082168061308c57607f821691505b602082108114156130ad57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130c2576130c26130dd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202bc84d5d21b64eadbe07eb4bae41aebff837675397b64a82d876f2f2efb99be364736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed ByteCode Sourcemap

8529:18395:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10005:70;;;;;;;;;;-1:-1:-1;10005:70:1;;;;-1:-1:-1;;;;;10005:70:1;;;;;;-1:-1:-1;;;;;1778:32:2;;;1760:51;;1748:2;1733:18;10005:70:1;;;;;;;;11988:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16506:153::-;;;;;;;;;;-1:-1:-1;16506:153:1;;;;;:::i;:::-;;:::i;:::-;;;1987:14:2;;1980:22;1962:41;;1950:2;1935:18;16506:153:1;1822:187:2;9653:28:1;;;;;;;;;;;;;;;;;;;9371:25:2;;;9359:2;9344:18;9653:28:1;9225:177:2;12919:113:1;;;;;;;;;;-1:-1:-1;12919:113:1;;;;;:::i;:::-;-1:-1:-1;;;;;13008:16:1;12985:4;13008:16;;;:7;:16;;;;;;;;;12919:113;10221:51;;;;;;;;;;;;;;;12132:96;;;;;;;;;;-1:-1:-1;12210:12:1;;12132:96;;9436:27;;;;;;;;;;;;;;;;9590:29;;;;;;;;;;;;;;;;17108:280;;;;;;;;;;-1:-1:-1;17108:280:1;;;;;:::i;:::-;;:::i;12720:95::-;;;;;;;;;;-1:-1:-1;12720:95:1;;;;;:::i;:::-;;:::i;:::-;;13960:842;;;;;;;;;;;;;:::i;14952:96::-;;;;;;;;;;-1:-1:-1;14952:96:1;;;;;:::i;:::-;;:::i;11694:88::-;;;;;;;;;;-1:-1:-1;11767:9:1;;11694:88;;11767:9;;;;10534:36:2;;10522:2;10507:18;11694:88:1;10392:184:2;9369:32:1;;;;;;;;;;;;;;;;17770:200;;;;;;;;;;-1:-1:-1;17770:200:1;;;;;:::i;:::-;;:::i;8731:45::-;;;;;;;;;;-1:-1:-1;8731:45:1;;;;;:::i;:::-;;;;;;;;;;;;;;15750:80;;;;;;;;;;-1:-1:-1;15750:80:1;;;;;:::i;:::-;;:::i;24152:469::-;;;;;;;;;;-1:-1:-1;24152:469:1;;;;;:::i;:::-;;:::i;9624:24::-;;;;;;;;;;;;;;;;15530:101;;;;;;;;;;-1:-1:-1;15530:101:1;;;;;:::i;:::-;;:::i;9500:26::-;;;;;;;;;;;;;;;;9827:73;;;;;;;;;;-1:-1:-1;9827:73:1;;;;-1:-1:-1;;;;;9827:73:1;;;12824:83;;;;;;;;;;-1:-1:-1;12891:9:1;;12824:83;;10277:38;;;;;;;;;;;;;;;15637:107;;;;;;;;;;-1:-1:-1;15637:107:1;;;;;:::i;:::-;;:::i;13395:274::-;;;;;;;;;;-1:-1:-1;13395:274:1;;;;;:::i;:::-;;:::i;8781:46::-;;;;;;;;;;-1:-1:-1;8781:46:1;;;;;:::i;:::-;;;;;;;;;;;;;;9468:25;;;;;;;;;;;;;;;;9192:40;;;;;;;;;;-1:-1:-1;9192:40:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;12384:122;;;;;;;;;;-1:-1:-1;12384:122:1;;;;;:::i;:::-;-1:-1:-1;;;;;12475:18:1;12450:7;12475:18;;;:9;:18;;;;;;;12384:122;10080:71;;;;;;;;;;-1:-1:-1;10080:71:1;;;;-1:-1:-1;;;;;10080:71:1;;;10744:130:0;;;;;;;;;;;;;:::i;9531:25:1:-;;;;;;;;;;;;;;;;14812:126;;;;;;;;;;-1:-1:-1;14812:126:1;;;;;:::i;:::-;;:::i;11547:88::-;;;;;;;;;;-1:-1:-1;11599:7:1;10203:6:0;-1:-1:-1;;;;;10203:6:0;11547:88:1;;9746:63;;;;;;;;;;-1:-1:-1;9746:63:1;;;;-1:-1:-1;;;;;9746:63:1;;;9921:68;;;;;;;;;;-1:-1:-1;9921:68:1;;;;-1:-1:-1;;;;;9921:68:1;;;11843:92;;;;;;;;;;;;;:::i;21024:120::-;;;;;;;;;;-1:-1:-1;21024:120:1;;;;;:::i;:::-;;:::i;9407:24::-;;;;;;;;;;;;;;;;18442:224;;;;;;;;;;-1:-1:-1;18442:224:1;;;;;:::i;:::-;;:::i;15056:98::-;;;;;;;;;;-1:-1:-1;15056:98:1;;;;;:::i;:::-;;:::i;16024:159::-;;;;;;;;;;-1:-1:-1;16024:159:1;;;;;:::i;:::-;;:::i;12619:95::-;;;;;;;;;;-1:-1:-1;12619:95:1;;;;;:::i;:::-;;:::i;8832:44::-;;;;;;;;;;-1:-1:-1;8832:44:1;;;;;:::i;:::-;;;;;;;;;;;;;;13150:237;;;;;;;;;;-1:-1:-1;13150:237:1;;;;;:::i;:::-;;:::i;15272:115::-;;;;;;;;;;-1:-1:-1;15272:115:1;;;;;:::i;:::-;;:::i;12519:90::-;;;;;;;;;;-1:-1:-1;12519:90:1;;;;;:::i;:::-;;:::i;24826:353::-;;;;;;;;;;-1:-1:-1;24826:353:1;;;;;:::i;:::-;;:::i;22028:1229::-;;;;;;;;;;-1:-1:-1;22028:1229:1;;;;;:::i;:::-;;:::i;16237:139::-;;;;;;;;;;-1:-1:-1;16237:139:1;;;;;:::i;:::-;-1:-1:-1;;;;;16343:18:1;;;16320:7;16343:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16237:139;15395:119;;;;;;;;;;-1:-1:-1;15395:119:1;;;;;:::i;:::-;;:::i;13038:107::-;;;;;;;;;;-1:-1:-1;13038:107:1;;;;;:::i;:::-;-1:-1:-1;;;;;13122:18:1;13102:4;13122:18;;;:9;:18;;;;;;;;;13038:107;13673:276;;;;;;;;;;-1:-1:-1;13673:276:1;;;;;:::i;:::-;;:::i;15166:98::-;;;;;;;;;;-1:-1:-1;15166:98:1;;;;;:::i;:::-;;:::i;23264:874::-;;;;;;;;;;-1:-1:-1;23264:874:1;;;;;:::i;:::-;;:::i;9561:24::-;;;;;;;;;;;;;;;;11019:103:0;;;;;;;;;;-1:-1:-1;11019:103:0;;;;;:::i;:::-;;:::i;10170:22:1:-;;;;;;;;;;-1:-1:-1;10170:22:1;;;;-1:-1:-1;;;;;10170:22:1;;;11988:88;12036:13;12065:5;12058:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11988:88;:::o;16506:153::-;16583:4;16596:39;3924:10:0;16619:7:1;16628:6;16596:8;:39::i;:::-;-1:-1:-1;16649:4:1;16506:153;;;;;:::o;17108:280::-;17208:4;17221:36;17231:6;17239:9;17250:6;17221:9;:36::i;:::-;17264:100;17273:6;3924:10:0;17295:68:1;17333:6;17295:68;;;;;;;;;;;;;-1:-1:-1;;;17295:68:1;;;:11;:19;17307:6;-1:-1:-1;;;;;17295:19:1;-1:-1:-1;;;;;17295:19:1;;;;;;;;;;;;:33;17315:12;3924:10:0;;3856:84;17315:12:1;-1:-1:-1;;;;;17295:33:1;;;;;;;;;;;;-1:-1:-1;17295:33:1;;;:68;:37;:68::i;:::-;17264:8;:100::i;:::-;-1:-1:-1;17378:4:1;17108:280;;;;;:::o;12720:95::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;;;;;;;;;12787:14:1::1;:20:::0;;-1:-1:-1;;;;;;12787:20:1::1;-1:-1:-1::0;;;;;12787:20:1;;;::::1;::::0;;;::::1;::::0;;12720:95::o;13960:842::-;14024:10;14013:22;;;;:10;:22;;;;;;;;14012:23;14004:68;;;;-1:-1:-1;;;14004:68:1;;5325:2:2;14004:68:1;;;5307:21:2;5364:2;5344:18;;;5337:30;5403:34;5383:18;;;5376:62;-1:-1:-1;;;5454:18:2;;;5447:31;5495:19;;14004:68:1;5123:397:2;14004:68:1;14116:7;;14139:30;;-1:-1:-1;;;14139:30:1;;14158:10;14139:30;;;1760:51:2;-1:-1:-1;;;;;14116:7:1;;;;14079:21;;14116:7;;14139:18;;1733::2;;14139:30:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;14131:70;;;;-1:-1:-1;;;14131:70:1;;6082:2:2;14131:70:1;;;6064:21:2;6121:2;6101:18;;;6094:30;6160:28;6140:18;;;6133:56;6206:18;;14131:70:1;5880:350:2;14131:70:1;14219:10;14208:22;;;;:10;:22;;;;;;:27;;-1:-1:-1;;14208:27:1;14231:4;14208:27;;;14256:30;-1:-1:-1;;;14256:30:1;;;;;1760:51:2;;;;14208:22:1;-1:-1:-1;;;;;14256:18:1;;;;;1733::2;;14256:30:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14242:44;-1:-1:-1;14299:12:1;14242:44;14307:3;14299:7;:12::i;:::-;14293:18;-1:-1:-1;14318:18:1;14339:10;14293:18;14347:1;14339:7;:10::i;:::-;14318:31;-1:-1:-1;14362:19:1;:3;14318:31;14362:7;:19::i;:::-;14428:9;;14356:25;;-1:-1:-1;14401:38:1;;14416:22;;14428:9;;14416:2;:22;:::i;:::-;14401:10;;:14;:38::i;:::-;14463:14;;14388:51;;-1:-1:-1;14463:30:1;;14388:51;14463:18;:30::i;:::-;14446:14;:47;14515:31;14533:12;:3;14541;14533:7;:12::i;:::-;14515:13;;;:17;:31::i;:::-;14500:13;:46;14591:10;14579:23;;;;:11;:23;;;;;;:39;;14607:10;14579:27;:39::i;:::-;14565:10;14553:23;;;;:11;:23;;;;;:65;14649:39;14675:12;:3;14683;14675:7;:12::i;:::-;14659:10;14649:21;;;;:9;:21;;;;;;;:25;:39::i;:::-;14635:10;14625:21;;;;:9;:21;;;;;;;;:63;;;;14695:10;:22;;;;;;14720:15;14695:40;;14766:4;-1:-1:-1;;;;;;;;;;;14783:12:1;:3;14791;14783:7;:12::i;:::-;14749:47;;9371:25:2;;;9359:2;9344:18;14749:47:1;;;;;;;;13997:805;;;13960:842::o;14952:96::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15028:7:1::1;:12:::0;;-1:-1:-1;;;;;;15028:12:1::1;-1:-1:-1::0;;;;;15028:12:1;;;::::1;::::0;;;::::1;::::0;;14952:96::o;17770:200::-;3924:10:0;17850:4:1;17895:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17895:34:1;;;;;;;;;;17850:4;;17863:83;;17886:7;;17895:50;;17934:10;17895:38;:50::i;15750:80::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15813:3:1::1;:9:::0;;-1:-1:-1;;;;;;15813:9:1::1;-1:-1:-1::0;;;;;15813:9:1;;;::::1;::::0;;;::::1;::::0;;15750:80::o;24152:469::-;24271:3;;-1:-1:-1;;;;;24271:3:1;24259:10;:15;24251:71;;;;-1:-1:-1;;;24251:71:1;;4912:2:2;24251:71:1;;;4894:21:2;4951:2;4931:18;;;4924:30;4990:34;4970:18;;;4963:62;-1:-1:-1;;;5041:18:2;;;5034:42;5093:19;;24251:71:1;4710:408:2;24251:71:1;24331:32;;-1:-1:-1;;;24331:32:1;;-1:-1:-1;;;;;1778:32:2;;24331::1;;;1760:51:2;24331:4:1;;:24;;1733:18:2;;24331:32:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24372:31:1;;-1:-1:-1;;;24372:31:1;;-1:-1:-1;;;;;1778:32:2;;24372:31:1;;;1760:51:2;24372:4:1;;-1:-1:-1;24372:24:1;;-1:-1:-1;1733:18:2;;24372:31:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;24415:17:1;;;;;;:10;:17;;;;;;24412:80;;-1:-1:-1;;;;;24449:17:1;;;;;;:10;:17;;;;;24467:15;24449:33;;24412:80;-1:-1:-1;;;;;24521:19:1;;;;;;:11;:19;;;;;;:31;;24545:6;24521:23;:31::i;:::-;-1:-1:-1;;;;;24500:19:1;;;;;;;:11;:19;;;;;;:52;;;;24582:18;;;;;;;:30;;24605:6;24582:22;:30::i;:::-;-1:-1:-1;;;;;24561:18:1;;;;;;;:11;:18;;;;;:51;;;;-1:-1:-1;;24152:469:1:o;15530:101::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15600:18:1::1;;::::0;;;:9:::1;:18;::::0;;;;:23;;-1:-1:-1;;15600:23:1::1;15619:4;15600:23;::::0;;15530:101::o;15637:107::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15712:18:1::1;15731:5;15712:18:::0;;;:9:::1;:18;::::0;;;;:24;;-1:-1:-1;;15712:24:1::1;::::0;;15637:107::o;13395:274::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;13492:9:1::1;::::0;13480:22:::1;::::0;13492:9:::1;;13480:2;:22;:::i;:::-;13473:29;::::0;:6;:29:::1;:::i;:::-;13541:10;13531:21;::::0;;;:9:::1;:21;::::0;;;;;13466:36;;-1:-1:-1;13531:33:1::1;::::0;13466:36;13531:25:::1;:33::i;:::-;13519:10;13509:21;::::0;;;:9:::1;:21;::::0;;;;:55;13585:13:::1;::::0;:25:::1;::::0;13603:6;13585:17:::1;:25::i;:::-;13571:13;:39:::0;13622:41:::1;::::0;9371:25:2;;;13650:4:1::1;::::0;13631:10:::1;::::0;-1:-1:-1;;;;;;;;;;;13622:41:1;9359:2:2;9344:18;13622:41:1::1;;;;;;;;13395:274:::0;:::o;10744:130:0:-;10336:6;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;10839:1:::1;10823:6:::0;;10802:40:::1;::::0;-1:-1:-1;;;;;10823:6:0;;::::1;::::0;10802:40:::1;::::0;10839:1;;10802:40:::1;10866:1;10849:19:::0;;-1:-1:-1;;;;;;10849:19:0::1;::::0;;10744:130::o;14812:126:1:-;14868:4;14884:24;14890:10;14901:6;14884:5;:24::i;:::-;-1:-1:-1;14926:4:1;;14812:126;-1:-1:-1;14812:126:1:o;11843:92::-;11893:13;11922:7;11915:14;;;;;:::i;21024:120::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;21106:9:1::1;::::0;21094:22:::1;::::0;21106:9:::1;;21094:2;:22;:::i;:::-;21090:26;::::0;:3;:26:::1;:::i;:::-;21123:9;:15:::0;-1:-1:-1;21024:120:1:o;18442:224::-;18527:4;18540:102;3924:10:0;18563:7:1;18572:69;18611:15;18572:69;;;;;;;;;;;;;-1:-1:-1;;;18572:69:1;;;:11;:25;18584:12;3924:10:0;;3856:84;18584:12:1;-1:-1:-1;;;;;18572:25:1;;;;;;;;;;;;;;;;;-1:-1:-1;18572:25:1;;;:34;;;;;;;;;;;:69;:38;:69::i;15056:98::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15125:16:1::1;;::::0;;;:7:::1;:16;::::0;;;;:21;;-1:-1:-1;;15125:21:1::1;15142:4;15125:21;::::0;;15056:98::o;16024:159::-;16104:4;16117:42;3924:10:0;16141:9:1;16152:6;16117:9;:42::i;12619:95::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;12689:11:1::1;:17:::0;;-1:-1:-1;;;;;;12689:17:1::1;-1:-1:-1::0;;;;;12689:17:1;;;::::1;::::0;;;::::1;::::0;;12619:95::o;13150:237::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13231:21:1;::::1;;::::0;;;:10:::1;:21;::::0;;;;;;;13253:15:::1;13231:37:::0;;13300:11:::1;:22:::0;;;;;;:34:::1;::::0;13327:6;13300:26:::1;:34::i;:::-;-1:-1:-1::0;;;;;13275:22:1;::::1;;::::0;;;:11:::1;:22;::::0;;;;:59;13356:14:::1;::::0;:26:::1;::::0;13375:6;13356:18:::1;:26::i;:::-;13341:14;:41:::0;-1:-1:-1;;13150:237:1:o;15272:115::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15369:9:1::1;::::0;15357:22:::1;::::0;15369:9:::1;;15357:2;:22;:::i;:::-;15350:29;::::0;:6;:29:::1;:::i;:::-;15335:12;:44:::0;-1:-1:-1;15272:115:1:o;12519:90::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;12586:9:1::1;:15:::0;;-1:-1:-1;;;;;;12586:15:1::1;-1:-1:-1::0;;;;;12586:15:1;;;::::1;::::0;;;::::1;::::0;;12519:90::o;24826:353::-;24926:4;;24961:28;;-1:-1:-1;;;24961:28:1;;-1:-1:-1;;;;;24975:13:1;1778:32:2;;24961:28:1;;;1760:51:2;-1:-1:-1;;24926:4:1;;-1:-1:-1;;24926:4:1;;24961:13;;1733:18:2;;24961:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24942:47;;25000:18;25021:24;25031:13;-1:-1:-1;;;;;12475:18:1;12450:7;12475:18;;;:9;:18;;;;;;;12384:122;25021:24;25103:9;;25000:45;;-1:-1:-1;25056:18:1;;25077:54;;25000:45;;25078:36;;25091:22;;25103:9;;25091:2;:22;:::i;:::-;25078:8;;:12;:36::i;:::-;25077:42;;:54::i;:::-;25056:75;-1:-1:-1;25149:22:1;:6;25056:75;25149:10;:22::i;:::-;25142:29;24826:353;-1:-1:-1;;;;;;24826:353:1:o;22028:1229::-;12480:11:0;;-1:-1:-1;;;12480:11:0;;;;12472:55;;;;-1:-1:-1;;;12472:55:0;;8722:2:2;12472:55:0;;;8704:21:2;8761:2;8741:18;;;8734:30;8800:33;8780:18;;;8773:61;8851:18;;12472:55:0;8520:355:2;12472:55:0;12619:5;12605:19;;-1:-1:-1;;;;12605:19:0;;;-1:-1:-1;;;;;22245:19:1;::::1;::::0;;:10:::1;:19;::::0;;;;;22224:53:::1;::::0;22271:5:::1;::::0;22225:40:::1;::::0;:15:::1;::::0;:19:::1;:40::i;22224:53::-;22205:72:::0;-1:-1:-1;22287:10:1;;22284:956:::1;;-1:-1:-1::0;;;;;22305:19:1;::::1;;::::0;;;:10:::1;:19;::::0;;;;22325:15:::1;22305:35:::0;;22394:9:::1;::::0;22382:22:::1;::::0;22394:9:::1;;22382:2;:22;:::i;:::-;-1:-1:-1::0;;;;;22361:20:1;::::1;;::::0;;;:11:::1;:20;::::0;;;;;:43:::1;::::0;;::::1;:::i;:::-;22347:57:::0;-1:-1:-1;22415:17:1::1;22347:57:::0;22423:8;22415:7:::1;:17::i;:::-;22522:11;::::0;-1:-1:-1;;;;;22522:11:1::1;22512:22;::::0;;;:9:::1;:22;::::0;;;;;22411:21;;-1:-1:-1;22512:31:1::1;::::0;22411:21;22512:26:::1;:31::i;:::-;22498:11;::::0;-1:-1:-1;;;;;22498:11:1::1;22488:22;::::0;;;:9:::1;:22;::::0;;;;:55;;;;22575:8:::1;::::0;22566:28:::1;::::0;22590:3:::1;::::0;22567:17:::1;::::0;:3;;:7:::1;:17::i;22566:28::-;22550:44:::0;-1:-1:-1;22601:13:1::1;22617:24;22637:3;22618:13;22550:44:::0;22628:2:::1;22618:9;:13::i;22617:24::-;22601:40:::0;-1:-1:-1;22654:14:1::1;:3:::0;22662:5;22654:7:::1;:14::i;:::-;22648:20:::0;-1:-1:-1;22681:16:1::1;:5:::0;22691;22681:9:::1;:16::i;:::-;22736:9;::::0;-1:-1:-1;;;;;22736:9:1::1;22726:20;::::0;;;:9:::1;:20;::::0;;;;;22675:22;;-1:-1:-1;22726:31:1::1;::::0;22751:5;22726:24:::1;:31::i;:::-;22714:9;::::0;-1:-1:-1;;;;;22714:9:1::1;22704:20;::::0;;;:9:::1;:20;::::0;;;;:53;22771:16:::1;:5:::0;22781;22771:9:::1;:16::i;:::-;22832:14;::::0;-1:-1:-1;;;;;22832:14:1::1;22822:25;::::0;;;:9:::1;:25;::::0;;;;;22764:23;;-1:-1:-1;22822:36:1::1;::::0;22852:5;22822:29:::1;:36::i;:::-;22804:14;::::0;-1:-1:-1;;;;;22804:14:1;;::::1;22794:25;::::0;;;:9:::1;:25;::::0;;;;;:64;;;;22899:11:::1;::::0;;;::::1;22889:22:::0;;;;:33:::1;::::0;22916:5;22889:26:::1;:33::i;:::-;22875:11;::::0;-1:-1:-1;;;;;22875:11:1;;::::1;22865:22;::::0;;;:9:::1;:22;::::0;;;;;:57;;;;22950:18;;::::1;::::0;;;;:27:::1;::::0;22973:3;22950:22:::1;:27::i;:::-;-1:-1:-1::0;;;;;22929:18:1;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:48;;;;23004:9:::1;:18:::0;;;;:27:::1;::::0;23027:3;23004:22:::1;:27::i;:::-;-1:-1:-1::0;;;;;22984:18:1;;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;;:47;;;;23052:11:::1;::::0;23043:33;;9371:25:2;;;22984:18:1;;23052:11;::::1;::::0;-1:-1:-1;;;;;;;;;;;23043:33:1;9344:18:2;23043:33:1::1;;;;;;;23109:9;::::0;23097:11:::1;::::0;23088:37:::1;::::0;9371:25:2;;;-1:-1:-1;;;;;23109:9:1;;::::1;::::0;23097:11;;::::1;::::0;-1:-1:-1;;;;;;;;;;;23088:37:1;9359:2:2;9344:18;23088:37:1::1;;;;;;;23158:14;::::0;23146:11:::1;::::0;23137:42:::1;::::0;9371:25:2;;;-1:-1:-1;;;;;23158:14:1;;::::1;::::0;23146:11;;::::1;::::0;-1:-1:-1;;;;;;;;;;;23137:42:1;9359:2:2;9344:18;23137:42:1::1;;;;;;;23214:11;::::0;23191:41:::1;::::0;9371:25:2;;;-1:-1:-1;;;;;23214:11:1;;::::1;::::0;23208:4:::1;::::0;-1:-1:-1;;;;;;;;;;;23191:41:1;9359:2:2;9344:18;23191:41:1::1;;;;;;;22298:942;;;22284:956;-1:-1:-1::0;;12785:11:0;:18;;-1:-1:-1;;;;12785:18:0;-1:-1:-1;;;12785:18:0;;;22028:1229:1:o;15395:119::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;15496:9:1::1;::::0;15484:22:::1;::::0;15496:9:::1;;15484:2;:22;:::i;:::-;15477:29;::::0;:6;:29:::1;:::i;:::-;15465:9;:41:::0;-1:-1:-1;15395:119:1:o;13673:276::-;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;13770:9:1::1;::::0;13758:22:::1;::::0;13770:9:::1;;13758:2;:22;:::i;:::-;13751:29;::::0;:6;:29:::1;:::i;:::-;13801:13;::::0;13744:36;;-1:-1:-1;13801:25:1::1;::::0;13744:36;13801:17:::1;:25::i;:::-;13787:13;:39:::0;13867:10:::1;13857:21;::::0;;;:9:::1;:21;::::0;;;;;:33:::1;::::0;13883:6;13857:25:::1;:33::i;:::-;13843:10;13833:21;::::0;;;:9:::1;:21;::::0;;;;;;:57;;;;13902:41;;13919:4:::1;::::0;-1:-1:-1;;;;;;;;;;;13902:41:1;::::1;::::0;13936:6;9371:25:2;;9359:2;9344:18;;9225:177;15166:98:1;10336:6:0;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15234:16:1::1;15251:5;15234:16:::0;;;:7:::1;:16;::::0;;;;:22;;-1:-1:-1;;15234:22:1::1;::::0;;15166:98::o;23264:874::-;23322:15;:6;23333:3;23322:10;:15::i;:::-;:18;23314:72;;;;-1:-1:-1;;;23314:72:1;;6839:2:2;23314:72:1;;;6821:21:2;6878:2;6858:18;;;6851:30;6917:34;6897:18;;;6890:62;-1:-1:-1;;;6968:18:2;;;6961:40;7018:19;;23314:72:1;6637:406:2;23314:72:1;23416:1;23401:14;;:16;23393:65;;;;-1:-1:-1;;;23393:65:1;;3397:2:2;23393:65:1;;;3379:21:2;3436:2;3416:18;;;3409:30;3475:34;3455:18;;;3448:62;-1:-1:-1;;;3526:18:2;;;3519:35;3571:19;;23393:65:1;3195:401:2;23393:65:1;23465:18;23486:15;:6;23497:3;23486:10;:15::i;:::-;23542:9;;23465:36;;-1:-1:-1;23508:12:1;;23530:22;;23542:9;;23530:2;:22;:::i;:::-;23523:29;;:6;:29;:::i;:::-;23508:44;-1:-1:-1;23559:13:1;23574:11;23508:44;23583:1;23574:8;:11::i;:::-;23626:10;23616:21;;;;:9;:21;;;;;;23559:26;;-1:-1:-1;23616:31:1;;23642:4;23616:25;:31::i;:::-;23602:10;23592:21;;;;:9;:21;;;;;:55;23661:15;:4;23670:5;23661:8;:15::i;:::-;23718:11;;-1:-1:-1;;;;;23718:11:1;23708:22;;;;:9;:22;;;;;;23654;;-1:-1:-1;23708:33:1;;23735:5;23708:26;:33::i;:::-;23693:11;;-1:-1:-1;;;;;23693:11:1;;;23683:22;;;;:9;:22;;;;;;:58;;;;23780:9;;;;;23770:20;;;;:30;;23795:4;23770:24;:30::i;:::-;23758:9;;-1:-1:-1;;;;;23758:9:1;23748:20;;;;:9;:20;;;;;:52;23822:14;;:30;;23841:10;23822:18;:30::i;:::-;23807:14;:45;23859:36;;-1:-1:-1;;;23859:36:1;;23884:10;23859:36;;;1760:51:2;23859:4:1;;:24;;1733:18:2;;23859:36:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23940:10:1;23928:23;;;;:11;:23;;;;;;:39;;-1:-1:-1;23928:23:1;-1:-1:-1;23956:10:1;23928:27;:39::i;:::-;23914:10;23902:23;;;;:11;:23;;;;;:65;;;;24007:4;;-1:-1:-1;;;;;;;;;;;24013:15:1;:4;24022:5;24013:8;:15::i;:::-;23979:50;;9371:25:2;;;9359:2;9344:18;23979:50:1;;;;;;;24064:11;;24041:41;;9371:25:2;;;-1:-1:-1;;;;;24064:11:1;;;;24058:4;;-1:-1:-1;;;;;;;;;;;24041:41:1;9359:2:2;9344:18;24041:41:1;;;;;;;24117:9;;24094:38;;9371:25:2;;;-1:-1:-1;;;;;24117:9:1;;;;24111:4;;-1:-1:-1;;;;;;;;;;;24094:38:1;9359:2:2;9344:18;24094:38:1;;;;;;;23306:832;;;23264:874;:::o;11019:103:0:-;10336:6;;-1:-1:-1;;;;;10336:6:0;3924:10;10336:22;10328:67;;;;-1:-1:-1;;;10328:67:0;;;;;;;:::i;:::-;11088:28:::1;11107:8;11088:18;:28::i;:::-;11019:103:::0;:::o;5402:130::-;5460:7;5483:43;5487:1;5490;5483:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5476:50;5402:130;-1:-1:-1;;;5402:130:0:o;26264:283:1:-;-1:-1:-1;;;;;26354:19:1;;26346:49;;;;-1:-1:-1;;;26346:49:1;;4566:2:2;26346:49:1;;;4548:21:2;4605:2;4585:18;;;4578:30;-1:-1:-1;;;4624:18:2;;;4617:47;4681:18;;26346:49:1;4364:341:2;26346:49:1;-1:-1:-1;;;;;26410:21:1;;26402:50;;;;-1:-1:-1;;;26402:50:1;;9082:2:2;26402:50:1;;;9064:21:2;9121:2;9101:18;;;9094:30;-1:-1:-1;;;9140:18:2;;;9133:46;9196:18;;26402:50:1;8880:340:2;26402:50:1;-1:-1:-1;;;;;26461:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26509:32;;9371:25:2;;;26509:32:1;;9344:18:2;26509:32:1;9225:177:2;19163:1857:1;-1:-1:-1;;;;;19257:20:1;;19249:49;;;;-1:-1:-1;;;19249:49:1;;8034:2:2;19249:49:1;;;8016:21:2;8073:2;8053:18;;;8046:30;-1:-1:-1;;;8092:18:2;;;8085:46;8148:18;;19249:49:1;7832:340:2;19249:49:1;-1:-1:-1;;;;;19313:23:1;;19305:51;;;;-1:-1:-1;;;19305:51:1;;3053:2:2;19305:51:1;;;3035:21:2;3092:2;3072:18;;;3065:30;-1:-1:-1;;;3111:18:2;;;3104:45;3166:18;;19305:51:1;2851:339:2;19305:51:1;-1:-1:-1;;;;;19372:17:1;;;;;;:9;:17;;;;;;;;19371:18;19363:84;;;;-1:-1:-1;;;19363:84:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;19463:20:1;;;;;;:9;:20;;;;;;;;19462:21;19454:87;;;;-1:-1:-1;;;19454:87:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;19613:15:1;;19562:11;19613:15;;;:7;:15;;;;;;19574:1;;19562:11;19613:15;;;:37;;-1:-1:-1;;;;;;19632:18:1;;;;;;:7;:18;;;;;;;;19613:37;19610:1244;;;-1:-1:-1;;;;;19695:17:1;;;;;;:9;:17;;;;;;:29;;19717:6;19695:21;:29::i;:::-;-1:-1:-1;;;;;19675:17:1;;;;;;;:9;:17;;;;;;:49;;;;19777:20;;;;;;;:32;;19802:6;19777:24;:32::i;:::-;-1:-1:-1;;;;;19754:20:1;;;;;;:9;:20;;;;;:55;19610:1244;;;19886:12;;19878:6;:20;;19870:58;;;;-1:-1:-1;;;19870:58:1;;5727:2:2;19870:58:1;;;5709:21:2;5766:2;5746:18;;;5739:30;5805:28;5785:18;;;5778:56;5851:18;;19870:58:1;5525:350:2;19870:58:1;19966:15;-1:-1:-1;;;;;19950:32:1;:6;-1:-1:-1;;;;;19950:32:1;;;:66;;;;;20002:13;-1:-1:-1;;;;;19986:30:1;:6;-1:-1:-1;;;;;19986:30:1;;;19950:66;:101;;;;-1:-1:-1;20042:9:1;;20030;;-1:-1:-1;;;;;20030:9:1;20020:20;;;;:9;:20;;;;;;:31;;19950:101;19947:158;;;20075:10;:8;:10::i;:::-;20125:23;20151:44;20189:5;20152:31;20172:10;;20152:15;:19;;:31;;;;:::i;20151:44::-;20125:70;;20235:2;20219:15;:18;:52;;;;;20257:13;-1:-1:-1;;;;;20241:30:1;:6;-1:-1:-1;;;;;20241:30:1;;;20219:52;:88;;;;;20291:15;-1:-1:-1;;;;;20275:32:1;:6;-1:-1:-1;;;;;20275:32:1;;;20219:88;20216:171;;;20342:22;:15;20362:1;20342:19;:22::i;:::-;20338:27;;:2;:27;:::i;:::-;20333:32;;20216:171;-1:-1:-1;;;;;20428:17:1;;;;;;:9;:17;;;;;;:29;;20450:6;20428:21;:29::i;:::-;-1:-1:-1;;;;;20409:17:1;;;;;;:9;:17;;;;;:48;20487:26;20509:3;20488:15;:6;20499:3;20488:10;:15::i;20487:26::-;20479:34;-1:-1:-1;20541:17:1;:6;20479:34;20541:10;:17::i;:::-;20534:24;-1:-1:-1;20604:40:1;20631:12;:5;20641:1;20631:9;:12::i;:::-;20614:11;;-1:-1:-1;;;;;20614:11:1;20604:22;;;;:9;:22;;;;;;;:26;:40::i;:::-;20589:11;;-1:-1:-1;;;;;20589:11:1;20579:22;;;;:9;:22;;;;;:65;20671:23;20681:12;:5;20691:1;20681:9;:12::i;:::-;20671:5;;:9;:23::i;:::-;20746:9;;-1:-1:-1;;;;;20746:9:1;20736:20;;;;:9;:20;;;;;;20665:29;;-1:-1:-1;20736:31:1;;20665:29;20736:24;:31::i;:::-;20725:9;;-1:-1:-1;;;;;20725:9:1;;;20715:20;;;;:9;:20;;;;;;:52;;;;20809:20;;;;;;;:32;;20834:6;20809:24;:32::i;:::-;-1:-1:-1;;;;;20788:20:1;;;;;;:9;:20;;;;;:53;-1:-1:-1;19610:1244:1;20900:9;-1:-1:-1;;;;;20883:35:1;20892:6;-1:-1:-1;;;;;20883:35:1;-1:-1:-1;;;;;;;;;;;20911:6:1;20883:35;;;;9371:25:2;;9359:2;9344:18;;9225:177;20883:35:1;;;;;;;;20946:9;;20930:32;;9371:25:2;;;-1:-1:-1;;;;;20946:9:1;;;;20930:32;;;-1:-1:-1;;;;;;;;;;;20930:32:1;9359:2:2;9344:18;20930:32:1;;;;;;;20990:11;;20974:34;;9371:25:2;;;-1:-1:-1;;;;;20990:11:1;;;;20974:34;;;-1:-1:-1;;;;;;;;;;;20974:34:1;9359:2:2;9344:18;20974:34:1;;;;;;;19242:1778;;19163:1857;;;:::o;5807:178:0:-;5893:7;5925:12;5917:6;;;;5909:29;;;;-1:-1:-1;;;5909:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5945:9:0;5957:5;5961:1;5957;:5;:::i;:::-;5945:17;5807:178;-1:-1:-1;;;;;5807:178:0:o;7091:126::-;7149:7;7172:39;7176:1;7179;7172:39;;;;;;;;;;;;;;;;;:3;:39::i;6216:431::-;6274:7;6503:6;6499:37;;-1:-1:-1;6527:1:0;6520:8;;6499:37;6544:9;6556:5;6560:1;6556;:5;:::i;:::-;6544:17;-1:-1:-1;6585:1:0;6576:5;6580:1;6544:17;6576:5;:::i;:::-;:10;6568:56;;;;-1:-1:-1;;;6568:56:0;;6437:2:2;6568:56:0;;;6419:21:2;6476:2;6456:18;;;6449:30;6515:34;6495:18;;;6488:62;-1:-1:-1;;;6566:18:2;;;6559:31;6607:19;;6568:56:0;6235:397:2;4980:167:0;5038:7;;5066:5;5070:1;5066;:5;:::i;:::-;5054:17;;5091:1;5086;:6;;5078:46;;;;-1:-1:-1;;;5078:46:0;;4210:2:2;5078:46:0;;;4192:21:2;4249:2;4229:18;;;4222:30;4288:29;4268:18;;;4261:57;4335:18;;5078:46:0;4008:351:2;25497:350:1;-1:-1:-1;;;;;25569:21:1;;25561:48;;;;-1:-1:-1;;;25561:48:1;;8379:2:2;25561:48:1;;;8361:21:2;8418:2;8398:18;;;8391:30;-1:-1:-1;;;8437:18:2;;;8430:44;8491:18;;25561:48:1;8177:338:2;25561:48:1;25639:47;;;;;;;;;;;-1:-1:-1;;;25639:47:1;;;;;;;;-1:-1:-1;;;;;25639:18:1;;-1:-1:-1;25639:18:1;;;:9;:18;;;;;;;;:47;;25662:6;;25639:22;:47::i;:::-;-1:-1:-1;;;;;25618:18:1;;;;;;;:9;:18;;;;;;;;:68;;;;25728:11;;;;25718:22;;;;:34;;25745:6;25718:26;:34::i;:::-;25703:11;;;-1:-1:-1;;;;;25703:11:1;25693:22;;;;:9;:22;;;;;;:59;25771:9;;:21;;25785:6;25771:13;:21::i;:::-;25759:9;:33;25804:37;;9371:25:2;;;25830:1:1;;-1:-1:-1;;;;;25804:37:1;;;-1:-1:-1;;;;;;;;;;;25804:37:1;9359:2:2;9344:18;25804:37:1;;;;;;;25497:350;;:::o;8437:124:0:-;8495:7;8518:37;8522:1;8525;8518:37;;;;;;;;;;;;;;;;;:3;:37::i;11220:215::-;-1:-1:-1;;;;;11290:22:0;;11282:73;;;;-1:-1:-1;;;11282:73:0;;3803:2:2;11282:73:0;;;3785:21:2;3842:2;3822:18;;;3815:30;3881:34;3861:18;;;3854:62;-1:-1:-1;;;3932:18:2;;;3925:36;3978:19;;11282:73:0;3601:402:2;11282:73:0;11388:6;;;11367:38;;-1:-1:-1;;;;;11367:38:0;;;;11388:6;;;11367:38;;;11412:6;:17;;-1:-1:-1;;;;;;11412:17:0;-1:-1:-1;;;;;11412:17:0;;;;;;;;;;11220:215::o;21148:690:1:-;12480:11:0;;-1:-1:-1;;;12480:11:0;;;;12472:55;;;;-1:-1:-1;;;12472:55:0;;8722:2:2;12472:55:0;;;8704:21:2;8761:2;8741:18;;;8734:30;8800:33;8780:18;;;8773:61;8851:18;;12472:55:0;8520:355:2;12472:55:0;12619:5;12605:19;;-1:-1:-1;;;;12605:19:0;;;21245:9:1::1;::::0;21230::::1;::::0;-1:-1:-1;;;;;21230:9:1::1;21220:20:::0;;12605:19:0;21220:20:1::1;::::0;;;;;;:35:::1;::::0;:24:::1;:35::i;:::-;21207:9;::::0;-1:-1:-1;;;;;21207:9:1::1;21197:20;::::0;;;:9:::1;:20;::::0;;;;;:58;;;;21318:9:::1;::::0;21307:4:::1;21289:24:::0;;;;;;:39:::1;::::0;:28:::1;:39::i;:::-;21280:4;21262:24;::::0;;;:9:::1;:24;::::0;;;;;;;;:66;;;;21351:9:::1;::::0;21375::::1;::::0;21342:43;;9371:25:2;;;21280:4:1;;-1:-1:-1;;;;;21351:9:1;;::::1;::::0;-1:-1:-1;;;;;;;;;;;21342:43:1;9344:18:2;21342:43:1::1;;;;;;;21418:16;::::0;;21432:1:::1;21418:16:::0;;;;;::::1;::::0;;21394:21:::1;::::0;21418:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21418:16:1::1;21394:40;;21463:4;21445;21450:1;21445:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21445:23:1;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21489:4:::1;::::0;21479:7;;21489:4;::::1;::::0;21479;;21489;;21479:7;::::1;;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;21479:14:1::1;;;-1:-1:-1::0;;;;;21479:14:1::1;;;::::0;::::1;21505:60;21522:4;21537:15;21555:9;;21505:8;:60::i;:::-;21692:9;::::0;21780::::1;::::0;21608:222:::1;::::0;-1:-1:-1;;;21608:222:1;;-1:-1:-1;;;;;21608:15:1::1;:69:::0;::::1;::::0;::::1;::::0;:222:::1;::::0;21692:9;;21716:1:::1;::::0;21761:4;;21780:9;;::::1;::::0;21804:15:::1;::::0;21608:222:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;12785:11:0;:18;;-1:-1:-1;;;;12785:18:0;-1:-1:-1;;;12785:18:0;;;-1:-1:-1;;;21148:690:1:o;7681:323:0:-;7767:7;7861:12;7854:5;7846:28;;;;-1:-1:-1;;;7846:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7881:9:0;7893:5;7897:1;7893;:5;:::i;9014:156::-;9100:7;9132:12;9124:6;9116:29;;;;-1:-1:-1;;;9116:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9159:5:0;9163:1;9159;:5;:::i;:::-;9152:12;9014:156;-1:-1:-1;;;;9014:156:0:o;14:173:2:-;82:20;;-1:-1:-1;;;;;131:31:2;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:2:o;1240:180::-;1299:6;1352:2;1340:9;1331:7;1327:23;1323:32;1320:52;;;1368:1;1365;1358:12;1320:52;-1:-1:-1;1391:23:2;;1240:180;-1:-1:-1;1240:180:2:o;1425:184::-;1495:6;1548:2;1536:9;1527:7;1523:23;1519:32;1516:52;;;1564:1;1561;1554:12;1516:52;-1:-1:-1;1587:16:2;;1425:184;-1:-1:-1;1425:184:2:o;2249:597::-;2361:4;2390:2;2419;2408:9;2401:21;2451:6;2445:13;2494:6;2489:2;2478:9;2474:18;2467:34;2519:1;2529:140;2543:6;2540:1;2537:13;2529:140;;;2638:14;;;2634:23;;2628:30;2604:17;;;2623:2;2600:26;2593:66;2558:10;;2529:140;;;2687:6;2684:1;2681:13;2678:91;;;2757:1;2752:2;2743:6;2732:9;2728:22;2724:31;2717:42;2678:91;-1:-1:-1;2830:2:2;2809:15;-1:-1:-1;;2805:29:2;2790:45;;;;2837:2;2786:54;;2249:597;-1:-1:-1;;;2249:597:2:o;7048:356::-;7250:2;7232:21;;;7269:18;;;7262:30;7328:34;7323:2;7308:18;;7301:62;7395:2;7380:18;;7048:356::o;7409:418::-;7611:2;7593:21;;;7650:2;7630:18;;;7623:30;7689:34;7684:2;7669:18;;7662:62;-1:-1:-1;;;7755:2:2;7740:18;;7733:52;7817:3;7802:19;;7409:418::o;9407:980::-;9669:4;9717:3;9706:9;9702:19;9748:6;9737:9;9730:25;9774:2;9812:6;9807:2;9796:9;9792:18;9785:34;9855:3;9850:2;9839:9;9835:18;9828:31;9879:6;9914;9908:13;9945:6;9937;9930:22;9983:3;9972:9;9968:19;9961:26;;10022:2;10014:6;10010:15;9996:29;;10043:1;10053:195;10067:6;10064:1;10061:13;10053:195;;;10132:13;;-1:-1:-1;;;;;10128:39:2;10116:52;;10223:15;;;;10188:12;;;;10164:1;10082:9;10053:195;;;-1:-1:-1;;;;;;;10304:32:2;;;;10299:2;10284:18;;10277:60;-1:-1:-1;;;10368:3:2;10353:19;10346:35;10265:3;9407:980;-1:-1:-1;;;9407:980:2:o;10581:128::-;10621:3;10652:1;10648:6;10645:1;10642:13;10639:39;;;10658:18;;:::i;:::-;-1:-1:-1;10694:9:2;;10581:128::o;10714:120::-;10754:1;10780;10770:35;;10785:18;;:::i;:::-;-1:-1:-1;10819:9:2;;10714:120::o;10839:422::-;10928:1;10971:5;10928:1;10985:270;11006:7;10996:8;10993:21;10985:270;;;11065:4;11061:1;11057:6;11053:17;11047:4;11044:27;11041:53;;;11074:18;;:::i;:::-;11124:7;11114:8;11110:22;11107:55;;;11144:16;;;;11107:55;11223:22;;;;11183:15;;;;10985:270;;;10989:3;10839:422;;;;;:::o;11266:131::-;11326:5;11355:36;11382:8;11376:4;11451:5;11481:8;11471:80;;-1:-1:-1;11522:1:2;11536:5;;11471:80;11570:4;11560:76;;-1:-1:-1;11607:1:2;11621:5;;11560:76;11652:4;11670:1;11665:59;;;;11738:1;11733:130;;;;11645:218;;11665:59;11695:1;11686:10;;11709:5;;;11733:130;11770:3;11760:8;11757:17;11754:43;;;11777:18;;:::i;:::-;-1:-1:-1;;11833:1:2;11819:16;;11848:5;;11645:218;;11947:2;11937:8;11934:16;11928:3;11922:4;11919:13;11915:36;11909:2;11899:8;11896:16;11891:2;11885:4;11882:12;11878:35;11875:77;11872:159;;;-1:-1:-1;11984:19:2;;;12016:5;;11872:159;12063:34;12088:8;12082:4;12063:34;:::i;:::-;12133:6;12129:1;12125:6;12121:19;12112:7;12109:32;12106:58;;;12144:18;;:::i;:::-;12182:20;;11402:806;-1:-1:-1;;;11402:806:2:o;12213:168::-;12253:7;12319:1;12315;12311:6;12307:14;12304:1;12301:21;12296:1;12289:9;12282:17;12278:45;12275:71;;;12326:18;;:::i;:::-;-1:-1:-1;12366:9:2;;12213:168::o;12386:125::-;12426:4;12454:1;12451;12448:8;12445:34;;;12459:18;;:::i;:::-;-1:-1:-1;12496:9:2;;12386:125::o;12516:380::-;12595:1;12591:12;;;;12638;;;12659:61;;12713:4;12705:6;12701:17;12691:27;;12659:61;12766:2;12758:6;12755:14;12735:18;12732:38;12729:161;;;12812:10;12807:3;12803:20;12800:1;12793:31;12847:4;12844:1;12837:15;12875:4;12872:1;12865:15;12729:161;;12516:380;;;:::o;12901:112::-;12933:1;12959;12949:35;;12964:18;;:::i;:::-;-1:-1:-1;12998:9:2;;12901:112::o;13018:127::-;13079:10;13074:3;13070:20;13067:1;13060:31;13110:4;13107:1;13100:15;13134:4;13131:1;13124:15;13150:127;13211:10;13206:3;13202:20;13199:1;13192:31;13242:4;13239:1;13232:15;13266:4;13263:1;13256:15;13282:127;13343:10;13338:3;13334:20;13331:1;13324:31;13374:4;13371:1;13364:15;13398:4;13395:1;13388:15

Swarm Source

ipfs://2bc84d5d21b64eadbe07eb4bae41aebff837675397b64a82d876f2f2efb99be3
Loading