ETH Price: $3,319.82 (-1.58%)

Token

ottto.io (OTTTO)
 

Overview

Max Total Supply

1,000,000,000 OTTTO

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
0.256604 OTTTO

Value
$0.00
0xb49458492a98537c3d3383652e4c73ae5dcdf93b
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ottto

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: None
pragma solidity ^0.8.15;
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address internal _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }    
    function owner() public view virtual returns (address) {
        return _owner;
    }    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = time;
        emit OwnershipTransferred(_owner, address(0));
    }
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock.");
        require(block.timestamp > _lockTime , "Contract is locked.");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }

    modifier isHuman() {
        require(tx.origin == msg.sender, "sorry humans only");
        _;
    }
}

interface VRFCoordinatorV2Interface {
  function getRequestConfig()
    external
    view
    returns (
      uint16,
      uint32,
      bytes32[] memory
    );
  function requestRandomWords(
    bytes32 keyHash,
    uint64 subId,
    uint16 minimumRequestConfirmations,
    uint32 callbackGasLimit,
    uint32 numWords
  ) external returns (uint256 requestId);
  function createSubscription() external returns (uint64 subId);
  function getSubscription(uint64 subId)
    external
    view
    returns (
      uint96 balance,
      uint64 reqCount,
      address owner,
      address[] memory consumers
    );
  function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external;
  function acceptSubscriptionOwnerTransfer(uint64 subId) external;
  function addConsumer(uint64 subId, address consumer) external;
  function removeConsumer(uint64 subId, address consumer) external;
  function cancelSubscription(uint64 subId, address to) external;
  function pendingRequestExists(uint64 subId) external view returns (bool);
}

abstract contract VRFConsumerBaseV2 {
  error OnlyCoordinatorCanFulfill(address have, address want);
  address private immutable vrfCoordinator;
  
  constructor(address _vrfCoordinator) {
    vrfCoordinator = _vrfCoordinator;
  }
  function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual;

  function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external {
    if (msg.sender != vrfCoordinator) {
      revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator);
    }
    fulfillRandomWords(requestId, randomWords);
  }
}

contract ottto is IERC20, Ownable, ReentrancyGuard, VRFConsumerBaseV2 {
    using SafeMath for uint256;

    // Chainlink VRF variables
    VRFCoordinatorV2Interface COORDINATOR;

    // Mainnet: 312
    uint64 s_subscriptionId = 312;
    // Mainnet: 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
    address vrfCoordinator = 0x271682DEB8C4E0901D1a1550aD2e64D568E69909;
    // Mainnet: 0x8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef
    bytes32 public keyHash = 0x8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef;

    uint32 public callbackGasLimit = 2500000;
    uint16 requestConfirmations = 3;
    uint32 public numWords = 3;
    uint256[] public s_randomWords;
    uint256 public s_requestId;
    address s_owner;
    address public lastMsgSender;
    IDEXRouter public v2Router;
    address public v2Pair;
    uint256 private constant maxUint256 = ~uint256(0);
    uint256 private tax = 10;
    bool private taxOn = true;
    bool private growPotEnabled = true;
    bool public autoWin = true;
    bool private inSwap = false;
    address private routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;        
    mapping (address => bool) private excluded;
    uint256 public activeRound;
    uint256 public calculatingRound;
    bool public chainlinkActive;
    uint256 public totalTickets;
    uint256 public totalPayout;

    struct user {
        uint256 tokens;
        string ottoTicket;
        bool exists;
    }

    struct ottoTicket {
        uint256 ottoTicket;
        address user;
        uint256 round;
        uint256 created;
        bool winner;
        uint256 tokens;
        uint256 ethWon;
    }

    struct round {
        uint256 eth;
        uint256 totalAmt;
        uint256 expire;  
        bool launched;
        bool completed;
        bool calculatingResults;
        uint256 ticketCount;
    }

    mapping (uint256 => ottoTicket[]) ottoTickets;
    mapping(address => uint256[]) userTickets;
    mapping(address => mapping(uint256 => uint256)) public userTicketCount;  
    mapping (address => uint256) _balances;
    mapping (address => bool) isFeeExempt;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    mapping (uint256 => round) public rounds;
    mapping (address => uint256) public lastUserBlock;
    mapping(address => mapping(address => uint256)) private _allowances;
    address chainlink; 
    uint256 chainlinkPercent;
    uint256 nextRoundPercent = 10;
    string constant _name = "ottto.io";
    string constant _symbol = "OTTTO";
    uint8 constant _decimals = 6;
    uint256 _totalSupply = 1e9 * (10 ** _decimals);
    uint256 public maxTicketQuantity = _totalSupply.mul(1).div(100); // 1% Max Transaction Amount
    uint256 public maxTicketsPerRound = 10;
    uint256 public maxTokensForSwap = _totalSupply.mul(1).div(1000); // .1% Supply 
    uint256 public roundDuration = 96 hours;
    uint256 public launchTime;
    
    // Events
    event BoughtOtto(address to, uint256 ottoTicket, uint256 round, uint256 tokenAmt, uint256 created);
    event SoldEarly(uint256 ottoTicket);
    event WinningTicket(address to, uint256 ottoTicket, uint256 payout, uint256 round, uint256 created, uint8 position, uint256 roundEth);

    constructor (address _chainlink, uint256 _chainpercent) VRFConsumerBaseV2(vrfCoordinator) {

        COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator);
        s_owner = msg.sender;

        v2Router = IDEXRouter(routerAddress);
        v2Pair = IDEXFactory(v2Router.factory()).createPair(v2Router.WETH(), address(this));

        _allowances[msg.sender][address(v2Router)] = type(uint256).max;
        _allowances[address(this)][address(v2Router)] = type(uint256).max;
        _allowances[msg.sender][address(v2Pair)] = type(uint256).max;
        _allowances[address(this)][address(v2Pair)] = type(uint256).max;
        _allowances[address(this)][address(vrfCoordinator)] = type(uint256).max;

        chainlink = _chainlink;  
        chainlinkPercent = _chainpercent;

        isFeeExempt[msg.sender] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);       
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;        
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
         // Complete Round and Declare Winners
        if (rounds[activeRound].expire < block.timestamp && rounds[activeRound].launched && !rounds[activeRound].completed && autoWin && !inSwap)
        {
            PayTheWinners();
        }  

        if(inSwap){ return _basicTransfer(sender, recipient, amount);}
        if(shouldGrowPot()){growPot();} 
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        uint256 amountReceived = isBuyingOtto(sender, recipient) ? buyOtto(sender, amount, recipient) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived); 

        // To prevent bad faith trading, if tokens are sold or transferred, all previous tickets for activeRound are zeroed out
        if (recipient == v2Pair || (sender != v2Pair && recipient != v2Pair)) {
            clearPreviousTicketsofCurrentRound(sender);
        }     

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }    

    // CUSTOM FUNCTIONS
    function clearPreviousTicketsofCurrentRound(address sender) internal {
        uint256 _cnt = userTicketCount[sender][activeRound];
        for (uint256 i=0; i < _cnt; i++) {
            ottoTickets[activeRound][userTickets[sender][i]].tokens = 0;
            emit SoldEarly(ottoTickets[activeRound][userTickets[sender][i]].ottoTicket);
        }
        userTicketCount[sender][activeRound] = 0;
    }

    function setchainlink(address _val) external onlyOwner {
        chainlink = _val;
    }

    function toggleChainlink() external onlyOwner {
        chainlinkActive = !chainlinkActive;
    }

    function isBuyingOtto(address sender, address recipient) internal view returns (bool) {
        return sender == v2Pair &&
               recipient != owner() &&
               recipient != address(0) &&
               recipient != address(0xdead);
    }

    function buyOtto(address sender, uint256 amount, address recipient) internal returns (uint256) {
        uint256 ottoTax = amount.mul(tax).div(100);
        _balances[address(this)] = _balances[address(this)].add(ottoTax);
        if (ottoTax > 0) {
                //require(lastUserBlock[recipient] != block.number, "Cannot have multiple buys on same block");
                require(userTicketCount[recipient][activeRound] < maxTicketsPerRound, "Ticket Limit per Round exceeded");
                require(amount <= maxTicketQuantity, "Exceeds Maximum Ticket Quantity");

                // Launch Lottery on first buy.  Will execute once.
                if (!rounds[0].launched) {
                    rounds[0].launched = true;
                    rounds[0].expire = block.timestamp + roundDuration;
                    launchTime = block.timestamp;
                }

                // Clear User Tickets on new round
                if (userTicketCount[recipient][activeRound] == 0) {
                    uint256[] memory _clearUserTickets;
                    userTickets[recipient] = _clearUserTickets;
                }

                rounds[activeRound].totalAmt = rounds[activeRound].totalAmt + ottoTax;
                rounds[activeRound].ticketCount = rounds[activeRound].ticketCount + 1;

                // Create otto ticket
                uint256[] storage _userTickets = userTickets[recipient];
                _userTickets.push(ottoTickets[activeRound].length);
                userTickets[recipient] = _userTickets;

                userTicketCount[recipient][activeRound] = userTicketCount[recipient][activeRound] + 1;
                uint256 ticketCount = totalTickets + 1;

                ottoTicket memory _ottoTicket;
                _ottoTicket.ottoTicket =  ticketCount;
                _ottoTicket.round = activeRound;
                _ottoTicket.created = block.timestamp;
                _ottoTicket.user = recipient;
                _ottoTicket.tokens = amount;
                ottoTickets[activeRound].push(_ottoTicket);
                lastUserBlock[recipient] = block.number;   

                totalTickets = ticketCount;                  

                emit BoughtOtto(recipient, ticketCount, activeRound, amount, block.timestamp);            
            }  

        emit Transfer(sender, address(this), ottoTax);
        return amount.sub(ottoTax);
    }

    function getUserTickets(address _user) public view returns (uint256[] memory) {
        return userTickets[_user];
    }

    function shouldGrowPot() internal view returns (bool) {
        return 
        msg.sender != v2Pair
        && !inSwap
        && growPotEnabled
        ;
    }

    function growPot() internal swapping {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = v2Router.WETH();

        uint256 roundTokens = rounds[activeRound].totalAmt;
        roundTokens > maxTokensForSwap ? roundTokens = maxTokensForSwap : 0;
        if (roundTokens > 0 && growPotEnabled) {            
            uint256 beforeEth = address(this).balance;
            v2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                roundTokens,
                0,
                path,
                address(this),
                block.timestamp
            );     

            rounds[activeRound].totalAmt = rounds[activeRound].totalAmt - roundTokens;  
            uint256 nextRound = activeRound + 1;
            uint256 afterEth = address(this).balance.sub(beforeEth);
            uint256 potEth = afterEth.mul(100-chainlinkPercent).div(100);            
            uint256 nextRoundEth = potEth.mul(nextRoundPercent).div(100);                      
            rounds[activeRound].eth = rounds[activeRound].eth + potEth - nextRoundEth;
            rounds[nextRound].eth = rounds[nextRound].eth + nextRoundEth;
            payable(chainlink).transfer(afterEth - potEth);
        }        
    }

    // Anyone can call Grow The Pot to sell otto tax tokens for ETH and fund the current jackpot
    function growPotPublic() swapping isHuman nonReentrant public {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = v2Router.WETH();

        uint256 roundTokens = rounds[activeRound].totalAmt;        
        if (roundTokens > 0 && growPotEnabled) {      
            _allowances[address(this)][address(msg.sender)] = roundTokens;      
            uint256 beforeEth = address(this).balance;
            v2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                roundTokens,
                0,
                path,
                address(this),
                block.timestamp
            );     
            rounds[activeRound].totalAmt = rounds[activeRound].totalAmt - roundTokens;  
            uint256 nextRound = activeRound + 1;
            uint256 afterEth = address(this).balance.sub(beforeEth);
            uint256 potEth = afterEth.mul(100-chainlinkPercent).div(100);            
            uint256 nextRoundEth = potEth.mul(nextRoundPercent).div(100);                      
            rounds[activeRound].eth = rounds[activeRound].eth + potEth - nextRoundEth;
            rounds[nextRound].eth = rounds[nextRound].eth + nextRoundEth;
            payable(chainlink).transfer(afterEth - potEth);
        }        
    }

    // Called immediately before closing the round to maximize ETH for winners
    function growThePotByRound(uint256 _round) internal swapping  {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = v2Router.WETH();

        uint256 roundTokens = rounds[_round].totalAmt;        
        if (roundTokens > 0 && growPotEnabled) {     
            _allowances[address(this)][address(msg.sender)] = roundTokens; 
            _allowances[address(msg.sender)][address(v2Router)] = roundTokens;           
            uint256 beforeEth = address(this).balance;
            v2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                roundTokens,
                0,
                path,
                address(this),
                block.timestamp
            );     
            rounds[_round].totalAmt = rounds[_round].totalAmt - roundTokens;  

            uint256 nextRound = _round + 1;

            uint256 afterEth = address(this).balance.sub(beforeEth);
            uint256 potEth = afterEth.mul(100-chainlinkPercent).div(100);            
            uint256 nextRoundEth = potEth.mul(nextRoundPercent).div(100);
                      
            rounds[_round].eth = rounds[_round].eth + potEth - nextRoundEth;
            rounds[nextRound].eth = rounds[nextRound].eth + nextRoundEth;
            payable(chainlink).transfer(afterEth - potEth);
        }
    }
    
    function PayTheWinners() internal  {
        // Call Chainlink Verifiable Randomness Function generator. https://vrf.chain.link
        // Callback function fulfillRandomWords() will choose winners and pay out ETH.   
        calculatingRound = activeRound;
        rounds[activeRound].completed = true;
        rounds[activeRound].calculatingResults = true;
        chainlinkActive = true;   
        
        //Start Next Round
        uint256 newRound = activeRound + 1;    
        activeRound = newRound;
        rounds[activeRound].launched = true;
        rounds[activeRound].expire = block.timestamp + roundDuration;
        launchTime = block.timestamp;

        s_requestId = COORDINATOR.requestRandomWords(
            keyHash,
            s_subscriptionId,
            requestConfirmations,
            callbackGasLimit,
            numWords
        );
    }

    function testChainLink() public onlyOwner  {
        // Call Chainlink Verifiable Randomness Function generator. https://vrf.chain.link
        // Callback function fulfillRandomWords() will choose winners and pay out ETH for calculatingRound.   
        s_requestId = COORDINATOR.requestRandomWords(
            keyHash,
            s_subscriptionId,
            requestConfirmations,
            callbackGasLimit,
            numWords
        ); 
    }

    function setCallbackGasLimit(uint32 _val) external onlyOwner {
        callbackGasLimit = _val;
    }

    function setGasKeyHash(bytes32 _val) external onlyOwner {
        keyHash = _val;
    }

    function setNextRoundPercent(uint256 _val) external onlyOwner {
        nextRoundPercent = _val;
    }    

    function setSubscriptionId(uint64 _val) external onlyOwner {
        s_subscriptionId = _val;
    }

    function setWords(uint32 _val) external onlyOwner {
        numWords = _val;
    }

    function setTaxRate(uint256 _val) external onlyOwner {
        require(tax <= 12 && tax > 0, "Exceeds tax rate limit");
        tax = _val;
    }

    function setMaxTicketQuantity(uint256 _val) external onlyOwner {
        maxTicketQuantity = _val;
    }

    function setMaxTicketsPerRound(uint256 _val) external onlyOwner {
        maxTicketsPerRound = _val;
    }

    function getTaxRate() public view returns (uint256) {
        return tax;
    }

    function setDuration(uint256 val) external onlyOwner {
        roundDuration = val;
    }

    function setActiveRound(uint256 val) external onlyOwner {
        activeRound = val;
    }

    function setMaxTokensForSwap(uint256 val) external onlyOwner {
        maxTokensForSwap = val;
    }

    function toggleTaxOn() external onlyOwner {
        taxOn = !taxOn;
    }

    function getTaxOn() public view returns (bool) {
        return taxOn;
    }

    function togglePot() external onlyOwner {
        growPotEnabled = !growPotEnabled;
    }

    function getPot() public view returns (bool) {
        return growPotEnabled;
    }

    function toggleAutowWin() external onlyOwner {
        autoWin = !autoWin;
    }

    function ticketsCurrent() public view returns (uint256) {
        return ottoTickets[activeRound].length;
    }

    function setExcluded(address _val, bool exclude) external onlyOwner {
        excluded[_val] = exclude;
    }

    function rescueEth() external payable onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function rescueTokens(address _stuckToken, uint256 _amount) external onlyOwner {
        IERC20(_stuckToken).transfer(msg.sender, _amount);
    }

    function boostOtto(uint256 _round) external payable onlyOwner {
        rounds[_round].eth = rounds[_round].eth + msg.value;
    }

    function fulfillRandomWords(uint256, uint256[] memory randomWords) internal override {       
        s_randomWords = randomWords;
        chainlinkActive = false;
        growThePotByRound(calculatingRound);  

        uint256 roundEth = rounds[calculatingRound].eth;
        if (ottoTickets[calculatingRound].length > 0 && roundEth > 0 && rounds[calculatingRound].completed && rounds[calculatingRound].calculatingResults) {

            rounds[calculatingRound].calculatingResults = false;
            totalPayout = totalPayout + roundEth;

            uint256 winnerIndex1 = randomWords[0] % ottoTickets[calculatingRound].length;
            uint256 winnerIndex2 = randomWords[1] % ottoTickets[calculatingRound].length;
            uint256 winnerIndex3 = randomWords[2] % ottoTickets[calculatingRound].length;

            ottoTicket memory winnerTicket1 = ottoTickets[calculatingRound][winnerIndex1];
            ottoTicket memory winnerTicket2 = ottoTickets[calculatingRound][winnerIndex2];
            ottoTicket memory winnerTicket3 = ottoTickets[calculatingRound][winnerIndex3];

            uint256 totalWinnerTokens = winnerTicket1.tokens + winnerTicket2.tokens + winnerTicket3.tokens;

            if (totalWinnerTokens > 0) {
                uint256 winner1ETH = roundEth.mul(winnerTicket1.tokens).div(totalWinnerTokens);
                uint256 winner2ETH = roundEth.mul(winnerTicket2.tokens).div(totalWinnerTokens);
                uint256 winner3ETH = roundEth.mul(winnerTicket3.tokens).div(totalWinnerTokens);
    
                // Pay winners
                payable(winnerTicket1.user).transfer(winner1ETH);
                payable(winnerTicket2.user).transfer(winner2ETH);
                payable(winnerTicket3.user).transfer(winner3ETH);   

                emit WinningTicket(winnerTicket1.user, winnerTicket1.ottoTicket, winner1ETH, calculatingRound, block.timestamp, 1, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket2.user, winnerTicket2.ottoTicket, winner2ETH, calculatingRound, block.timestamp, 2, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket3.user, winnerTicket3.ottoTicket, winner3ETH, calculatingRound, block.timestamp, 3, rounds[calculatingRound].eth);
            }
            else {
                emit WinningTicket(winnerTicket1.user, winnerTicket1.ottoTicket, 0, calculatingRound, block.timestamp, 1, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket2.user, winnerTicket2.ottoTicket, 0, calculatingRound, block.timestamp, 2, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket3.user, winnerTicket3.ottoTicket, 0, calculatingRound, block.timestamp, 3, rounds[calculatingRound].eth);
            }
        }  
        else {
            rounds[calculatingRound].calculatingResults = false;
        }
        delete ottoTickets[calculatingRound];
    }

    // Chainlink down.  Emergency payout call
    function fulfillRandomWordsExternal(uint256 randomWords) external onlyOwner {
        chainlinkActive = false;
        growThePotByRound(calculatingRound);  

        uint256 roundEth = rounds[calculatingRound].eth;
        if (ottoTickets[calculatingRound].length > 0 && roundEth > 0 && rounds[calculatingRound].completed && rounds[calculatingRound].calculatingResults) {

            rounds[calculatingRound].calculatingResults = false;
            totalPayout = totalPayout + roundEth;

            uint256 winnerIndex1 = randomWords % ottoTickets[calculatingRound].length;
            uint256 winnerIndex2 = randomWords.add(block.timestamp) % ottoTickets[calculatingRound].length;
            uint256 winnerIndex3 = randomWords.add(block.timestamp).add(block.timestamp) % ottoTickets[calculatingRound].length;

            ottoTicket memory winnerTicket1 = ottoTickets[calculatingRound][winnerIndex1];
            ottoTicket memory winnerTicket2 = ottoTickets[calculatingRound][winnerIndex2];
            ottoTicket memory winnerTicket3 = ottoTickets[calculatingRound][winnerIndex3];

            uint256 totalWinnerTokens = winnerTicket1.tokens + winnerTicket2.tokens + winnerTicket3.tokens;

            if (totalWinnerTokens > 0) {
                uint256 winner1ETH = roundEth.mul(winnerTicket1.tokens).div(totalWinnerTokens);
                uint256 winner2ETH = roundEth.mul(winnerTicket2.tokens).div(totalWinnerTokens);
                uint256 winner3ETH = roundEth.mul(winnerTicket3.tokens).div(totalWinnerTokens);
    
                // Pay winners
                payable(winnerTicket1.user).transfer(winner1ETH);
                payable(winnerTicket2.user).transfer(winner2ETH);
                payable(winnerTicket3.user).transfer(winner3ETH);   

                emit WinningTicket(winnerTicket1.user, winnerTicket1.ottoTicket, winner1ETH, calculatingRound, block.timestamp, 1, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket2.user, winnerTicket2.ottoTicket, winner2ETH, calculatingRound, block.timestamp, 2, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket3.user, winnerTicket3.ottoTicket, winner3ETH, calculatingRound, block.timestamp, 3, rounds[calculatingRound].eth);
            }
            else {
                emit WinningTicket(winnerTicket1.user, winnerTicket1.ottoTicket, 0, calculatingRound, block.timestamp, 1, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket2.user, winnerTicket2.ottoTicket, 0, calculatingRound, block.timestamp, 2, rounds[calculatingRound].eth);
                emit WinningTicket(winnerTicket3.user, winnerTicket3.ottoTicket, 0, calculatingRound, block.timestamp, 3, rounds[calculatingRound].eth);
            }        
        }
        else {
            rounds[calculatingRound].calculatingResults = false;
        }  
        delete ottoTickets[calculatingRound];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_chainlink","type":"address"},{"internalType":"uint256","name":"_chainpercent","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"ottoTicket","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"created","type":"uint256"}],"name":"BoughtOtto","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":false,"internalType":"uint256","name":"ottoTicket","type":"uint256"}],"name":"SoldEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"ottoTicket","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"created","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"position","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"roundEth","type":"uint256"}],"name":"WinningTicket","type":"event"},{"inputs":[],"name":"activeRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoWin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_round","type":"uint256"}],"name":"boostOtto","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"calculatingRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callbackGasLimit","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainlinkActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"randomWords","type":"uint256"}],"name":"fulfillRandomWordsExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserTickets","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"growPotPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"keyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMsgSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUserBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTicketQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTicketsPerRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numWords","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_stuckToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roundDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"totalAmt","type":"uint256"},{"internalType":"uint256","name":"expire","type":"uint256"},{"internalType":"bool","name":"launched","type":"bool"},{"internalType":"bool","name":"completed","type":"bool"},{"internalType":"bool","name":"calculatingResults","type":"bool"},{"internalType":"uint256","name":"ticketCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_randomWords","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"s_requestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setActiveRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_val","type":"uint32"}],"name":"setCallbackGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_val","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_val","type":"bytes32"}],"name":"setGasKeyHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setMaxTicketQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setMaxTicketsPerRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxTokensForSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setNextRoundPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_val","type":"uint64"}],"name":"setSubscriptionId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_val","type":"uint32"}],"name":"setWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_val","type":"address"}],"name":"setchainlink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"testChainLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ticketsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleAutowWin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleChainlink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTaxOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalPayout","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":"totalTickets","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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userTicketCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"v2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"v2Router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260048054600160a01b600160e01b031916602760a31b1790556005805473271682deb8c4e0901d1a1550ad2e64d568e699096001600160a01b03199091161790557f8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef6006908155600780546001600160501b03191666030003002625a0179055600a600e819055600f80546001600160c01b031916777a250d5630b4cf539739df2c5dacb4c659f2488d000101011790556020819055620000c69190620006a2565b620000d690633b9aca00620006b3565b602155620001106064620000fc60016021546200047260201b620022251790919060201c565b6200050960201b620022a71790919060201c565b602255600a6023556200013c6103e8620000fc60016021546200047260201b620022251790919060201c565b602455620546006025553480156200015357600080fd5b5060405162004a9438038062004a948339810160408190526200017691620006ea565b6005546001600160a01b031633600080546001600160a01b0319166001600160a01b039290921691821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360016003556001600160a01b03908116608052600554600480549183166001600160a01b0319928316178155600a805433908416179055600f54600c8054640100000000909204909416921682179092556040805163c45a015560e01b81529051919263c45a01559282820192602092908290030181865afa15801562000255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027b919062000719565b6001600160a01b031663c9c65396600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000303919062000719565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000376919062000719565b600d80546001600160a01b03199081166001600160a01b03938416178255336000818152601d60208181526040808420600c80548a1686528184528286206000199081905530875294845282862090548a16865280845282862085905588548a1686529083528185208490559654881684529581528583208290556005548716835285832091909155601e805490941695881695909517909255601f859055808252601a8452828220805460ff191660011790556021546019855283832081905592519283529290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620007aa565b600082600003620004865750600062000503565b6000620004948385620006b3565b905082620004a3858362000737565b14620005005760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200050083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200055360201b60201c565b60008183620005775760405162461bcd60e51b8152600401620004f791906200075a565b50600062000586848662000737565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005e6578160001904821115620005ca57620005ca6200058f565b80851615620005d857918102915b93841c9390800290620005aa565b509250929050565b600082620005ff5750600162000503565b816200060e5750600062000503565b8160018114620006275760028114620006325762000652565b600191505062000503565b60ff8411156200064657620006466200058f565b50506001821b62000503565b5060208310610133831016604e8410600b841016171562000677575081810a62000503565b620006838383620005a5565b80600019048211156200069a576200069a6200058f565b029392505050565b60006200050060ff841683620005ee565b80820281158282048414176200050357620005036200058f565b80516001600160a01b0381168114620006e557600080fd5b919050565b60008060408385031215620006fe57600080fd5b6200070983620006cd565b9150602083015190509250929050565b6000602082840312156200072c57600080fd5b6200050082620006cd565b6000826200075557634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b8181101562000789578581018301518582016040015282016200076b565b506000604082860101526040601f19601f8301168501019250505092915050565b6080516142c7620007cd60003960008181610df30152610e3501526142c76000f3fe6080604052600436106103dd5760003560e01c80638da5cb5b116101fd578063dd11247e11610118578063ea7b4f77116100ab578063f6eaffc81161007a578063f6eaffc814610bf0578063f7cb789a14610c10578063f8c9637d14610c26578063fcad44ab14610c46578063ffacbe1d14610c6657600080fd5b8063ea7b4f7714610b70578063ed606af414610b90578063f2fde38b14610bb0578063f6be71d114610bd057600080fd5b8063e040b278116100e7578063e040b27814610af7578063e16b580e14610b17578063e4dd99f914610b44578063e89e106a14610b5a57600080fd5b8063dd11247e14610a5b578063dd46706414610a71578063dd62ed3e14610a91578063deadbc1414610ad757600080fd5b8063aa1ee32b11610190578063c968c23e1161015f578063c968c23e14610a09578063cb66667f14610a29578063ce31a06b14610a3e578063da0b3ad114610a4657600080fd5b8063aa1ee32b1461099c578063b21d403a146109b6578063c577a94c146109c9578063c6d69a30146109e957600080fd5b8063a47e0d76116101cc578063a47e0d7614610927578063a4eb718c14610947578063a69df4b514610967578063a9059cbb1461097c57600080fd5b80638da5cb5b1461088e578063923d9b95146108ac57806394be1574146108e457806395d89b41146108f957600080fd5b8063445db8c8116102f85780636e820d531161028b578063790ca4131161025a578063790ca4131461078f5780637ccfd7fc146107a55780637e4e40ad146107c95780638b021978146107df5780638c65c81f146107f457600080fd5b80636e820d531461071757806370a082311461072f578063715018a61461076557806377d71ceb1461077a57600080fd5b80635849f094116102c75780635849f094146106ac57806361728f39146106cc57806364c3da2b146106e25780636d26e1d4146106f757600080fd5b8063445db8c814610640578063454f7b8f14610656578063571ac8b01461066c578063573761981461068c57600080fd5b80631fe543e311610370578063313ce5671161033f578063313ce567146105c35780633719755e146105df5780633e4a4d5a146105ff578063403c9fa81461062357600080fd5b80631fe543e31461053157806323b872dd1461055157806324f74697146105715780632836be24146105a357600080fd5b806307763c1f116103ac57806307763c1f146104b3578063095ea7b3146104c857806311f0281e146104f857806318160ddd1461051c57600080fd5b80630484a22f146103e9578063056939da1461041f57806306fdde031461045757806307257a291461049157600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613d80565b610c7c565b6040516104169190613d9d565b60405180910390f35b34801561042b57600080fd5b50600d5461043f906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561046357600080fd5b506040805180820190915260088152676f7474746f2e696f60c01b60208201525b6040516104169190613de1565b34801561049d57600080fd5b506104b16104ac366004613d80565b610ce8565b005b3480156104bf57600080fd5b506104b1610d3d565b3480156104d457600080fd5b506104e86104e3366004613e2f565b610d7b565b6040519015158152602001610416565b34801561050457600080fd5b5061050e60115481565b604051908152602001610416565b34801561052857600080fd5b5060215461050e565b34801561053d57600080fd5b506104b161054c366004613e71565b610de8565b34801561055d57600080fd5b506104e861056c366004613f3b565b610e70565b34801561057d57600080fd5b5060075461058e9063ffffffff1681565b60405163ffffffff9091168152602001610416565b3480156105af57600080fd5b506104b16105be366004613f8a565b610f32565b3480156105cf57600080fd5b5060405160068152602001610416565b3480156105eb57600080fd5b506104b16105fa366004613fc3565b610f87565b34801561060b57600080fd5b5060115460009081526016602052604090205461050e565b34801561062f57600080fd5b50600f54610100900460ff166104e8565b34801561064c57600080fd5b5061050e60235481565b34801561066257600080fd5b5061050e60155481565b34801561067857600080fd5b506104e8610687366004613d80565b610fda565b34801561069857600080fd5b506104b16106a7366004613e2f565b610fe8565b3480156106b857600080fd5b506104b16106c7366004613fe9565b611088565b3480156106d857600080fd5b5061050e60065481565b3480156106ee57600080fd5b506104b16110b7565b34801561070357600080fd5b506104b1610712366004613fe9565b611100565b34801561072357600080fd5b50600f5460ff166104e8565b34801561073b57600080fd5b5061050e61074a366004613d80565b6001600160a01b031660009081526019602052604090205490565b34801561077157600080fd5b506104b161112f565b34801561078657600080fd5b506104b1611191565b34801561079b57600080fd5b5061050e60265481565b3480156107b157600080fd5b5060075461058e90600160301b900463ffffffff1681565b3480156107d557600080fd5b5061050e60245481565b3480156107eb57600080fd5b506104b1611276565b34801561080057600080fd5b5061085561080f366004613fe9565b601b602052600090815260409020805460018201546002830154600384015460049094015492939192909160ff8082169261010083048216926201000090049091169087565b60408051978852602088019690965294860193909352901515606085015215156080840152151560a083015260c082015260e001610416565b34801561089a57600080fd5b506000546001600160a01b031661043f565b3480156108b857600080fd5b5061050e6108c7366004613e2f565b601860209081526000928352604080842090915290825290205481565b3480156108f057600080fd5b506104b16112bd565b34801561090557600080fd5b506040805180820190915260058152644f5454544f60d81b6020820152610484565b34801561093357600080fd5b50600f546104e89062010000900460ff1681565b34801561095357600080fd5b506104b1610962366004613fc3565b61165e565b34801561097357600080fd5b506104b16116a4565b34801561098857600080fd5b506104e8610997366004613e2f565b6117a0565b3480156109a857600080fd5b506013546104e89060ff1681565b6104b16109c4366004613fe9565b6117ad565b3480156109d557600080fd5b506104b16109e4366004613fe9565b611803565b3480156109f557600080fd5b506104b1610a04366004613fe9565b611e5a565b348015610a1557600080fd5b506104b1610a24366004613fe9565b611ee3565b348015610a3557600080fd5b50600e5461050e565b6104b1611f12565b348015610a5257600080fd5b506104b1611f6b565b348015610a6757600080fd5b5061050e60145481565b348015610a7d57600080fd5b506104b1610a8c366004613fe9565b611fa9565b348015610a9d57600080fd5b5061050e610aac366004614002565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b348015610ae357600080fd5b50600c5461043f906001600160a01b031681565b348015610b0357600080fd5b506104b1610b12366004613fe9565b612018565b348015610b2357600080fd5b5061050e610b32366004613d80565b601c6020526000908152604090205481565b348015610b5057600080fd5b5061050e60125481565b348015610b6657600080fd5b5061050e60095481565b348015610b7c57600080fd5b506104b1610b8b366004614030565b612047565b348015610b9c57600080fd5b50600b5461043f906001600160a01b031681565b348015610bbc57600080fd5b506104b1610bcb366004613d80565b61209f565b348015610bdc57600080fd5b506104b1610beb366004613fe9565b612177565b348015610bfc57600080fd5b5061050e610c0b366004613fe9565b6121a6565b348015610c1c57600080fd5b5061050e60255481565b348015610c3257600080fd5b506104b1610c41366004613fe9565b6121c7565b348015610c5257600080fd5b506104b1610c61366004613fe9565b6121f6565b348015610c7257600080fd5b5061050e60225481565b6001600160a01b038116600090815260176020908152604091829020805483518184028101840190945280845260609392830182828015610cdc57602002820191906000526020600020905b815481526020019060010190808311610cc8575b50505050509050919050565b6000546001600160a01b03163314610d1b5760405162461bcd60e51b8152600401610d129061405a565b60405180910390fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d675760405162461bcd60e51b8152600401610d129061405a565b600f805460ff19811660ff90911615179055565b336000818152601d602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610dd69086815260200190565b60405180910390a35060015b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e625760405163073e64fd60e21b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610d12565b610e6c82826122e9565b5050565b6001600160a01b0383166000908152601d6020908152604080832033845290915281205460001914610f1d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601d82528381203382529091529190912054610ef8918490612962565b6001600160a01b0385166000908152601d602090815260408083203384529091529020555b610f2884848461299c565b90505b9392505050565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610d129061405a565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fb15760405162461bcd60e51b8152600401610d129061405a565b6007805463ffffffff909216600160301b0269ffffffff00000000000019909216919091179055565b6000610de282600019610d7b565b6000546001600160a01b031633146110125760405162461bcd60e51b8152600401610d129061405a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561105f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611083919061408f565b505050565b6000546001600160a01b031633146110b25760405162461bcd60e51b8152600401610d129061405a565b600655565b6000546001600160a01b031633146110e15760405162461bcd60e51b8152600401610d129061405a565b600f805462ff0000198116620100009182900460ff1615909102179055565b6000546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610d129061405a565b602055565b6000546001600160a01b031633146111595760405162461bcd60e51b8152600401610d129061405a565b600080546040516001600160a01b0390911690600080516020614272833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610d129061405a565b600480546006546007546040516305d3b1d360e41b815293840191909152600160a01b820467ffffffffffffffff166024840152640100000000810461ffff16604484015263ffffffff8082166064850152600160301b9091041660848301526001600160a01b031690635d3b1d309060a4016020604051808303816000875af115801561124d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127191906140ac565b600955565b6000546001600160a01b031633146112a05760405162461bcd60e51b8152600401610d129061405a565b600f805461ff001981166101009182900460ff1615909102179055565b600f805463ff000000191663010000001790553233146113135760405162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b6044820152606401610d12565b6002600354036113655760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d12565b6002600381905560408051828152606081018252600092909160208301908036833701905050905030816000815181106113a1576113a16140c5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141e91906140db565b81600181518110611431576114316140c5565b6001600160a01b039092166020928302919091018201526011546000908152601b909152604090206001015480158015906114735750600f54610100900460ff165b1561164857306000818152601d60209081526040808320338452909152808220849055600c54905163791ac94760e01b815247936001600160a01b039092169263791ac947926114cc92879291899142906004016140f8565b600060405180830381600087803b1580156114e657600080fd5b505af11580156114fa573d6000803e3d6000fd5b50506011546000908152601b602052604090206001015461151e925084915061417f565b601b60006011548152602001908152602001600020600101819055506000601154600161154b9190614192565b905060006115594784612bd6565b90506000611581606461157b601f546064611574919061417f565b8590612225565b906122a7565b9050600061159f606461157b6020548561222590919063ffffffff16565b6011546000908152601b602052604090205490915081906115c1908490614192565b6115cb919061417f565b6011546000908152601b60205260408082209290925585815220546115f1908290614192565b6000858152601b6020526040902055601e546001600160a01b03166108fc611619848661417f565b6040518115909202916000818181858888f19350505050158015611641573d6000803e3d6000fd5b5050505050505b50506001600355600f805463ff00000019169055565b6000546001600160a01b031633146116885760405162461bcd60e51b8152600401610d129061405a565b6007805463ffffffff191663ffffffff92909216919091179055565b6001546001600160a01b0316331461170a5760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610d12565b60025442116117515760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610d12565b600154600080546040516001600160a01b03938416939091169160008051602061427283398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610f2b33848461299c565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610d129061405a565b6000818152601b60205260409020546117f1903490614192565b6000918252601b602052604090912055565b6000546001600160a01b0316331461182d5760405162461bcd60e51b8152600401610d129061405a565b6013805460ff1916905560125461184390612c18565b6012546000908152601b60209081526040808320546016909252909120541580159061186f5750600081115b801561189457506012546000908152601b6020526040902060030154610100900460ff165b80156118ba57506012546000908152601b602052604090206003015462010000900460ff165b15611e21576012546000908152601b60205260409020600301805462ff0000191690556015546118eb908290614192565b60155560125460009081526016602052604081205461190a90846141bb565b6012546000908152601660205260408120549192509061192a8542612f0e565b61193491906141bb565b6012546000908152601660205260408120549192509061195e426119588882612f0e565b90612f0e565b61196891906141bb565b905060006016600060125481526020019081526020016000208481548110611992576119926140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c084015260125484526016909152822080549193509085908110611a1b57611a1b6140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c084015260125484526016909152822080549193509085908110611aa457611aa46140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03169284019290925260028201549083015260038101546060830152600481015460ff1615156080830152600581015460a080840182905260069092015460c0840152858201519187015192945091611b299190614192565b611b339190614192565b90508015611d39576000611b588261157b8760a001518c61222590919063ffffffff16565b90506000611b778361157b8760a001518d61222590919063ffffffff16565b90506000611b968461157b8760a001518e61222590919063ffffffff16565b60208801516040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015611bd3573d6000803e3d6000fd5b5085602001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015611c11573d6000803e3d6000fd5b5084602001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611c4f573d6000803e3d6000fd5b5060208088015188516012546000818152601b90945260409384902054935160008051602061425283398151915294611c93949392899290914291600191906141cf565b60405180910390a160208087015187516012546000818152601b90945260409384902054935160008051602061425283398151915294611cde949392889290914291600291906141cf565b60405180910390a160208086015186516012546000818152601b90945260409384902054935160008051602061425283398151915294611d29949392879290914291600391906141cf565b60405180910390a1505050611e15565b60208085015185516012546000818152601b909452604080852054905160008051602061425283398151915295611d7a9594939092909142916001916141cf565b60405180910390a160208084015184516012546000818152601b909452604080852054905160008051602061425283398151915295611dc39594939092909142916002916141cf565b60405180910390a160208083015183516012546000818152601b909452604080852054905160008051602061425283398151915295611e0c9594939092909142916003916141cf565b60405180910390a15b50505050505050611e40565b6012546000908152601b60205260409020600301805462ff0000191690555b6012546000908152601660205260408120610e6c91613c5c565b6000546001600160a01b03163314611e845760405162461bcd60e51b8152600401610d129061405a565b600c600e5411158015611e9957506000600e54115b611ede5760405162461bcd60e51b8152602060048201526016602482015275115e18d959591cc81d185e081c985d19481b1a5b5a5d60521b6044820152606401610d12565b600e55565b6000546001600160a01b03163314611f0d5760405162461bcd60e51b8152600401610d129061405a565b602255565b6000546001600160a01b03163314611f3c5760405162461bcd60e51b8152600401610d129061405a565b60405133904780156108fc02916000818181858888f19350505050158015611f68573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611f955760405162461bcd60e51b8152600401610d129061405a565b6013805460ff19811660ff90911615179055565b6000546001600160a01b03163314611fd35760405162461bcd60e51b8152600401610d129061405a565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020614272833981519152908290a350565b6000546001600160a01b031633146120425760405162461bcd60e51b8152600401610d129061405a565b602455565b6000546001600160a01b031633146120715760405162461bcd60e51b8152600401610d129061405a565b6004805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b6000546001600160a01b031633146120c95760405162461bcd60e51b8152600401610d129061405a565b6001600160a01b03811661212e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d12565b600080546040516001600160a01b038085169392169160008051602061427283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121a15760405162461bcd60e51b8152600401610d129061405a565b602555565b600881815481106121b657600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146121f15760405162461bcd60e51b8152600401610d129061405a565b601155565b6000546001600160a01b031633146122205760405162461bcd60e51b8152600401610d129061405a565b602355565b60008260000361223757506000610de2565b6000612243838561420d565b9050826122508583614224565b14610f2b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d12565b6000610f2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f6d565b80516122fc906008906020840190613c7d565b506013805460ff1916905560125461231390612c18565b6012546000908152601b60209081526040808320546016909252909120541580159061233f5750600081115b801561236457506012546000908152601b6020526040902060030154610100900460ff165b801561238a57506012546000908152601b602052604090206003015462010000900460ff165b15612929576012546000908152601b60205260409020600301805462ff0000191690556015546123bb908290614192565b6015556012546000908152601660205260408120548351849083906123e2576123e26140c5565b60200260200101516123f491906141bb565b6012546000908152601660205260408120548551929350909185906001908110612420576124206140c5565b602002602001015161243291906141bb565b601254600090815260166020526040812054865192935090918690600290811061245e5761245e6140c5565b602002602001015161247091906141bb565b90506000601660006012548152602001908152602001600020848154811061249a5761249a6140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c084015260125484526016909152822080549193509085908110612523576125236140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c0840152601254845260169091528220805491935090859081106125ac576125ac6140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03169284019290925260028201549083015260038101546060830152600481015460ff1615156080830152600581015460a080840182905260069092015460c08401528582015191870151929450916126319190614192565b61263b9190614192565b905080156128415760006126608261157b8760a001518c61222590919063ffffffff16565b9050600061267f8361157b8760a001518d61222590919063ffffffff16565b9050600061269e8461157b8760a001518e61222590919063ffffffff16565b60208801516040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156126db573d6000803e3d6000fd5b5085602001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015612719573d6000803e3d6000fd5b5084602001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612757573d6000803e3d6000fd5b5060208088015188516012546000818152601b9094526040938490205493516000805160206142528339815191529461279b949392899290914291600191906141cf565b60405180910390a160208087015187516012546000818152601b909452604093849020549351600080516020614252833981519152946127e6949392889290914291600291906141cf565b60405180910390a160208086015186516012546000818152601b90945260409384902054935160008051602061425283398151915294612831949392879290914291600391906141cf565b60405180910390a150505061291d565b60208085015185516012546000818152601b9094526040808520549051600080516020614252833981519152956128829594939092909142916001916141cf565b60405180910390a160208084015184516012546000818152601b9094526040808520549051600080516020614252833981519152956128cb9594939092909142916002916141cf565b60405180910390a160208083015183516012546000818152601b9094526040808520549051600080516020614252833981519152956129149594939092909142916003916141cf565b60405180910390a15b50505050505050612948565b6012546000908152601b60205260409020600301805462ff0000191690555b601254600090815260166020526040812061108391613c5c565b600081848411156129865760405162461bcd60e51b8152600401610d129190613de1565b506000612993848661417f565b95945050505050565b6011546000908152601b6020526040812060020154421180156129d357506011546000908152601b602052604090206003015460ff165b80156129f957506011546000908152601b6020526040902060030154610100900460ff16155b8015612a0d5750600f5462010000900460ff165b8015612a235750600f546301000000900460ff16155b15612a3057612a30612f9b565b600f546301000000900460ff1615612a5457612a4d848484613105565b9050610f2b565b612a5c6131eb565b15612a6957612a6961322b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260199091529190912054612abb918490612962565b6001600160a01b038516600090815260196020526040812091909155612ae1858561351b565b612aeb5782612af6565b612af685848661357b565b6001600160a01b038516600090815260196020526040902054909150612b1c9082612f0e565b6001600160a01b03808616600081815260196020526040902092909255600d54161480612b705750600d546001600160a01b03868116911614801590612b705750600d546001600160a01b03858116911614155b15612b7e57612b7e85613ae8565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bc391815260200190565b60405180910390a3506001949350505050565b6000610f2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612962565b600f805463ff000000191663010000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612c6057612c606140c5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd91906140db565b81600181518110612cf057612cf06140c5565b6001600160a01b039092166020928302919091018201526000838152601b90915260409020600101548015801590612d2f5750600f54610100900460ff165b15612efc57306000818152601d602081815260408084203385528252808420869055918152818320600c80546001600160a01b039081168652919092528284208690559054915163791ac94760e01b81524794929091169263791ac94792612da092879291899142906004016140f8565b600060405180830381600087803b158015612dba57600080fd5b505af1158015612dce573d6000803e3d6000fd5b5050506000858152601b6020526040902060010154612def9150839061417f565b6000858152601b6020526040812060019081019290925590612e12908690614192565b90506000612e204784612bd6565b90506000612e3b606461157b601f546064611574919061417f565b90506000612e59606461157b6020548561222590919063ffffffff16565b6000898152601b60205260409020549091508190612e78908490614192565b612e82919061417f565b6000898152601b6020526040808220929092558581522054612ea5908290614192565b6000858152601b6020526040902055601e546001600160a01b03166108fc612ecd848661417f565b6040518115909202916000818181858888f19350505050158015612ef5573d6000803e3d6000fd5b5050505050505b5050600f805463ff0000001916905550565b600080612f1b8385614192565b905083811015610f2b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d12565b60008183612f8e5760405162461bcd60e51b8152600401610d129190613de1565b5060006129938486614224565b6011805460128190556000908152601b60205260408082206003908101805461ff0019166101001790558354835290822001805462ff00001916620100001790556013805460ff1916600190811790915591549091612ffa9190614192565b60118190556000818152601b60205260409020600301805460ff1916600117905560255490915061302b9042614192565b6011546000908152601b60205260409081902060020191909155426026556004805460065460075493516305d3b1d360e41b815292830152600160a01b810467ffffffffffffffff166024830152640100000000830461ffff16604483015263ffffffff8084166064840152600160301b90930490921660848201526001600160a01b0390911690635d3b1d309060a4016020604051808303816000875af11580156130db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ff91906140ac565b60095550565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601990915291822054613156918490612962565b6001600160a01b0380861660009081526019602052604080822093909355908516815220546131859083612f0e565b6001600160a01b0380851660008181526019602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131d99086815260200190565b60405180910390a35060019392505050565b600d546000906001600160a01b031633148015906132135750600f546301000000900460ff16155b80156132265750600f54610100900460ff165b905090565b600f805463ff000000191663010000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110613273576132736140c5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f091906140db565b81600181518110613303576133036140c5565b6001600160a01b039092166020928302919091018201526011546000908152601b9091526040902060010154602454811161333f576000613345565b50602454805b5060008111801561335d5750600f54610100900460ff165b1561350a57600c5460405163791ac94760e01b815247916001600160a01b03169063791ac9479061339b9085906000908890309042906004016140f8565b600060405180830381600087803b1580156133b557600080fd5b505af11580156133c9573d6000803e3d6000fd5b50506011546000908152601b60205260409020600101546133ed925084915061417f565b601b60006011548152602001908152602001600020600101819055506000601154600161341a9190614192565b905060006134284784612bd6565b90506000613443606461157b601f546064611574919061417f565b90506000613461606461157b6020548561222590919063ffffffff16565b6011546000908152601b60205260409020549091508190613483908490614192565b61348d919061417f565b6011546000908152601b60205260408082209290925585815220546134b3908290614192565b6000858152601b6020526040902055601e546001600160a01b03166108fc6134db848661417f565b6040518115909202916000818181858888f19350505050158015613503573d6000803e3d6000fd5b5050505050505b5050600f805463ff00000019169055565b600d546000906001600160a01b03848116911614801561354957506000546001600160a01b03838116911614155b801561355d57506001600160a01b03821615155b8015610f2b57506001600160a01b03821661dead1415905092915050565b600080613598606461157b600e548761222590919063ffffffff16565b306000908152601960205260409020549091506135b59082612f0e565b306000908152601960205260409020558015613a9e576023546001600160a01b03841660009081526018602090815260408083206011548452909152902054106136415760405162461bcd60e51b815260206004820152601f60248201527f5469636b6574204c696d69742070657220526f756e64206578636565646564006044820152606401610d12565b6022548411156136935760405162461bcd60e51b815260206004820152601f60248201527f45786365656473204d6178696d756d205469636b6574205175616e74697479006044820152606401610d12565b60008052601b6020527f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ed5460ff166137375760008052601b6020527f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ed805460ff191660011790556025546137079042614192565b60008052601b6020527f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ec55426026555b6001600160a01b038316600090815260186020908152604080832060115484529091528120549003613790576001600160a01b038316600090815260176020526040902060608051909161378d91608090613c7d565b50505b6011546000908152601b60205260409020600101546137b0908290614192565b601180546000908152601b60205260408082206001908101949094559154815220600401546137de91614192565b601180546000908152601b60209081526040808320600401949094556001600160a01b0387168083526017808352858420945484526016835294832054845460018101865585855283852001559091529190915280546138419082908190613cc8565b506001600160a01b03841660009081526018602090815260408083206011548452909152902054613873906001614192565b6001600160a01b038516600090815260186020908152604080832060115484529091528120919091556014546138aa906001614192565b90506138f76040518060e001604052806000815260200160006001600160a01b03168152602001600081526020016000815260200160001515815260200160008152602001600081525090565b81816000018181525050601154816040018181525050428160600181815250508581602001906001600160a01b031690816001600160a01b031681525050868160a00181815250506016600060115481526020019081526020016000208190806001815401808255809150506001900390600052602060002090600702016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060155505043601c6000886001600160a01b03166001600160a01b0316815260200190815260200160002081905550816014819055507f033deaddb740d99e6df3991e2b22d265e54cc91f51d3309df54dbc54d943933186836011548a42604051613a929594939291906001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b60405180910390a15050505b60405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36129938482612bd6565b6001600160a01b03811660009081526018602090815260408083206011548452909152812054905b81811015613c335760115460009081526016602090815260408083206001600160a01b038716845260179092528220805484908110613b5157613b516140c5565b906000526020600020015481548110613b6c57613b6c6140c5565b600091825260208083206005600790930201919091019290925560115481526016825260408082206001600160a01b03871683526017909352902080547fddc51198ffe6c76261358b3d94ff5e96792c79e0f5761b840b814d95f5d14e8692919084908110613bdd57613bdd6140c5565b906000526020600020015481548110613bf857613bf86140c5565b906000526020600020906007020160000154604051613c1991815260200190565b60405180910390a180613c2b81614238565b915050613b10565b50506001600160a01b031660009081526018602090815260408083206011548452909152812055565b5080546000825560070290600052602060002090810190611f689190613d08565b828054828255906000526020600020908101928215613cb8579160200282015b82811115613cb8578251825591602001919060010190613c9d565b50613cc4929150613d56565b5090565b828054828255906000526020600020908101928215613cb85760005260206000209182015b82811115613cb8578254825591600101919060010190613ced565b5b80821115613cc45760008082556001820180546001600160a01b0319169055600282018190556003820181905560048201805460ff19169055600582018190556006820155600701613d09565b5b80821115613cc45760008155600101613d57565b6001600160a01b0381168114611f6857600080fd5b600060208284031215613d9257600080fd5b8135610f2b81613d6b565b6020808252825182820181905260009190848201906040850190845b81811015613dd557835183529284019291840191600101613db9565b50909695505050505050565b600060208083528351808285015260005b81811015613e0e57858101830151858201604001528201613df2565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613e4257600080fd5b8235613e4d81613d6b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215613e8457600080fd5b8235915060208084013567ffffffffffffffff80821115613ea457600080fd5b818601915086601f830112613eb857600080fd5b813581811115613eca57613eca613e5b565b8060051b604051601f19603f83011681018181108582111715613eef57613eef613e5b565b604052918252848201925083810185019189831115613f0d57600080fd5b938501935b82851015613f2b57843584529385019392850192613f12565b8096505050505050509250929050565b600080600060608486031215613f5057600080fd5b8335613f5b81613d6b565b92506020840135613f6b81613d6b565b929592945050506040919091013590565b8015158114611f6857600080fd5b60008060408385031215613f9d57600080fd5b8235613fa881613d6b565b91506020830135613fb881613f7c565b809150509250929050565b600060208284031215613fd557600080fd5b813563ffffffff81168114610f2b57600080fd5b600060208284031215613ffb57600080fd5b5035919050565b6000806040838503121561401557600080fd5b823561402081613d6b565b91506020830135613fb881613d6b565b60006020828403121561404257600080fd5b813567ffffffffffffffff81168114610f2b57600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156140a157600080fd5b8151610f2b81613f7c565b6000602082840312156140be57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156140ed57600080fd5b8151610f2b81613d6b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156141485784516001600160a01b031683529383019391830191600101614123565b50506001600160a01b03969096166060850152505050608001529392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610de257610de2614169565b80820180821115610de257610de2614169565b634e487b7160e01b600052601260045260246000fd5b6000826141ca576141ca6141a5565b500690565b6001600160a01b03979097168752602087019590955260408601939093526060850191909152608084015260ff1660a083015260c082015260e00190565b8082028115828204841417610de257610de2614169565b600082614233576142336141a5565b500490565b60006001820161424a5761424a614169565b506001019056fedad2a6255cb4ac6e5db11e33f30e2b29818f9fa716f743ad17675961e0b90e1c8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212204e1ea9341f08ce368db7ae7818b162afe157702317abdc716b26cfb895ca210164736f6c634300081100330000000000000000000000000194dfed7dc31a72556afed6db3ad739022cbcff000000000000000000000000000000000000000000000000000000000000001e

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80638da5cb5b116101fd578063dd11247e11610118578063ea7b4f77116100ab578063f6eaffc81161007a578063f6eaffc814610bf0578063f7cb789a14610c10578063f8c9637d14610c26578063fcad44ab14610c46578063ffacbe1d14610c6657600080fd5b8063ea7b4f7714610b70578063ed606af414610b90578063f2fde38b14610bb0578063f6be71d114610bd057600080fd5b8063e040b278116100e7578063e040b27814610af7578063e16b580e14610b17578063e4dd99f914610b44578063e89e106a14610b5a57600080fd5b8063dd11247e14610a5b578063dd46706414610a71578063dd62ed3e14610a91578063deadbc1414610ad757600080fd5b8063aa1ee32b11610190578063c968c23e1161015f578063c968c23e14610a09578063cb66667f14610a29578063ce31a06b14610a3e578063da0b3ad114610a4657600080fd5b8063aa1ee32b1461099c578063b21d403a146109b6578063c577a94c146109c9578063c6d69a30146109e957600080fd5b8063a47e0d76116101cc578063a47e0d7614610927578063a4eb718c14610947578063a69df4b514610967578063a9059cbb1461097c57600080fd5b80638da5cb5b1461088e578063923d9b95146108ac57806394be1574146108e457806395d89b41146108f957600080fd5b8063445db8c8116102f85780636e820d531161028b578063790ca4131161025a578063790ca4131461078f5780637ccfd7fc146107a55780637e4e40ad146107c95780638b021978146107df5780638c65c81f146107f457600080fd5b80636e820d531461071757806370a082311461072f578063715018a61461076557806377d71ceb1461077a57600080fd5b80635849f094116102c75780635849f094146106ac57806361728f39146106cc57806364c3da2b146106e25780636d26e1d4146106f757600080fd5b8063445db8c814610640578063454f7b8f14610656578063571ac8b01461066c578063573761981461068c57600080fd5b80631fe543e311610370578063313ce5671161033f578063313ce567146105c35780633719755e146105df5780633e4a4d5a146105ff578063403c9fa81461062357600080fd5b80631fe543e31461053157806323b872dd1461055157806324f74697146105715780632836be24146105a357600080fd5b806307763c1f116103ac57806307763c1f146104b3578063095ea7b3146104c857806311f0281e146104f857806318160ddd1461051c57600080fd5b80630484a22f146103e9578063056939da1461041f57806306fdde031461045757806307257a291461049157600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613d80565b610c7c565b6040516104169190613d9d565b60405180910390f35b34801561042b57600080fd5b50600d5461043f906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561046357600080fd5b506040805180820190915260088152676f7474746f2e696f60c01b60208201525b6040516104169190613de1565b34801561049d57600080fd5b506104b16104ac366004613d80565b610ce8565b005b3480156104bf57600080fd5b506104b1610d3d565b3480156104d457600080fd5b506104e86104e3366004613e2f565b610d7b565b6040519015158152602001610416565b34801561050457600080fd5b5061050e60115481565b604051908152602001610416565b34801561052857600080fd5b5060215461050e565b34801561053d57600080fd5b506104b161054c366004613e71565b610de8565b34801561055d57600080fd5b506104e861056c366004613f3b565b610e70565b34801561057d57600080fd5b5060075461058e9063ffffffff1681565b60405163ffffffff9091168152602001610416565b3480156105af57600080fd5b506104b16105be366004613f8a565b610f32565b3480156105cf57600080fd5b5060405160068152602001610416565b3480156105eb57600080fd5b506104b16105fa366004613fc3565b610f87565b34801561060b57600080fd5b5060115460009081526016602052604090205461050e565b34801561062f57600080fd5b50600f54610100900460ff166104e8565b34801561064c57600080fd5b5061050e60235481565b34801561066257600080fd5b5061050e60155481565b34801561067857600080fd5b506104e8610687366004613d80565b610fda565b34801561069857600080fd5b506104b16106a7366004613e2f565b610fe8565b3480156106b857600080fd5b506104b16106c7366004613fe9565b611088565b3480156106d857600080fd5b5061050e60065481565b3480156106ee57600080fd5b506104b16110b7565b34801561070357600080fd5b506104b1610712366004613fe9565b611100565b34801561072357600080fd5b50600f5460ff166104e8565b34801561073b57600080fd5b5061050e61074a366004613d80565b6001600160a01b031660009081526019602052604090205490565b34801561077157600080fd5b506104b161112f565b34801561078657600080fd5b506104b1611191565b34801561079b57600080fd5b5061050e60265481565b3480156107b157600080fd5b5060075461058e90600160301b900463ffffffff1681565b3480156107d557600080fd5b5061050e60245481565b3480156107eb57600080fd5b506104b1611276565b34801561080057600080fd5b5061085561080f366004613fe9565b601b602052600090815260409020805460018201546002830154600384015460049094015492939192909160ff8082169261010083048216926201000090049091169087565b60408051978852602088019690965294860193909352901515606085015215156080840152151560a083015260c082015260e001610416565b34801561089a57600080fd5b506000546001600160a01b031661043f565b3480156108b857600080fd5b5061050e6108c7366004613e2f565b601860209081526000928352604080842090915290825290205481565b3480156108f057600080fd5b506104b16112bd565b34801561090557600080fd5b506040805180820190915260058152644f5454544f60d81b6020820152610484565b34801561093357600080fd5b50600f546104e89062010000900460ff1681565b34801561095357600080fd5b506104b1610962366004613fc3565b61165e565b34801561097357600080fd5b506104b16116a4565b34801561098857600080fd5b506104e8610997366004613e2f565b6117a0565b3480156109a857600080fd5b506013546104e89060ff1681565b6104b16109c4366004613fe9565b6117ad565b3480156109d557600080fd5b506104b16109e4366004613fe9565b611803565b3480156109f557600080fd5b506104b1610a04366004613fe9565b611e5a565b348015610a1557600080fd5b506104b1610a24366004613fe9565b611ee3565b348015610a3557600080fd5b50600e5461050e565b6104b1611f12565b348015610a5257600080fd5b506104b1611f6b565b348015610a6757600080fd5b5061050e60145481565b348015610a7d57600080fd5b506104b1610a8c366004613fe9565b611fa9565b348015610a9d57600080fd5b5061050e610aac366004614002565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b348015610ae357600080fd5b50600c5461043f906001600160a01b031681565b348015610b0357600080fd5b506104b1610b12366004613fe9565b612018565b348015610b2357600080fd5b5061050e610b32366004613d80565b601c6020526000908152604090205481565b348015610b5057600080fd5b5061050e60125481565b348015610b6657600080fd5b5061050e60095481565b348015610b7c57600080fd5b506104b1610b8b366004614030565b612047565b348015610b9c57600080fd5b50600b5461043f906001600160a01b031681565b348015610bbc57600080fd5b506104b1610bcb366004613d80565b61209f565b348015610bdc57600080fd5b506104b1610beb366004613fe9565b612177565b348015610bfc57600080fd5b5061050e610c0b366004613fe9565b6121a6565b348015610c1c57600080fd5b5061050e60255481565b348015610c3257600080fd5b506104b1610c41366004613fe9565b6121c7565b348015610c5257600080fd5b506104b1610c61366004613fe9565b6121f6565b348015610c7257600080fd5b5061050e60225481565b6001600160a01b038116600090815260176020908152604091829020805483518184028101840190945280845260609392830182828015610cdc57602002820191906000526020600020905b815481526020019060010190808311610cc8575b50505050509050919050565b6000546001600160a01b03163314610d1b5760405162461bcd60e51b8152600401610d129061405a565b60405180910390fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d675760405162461bcd60e51b8152600401610d129061405a565b600f805460ff19811660ff90911615179055565b336000818152601d602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610dd69086815260200190565b60405180910390a35060015b92915050565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699091614610e625760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909166024820152604401610d12565b610e6c82826122e9565b5050565b6001600160a01b0383166000908152601d6020908152604080832033845290915281205460001914610f1d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601d82528381203382529091529190912054610ef8918490612962565b6001600160a01b0385166000908152601d602090815260408083203384529091529020555b610f2884848461299c565b90505b9392505050565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610d129061405a565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fb15760405162461bcd60e51b8152600401610d129061405a565b6007805463ffffffff909216600160301b0269ffffffff00000000000019909216919091179055565b6000610de282600019610d7b565b6000546001600160a01b031633146110125760405162461bcd60e51b8152600401610d129061405a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561105f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611083919061408f565b505050565b6000546001600160a01b031633146110b25760405162461bcd60e51b8152600401610d129061405a565b600655565b6000546001600160a01b031633146110e15760405162461bcd60e51b8152600401610d129061405a565b600f805462ff0000198116620100009182900460ff1615909102179055565b6000546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610d129061405a565b602055565b6000546001600160a01b031633146111595760405162461bcd60e51b8152600401610d129061405a565b600080546040516001600160a01b0390911690600080516020614272833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111bb5760405162461bcd60e51b8152600401610d129061405a565b600480546006546007546040516305d3b1d360e41b815293840191909152600160a01b820467ffffffffffffffff166024840152640100000000810461ffff16604484015263ffffffff8082166064850152600160301b9091041660848301526001600160a01b031690635d3b1d309060a4016020604051808303816000875af115801561124d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127191906140ac565b600955565b6000546001600160a01b031633146112a05760405162461bcd60e51b8152600401610d129061405a565b600f805461ff001981166101009182900460ff1615909102179055565b600f805463ff000000191663010000001790553233146113135760405162461bcd60e51b8152602060048201526011602482015270736f7272792068756d616e73206f6e6c7960781b6044820152606401610d12565b6002600354036113655760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d12565b6002600381905560408051828152606081018252600092909160208301908036833701905050905030816000815181106113a1576113a16140c5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141e91906140db565b81600181518110611431576114316140c5565b6001600160a01b039092166020928302919091018201526011546000908152601b909152604090206001015480158015906114735750600f54610100900460ff165b1561164857306000818152601d60209081526040808320338452909152808220849055600c54905163791ac94760e01b815247936001600160a01b039092169263791ac947926114cc92879291899142906004016140f8565b600060405180830381600087803b1580156114e657600080fd5b505af11580156114fa573d6000803e3d6000fd5b50506011546000908152601b602052604090206001015461151e925084915061417f565b601b60006011548152602001908152602001600020600101819055506000601154600161154b9190614192565b905060006115594784612bd6565b90506000611581606461157b601f546064611574919061417f565b8590612225565b906122a7565b9050600061159f606461157b6020548561222590919063ffffffff16565b6011546000908152601b602052604090205490915081906115c1908490614192565b6115cb919061417f565b6011546000908152601b60205260408082209290925585815220546115f1908290614192565b6000858152601b6020526040902055601e546001600160a01b03166108fc611619848661417f565b6040518115909202916000818181858888f19350505050158015611641573d6000803e3d6000fd5b5050505050505b50506001600355600f805463ff00000019169055565b6000546001600160a01b031633146116885760405162461bcd60e51b8152600401610d129061405a565b6007805463ffffffff191663ffffffff92909216919091179055565b6001546001600160a01b0316331461170a5760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610d12565b60025442116117515760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610d12565b600154600080546040516001600160a01b03938416939091169160008051602061427283398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610f2b33848461299c565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610d129061405a565b6000818152601b60205260409020546117f1903490614192565b6000918252601b602052604090912055565b6000546001600160a01b0316331461182d5760405162461bcd60e51b8152600401610d129061405a565b6013805460ff1916905560125461184390612c18565b6012546000908152601b60209081526040808320546016909252909120541580159061186f5750600081115b801561189457506012546000908152601b6020526040902060030154610100900460ff165b80156118ba57506012546000908152601b602052604090206003015462010000900460ff165b15611e21576012546000908152601b60205260409020600301805462ff0000191690556015546118eb908290614192565b60155560125460009081526016602052604081205461190a90846141bb565b6012546000908152601660205260408120549192509061192a8542612f0e565b61193491906141bb565b6012546000908152601660205260408120549192509061195e426119588882612f0e565b90612f0e565b61196891906141bb565b905060006016600060125481526020019081526020016000208481548110611992576119926140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c084015260125484526016909152822080549193509085908110611a1b57611a1b6140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c084015260125484526016909152822080549193509085908110611aa457611aa46140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03169284019290925260028201549083015260038101546060830152600481015460ff1615156080830152600581015460a080840182905260069092015460c0840152858201519187015192945091611b299190614192565b611b339190614192565b90508015611d39576000611b588261157b8760a001518c61222590919063ffffffff16565b90506000611b778361157b8760a001518d61222590919063ffffffff16565b90506000611b968461157b8760a001518e61222590919063ffffffff16565b60208801516040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015611bd3573d6000803e3d6000fd5b5085602001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015611c11573d6000803e3d6000fd5b5084602001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611c4f573d6000803e3d6000fd5b5060208088015188516012546000818152601b90945260409384902054935160008051602061425283398151915294611c93949392899290914291600191906141cf565b60405180910390a160208087015187516012546000818152601b90945260409384902054935160008051602061425283398151915294611cde949392889290914291600291906141cf565b60405180910390a160208086015186516012546000818152601b90945260409384902054935160008051602061425283398151915294611d29949392879290914291600391906141cf565b60405180910390a1505050611e15565b60208085015185516012546000818152601b909452604080852054905160008051602061425283398151915295611d7a9594939092909142916001916141cf565b60405180910390a160208084015184516012546000818152601b909452604080852054905160008051602061425283398151915295611dc39594939092909142916002916141cf565b60405180910390a160208083015183516012546000818152601b909452604080852054905160008051602061425283398151915295611e0c9594939092909142916003916141cf565b60405180910390a15b50505050505050611e40565b6012546000908152601b60205260409020600301805462ff0000191690555b6012546000908152601660205260408120610e6c91613c5c565b6000546001600160a01b03163314611e845760405162461bcd60e51b8152600401610d129061405a565b600c600e5411158015611e9957506000600e54115b611ede5760405162461bcd60e51b8152602060048201526016602482015275115e18d959591cc81d185e081c985d19481b1a5b5a5d60521b6044820152606401610d12565b600e55565b6000546001600160a01b03163314611f0d5760405162461bcd60e51b8152600401610d129061405a565b602255565b6000546001600160a01b03163314611f3c5760405162461bcd60e51b8152600401610d129061405a565b60405133904780156108fc02916000818181858888f19350505050158015611f68573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611f955760405162461bcd60e51b8152600401610d129061405a565b6013805460ff19811660ff90911615179055565b6000546001600160a01b03163314611fd35760405162461bcd60e51b8152600401610d129061405a565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020614272833981519152908290a350565b6000546001600160a01b031633146120425760405162461bcd60e51b8152600401610d129061405a565b602455565b6000546001600160a01b031633146120715760405162461bcd60e51b8152600401610d129061405a565b6004805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b6000546001600160a01b031633146120c95760405162461bcd60e51b8152600401610d129061405a565b6001600160a01b03811661212e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d12565b600080546040516001600160a01b038085169392169160008051602061427283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121a15760405162461bcd60e51b8152600401610d129061405a565b602555565b600881815481106121b657600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146121f15760405162461bcd60e51b8152600401610d129061405a565b601155565b6000546001600160a01b031633146122205760405162461bcd60e51b8152600401610d129061405a565b602355565b60008260000361223757506000610de2565b6000612243838561420d565b9050826122508583614224565b14610f2b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d12565b6000610f2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f6d565b80516122fc906008906020840190613c7d565b506013805460ff1916905560125461231390612c18565b6012546000908152601b60209081526040808320546016909252909120541580159061233f5750600081115b801561236457506012546000908152601b6020526040902060030154610100900460ff165b801561238a57506012546000908152601b602052604090206003015462010000900460ff165b15612929576012546000908152601b60205260409020600301805462ff0000191690556015546123bb908290614192565b6015556012546000908152601660205260408120548351849083906123e2576123e26140c5565b60200260200101516123f491906141bb565b6012546000908152601660205260408120548551929350909185906001908110612420576124206140c5565b602002602001015161243291906141bb565b601254600090815260166020526040812054865192935090918690600290811061245e5761245e6140c5565b602002602001015161247091906141bb565b90506000601660006012548152602001908152602001600020848154811061249a5761249a6140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c084015260125484526016909152822080549193509085908110612523576125236140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03168484015260028101548483015260038101546060850152600481015460ff1615156080850152600581015460a08501526006015460c0840152601254845260169091528220805491935090859081106125ac576125ac6140c5565b600091825260208083206040805160e08101825260079094029091018054845260018101546001600160a01b03169284019290925260028201549083015260038101546060830152600481015460ff1615156080830152600581015460a080840182905260069092015460c08401528582015191870151929450916126319190614192565b61263b9190614192565b905080156128415760006126608261157b8760a001518c61222590919063ffffffff16565b9050600061267f8361157b8760a001518d61222590919063ffffffff16565b9050600061269e8461157b8760a001518e61222590919063ffffffff16565b60208801516040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156126db573d6000803e3d6000fd5b5085602001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015612719573d6000803e3d6000fd5b5084602001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612757573d6000803e3d6000fd5b5060208088015188516012546000818152601b9094526040938490205493516000805160206142528339815191529461279b949392899290914291600191906141cf565b60405180910390a160208087015187516012546000818152601b909452604093849020549351600080516020614252833981519152946127e6949392889290914291600291906141cf565b60405180910390a160208086015186516012546000818152601b90945260409384902054935160008051602061425283398151915294612831949392879290914291600391906141cf565b60405180910390a150505061291d565b60208085015185516012546000818152601b9094526040808520549051600080516020614252833981519152956128829594939092909142916001916141cf565b60405180910390a160208084015184516012546000818152601b9094526040808520549051600080516020614252833981519152956128cb9594939092909142916002916141cf565b60405180910390a160208083015183516012546000818152601b9094526040808520549051600080516020614252833981519152956129149594939092909142916003916141cf565b60405180910390a15b50505050505050612948565b6012546000908152601b60205260409020600301805462ff0000191690555b601254600090815260166020526040812061108391613c5c565b600081848411156129865760405162461bcd60e51b8152600401610d129190613de1565b506000612993848661417f565b95945050505050565b6011546000908152601b6020526040812060020154421180156129d357506011546000908152601b602052604090206003015460ff165b80156129f957506011546000908152601b6020526040902060030154610100900460ff16155b8015612a0d5750600f5462010000900460ff165b8015612a235750600f546301000000900460ff16155b15612a3057612a30612f9b565b600f546301000000900460ff1615612a5457612a4d848484613105565b9050610f2b565b612a5c6131eb565b15612a6957612a6961322b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260199091529190912054612abb918490612962565b6001600160a01b038516600090815260196020526040812091909155612ae1858561351b565b612aeb5782612af6565b612af685848661357b565b6001600160a01b038516600090815260196020526040902054909150612b1c9082612f0e565b6001600160a01b03808616600081815260196020526040902092909255600d54161480612b705750600d546001600160a01b03868116911614801590612b705750600d546001600160a01b03858116911614155b15612b7e57612b7e85613ae8565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bc391815260200190565b60405180910390a3506001949350505050565b6000610f2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612962565b600f805463ff000000191663010000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612c6057612c606140c5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd91906140db565b81600181518110612cf057612cf06140c5565b6001600160a01b039092166020928302919091018201526000838152601b90915260409020600101548015801590612d2f5750600f54610100900460ff165b15612efc57306000818152601d602081815260408084203385528252808420869055918152818320600c80546001600160a01b039081168652919092528284208690559054915163791ac94760e01b81524794929091169263791ac94792612da092879291899142906004016140f8565b600060405180830381600087803b158015612dba57600080fd5b505af1158015612dce573d6000803e3d6000fd5b5050506000858152601b6020526040902060010154612def9150839061417f565b6000858152601b6020526040812060019081019290925590612e12908690614192565b90506000612e204784612bd6565b90506000612e3b606461157b601f546064611574919061417f565b90506000612e59606461157b6020548561222590919063ffffffff16565b6000898152601b60205260409020549091508190612e78908490614192565b612e82919061417f565b6000898152601b6020526040808220929092558581522054612ea5908290614192565b6000858152601b6020526040902055601e546001600160a01b03166108fc612ecd848661417f565b6040518115909202916000818181858888f19350505050158015612ef5573d6000803e3d6000fd5b5050505050505b5050600f805463ff0000001916905550565b600080612f1b8385614192565b905083811015610f2b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d12565b60008183612f8e5760405162461bcd60e51b8152600401610d129190613de1565b5060006129938486614224565b6011805460128190556000908152601b60205260408082206003908101805461ff0019166101001790558354835290822001805462ff00001916620100001790556013805460ff1916600190811790915591549091612ffa9190614192565b60118190556000818152601b60205260409020600301805460ff1916600117905560255490915061302b9042614192565b6011546000908152601b60205260409081902060020191909155426026556004805460065460075493516305d3b1d360e41b815292830152600160a01b810467ffffffffffffffff166024830152640100000000830461ffff16604483015263ffffffff8084166064840152600160301b90930490921660848201526001600160a01b0390911690635d3b1d309060a4016020604051808303816000875af11580156130db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ff91906140ac565b60095550565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601990915291822054613156918490612962565b6001600160a01b0380861660009081526019602052604080822093909355908516815220546131859083612f0e565b6001600160a01b0380851660008181526019602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131d99086815260200190565b60405180910390a35060019392505050565b600d546000906001600160a01b031633148015906132135750600f546301000000900460ff16155b80156132265750600f54610100900460ff165b905090565b600f805463ff000000191663010000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110613273576132736140c5565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f091906140db565b81600181518110613303576133036140c5565b6001600160a01b039092166020928302919091018201526011546000908152601b9091526040902060010154602454811161333f576000613345565b50602454805b5060008111801561335d5750600f54610100900460ff165b1561350a57600c5460405163791ac94760e01b815247916001600160a01b03169063791ac9479061339b9085906000908890309042906004016140f8565b600060405180830381600087803b1580156133b557600080fd5b505af11580156133c9573d6000803e3d6000fd5b50506011546000908152601b60205260409020600101546133ed925084915061417f565b601b60006011548152602001908152602001600020600101819055506000601154600161341a9190614192565b905060006134284784612bd6565b90506000613443606461157b601f546064611574919061417f565b90506000613461606461157b6020548561222590919063ffffffff16565b6011546000908152601b60205260409020549091508190613483908490614192565b61348d919061417f565b6011546000908152601b60205260408082209290925585815220546134b3908290614192565b6000858152601b6020526040902055601e546001600160a01b03166108fc6134db848661417f565b6040518115909202916000818181858888f19350505050158015613503573d6000803e3d6000fd5b5050505050505b5050600f805463ff00000019169055565b600d546000906001600160a01b03848116911614801561354957506000546001600160a01b03838116911614155b801561355d57506001600160a01b03821615155b8015610f2b57506001600160a01b03821661dead1415905092915050565b600080613598606461157b600e548761222590919063ffffffff16565b306000908152601960205260409020549091506135b59082612f0e565b306000908152601960205260409020558015613a9e576023546001600160a01b03841660009081526018602090815260408083206011548452909152902054106136415760405162461bcd60e51b815260206004820152601f60248201527f5469636b6574204c696d69742070657220526f756e64206578636565646564006044820152606401610d12565b6022548411156136935760405162461bcd60e51b815260206004820152601f60248201527f45786365656473204d6178696d756d205469636b6574205175616e74697479006044820152606401610d12565b60008052601b6020527f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ed5460ff166137375760008052601b6020527f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ed805460ff191660011790556025546137079042614192565b60008052601b6020527f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ec55426026555b6001600160a01b038316600090815260186020908152604080832060115484529091528120549003613790576001600160a01b038316600090815260176020526040902060608051909161378d91608090613c7d565b50505b6011546000908152601b60205260409020600101546137b0908290614192565b601180546000908152601b60205260408082206001908101949094559154815220600401546137de91614192565b601180546000908152601b60209081526040808320600401949094556001600160a01b0387168083526017808352858420945484526016835294832054845460018101865585855283852001559091529190915280546138419082908190613cc8565b506001600160a01b03841660009081526018602090815260408083206011548452909152902054613873906001614192565b6001600160a01b038516600090815260186020908152604080832060115484529091528120919091556014546138aa906001614192565b90506138f76040518060e001604052806000815260200160006001600160a01b03168152602001600081526020016000815260200160001515815260200160008152602001600081525090565b81816000018181525050601154816040018181525050428160600181815250508581602001906001600160a01b031690816001600160a01b031681525050868160a00181815250506016600060115481526020019081526020016000208190806001815401808255809150506001900390600052602060002090600702016000909190919091506000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060155505043601c6000886001600160a01b03166001600160a01b0316815260200190815260200160002081905550816014819055507f033deaddb740d99e6df3991e2b22d265e54cc91f51d3309df54dbc54d943933186836011548a42604051613a929594939291906001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b60405180910390a15050505b60405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36129938482612bd6565b6001600160a01b03811660009081526018602090815260408083206011548452909152812054905b81811015613c335760115460009081526016602090815260408083206001600160a01b038716845260179092528220805484908110613b5157613b516140c5565b906000526020600020015481548110613b6c57613b6c6140c5565b600091825260208083206005600790930201919091019290925560115481526016825260408082206001600160a01b03871683526017909352902080547fddc51198ffe6c76261358b3d94ff5e96792c79e0f5761b840b814d95f5d14e8692919084908110613bdd57613bdd6140c5565b906000526020600020015481548110613bf857613bf86140c5565b906000526020600020906007020160000154604051613c1991815260200190565b60405180910390a180613c2b81614238565b915050613b10565b50506001600160a01b031660009081526018602090815260408083206011548452909152812055565b5080546000825560070290600052602060002090810190611f689190613d08565b828054828255906000526020600020908101928215613cb8579160200282015b82811115613cb8578251825591602001919060010190613c9d565b50613cc4929150613d56565b5090565b828054828255906000526020600020908101928215613cb85760005260206000209182015b82811115613cb8578254825591600101919060010190613ced565b5b80821115613cc45760008082556001820180546001600160a01b0319169055600282018190556003820181905560048201805460ff19169055600582018190556006820155600701613d09565b5b80821115613cc45760008155600101613d57565b6001600160a01b0381168114611f6857600080fd5b600060208284031215613d9257600080fd5b8135610f2b81613d6b565b6020808252825182820181905260009190848201906040850190845b81811015613dd557835183529284019291840191600101613db9565b50909695505050505050565b600060208083528351808285015260005b81811015613e0e57858101830151858201604001528201613df2565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613e4257600080fd5b8235613e4d81613d6b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215613e8457600080fd5b8235915060208084013567ffffffffffffffff80821115613ea457600080fd5b818601915086601f830112613eb857600080fd5b813581811115613eca57613eca613e5b565b8060051b604051601f19603f83011681018181108582111715613eef57613eef613e5b565b604052918252848201925083810185019189831115613f0d57600080fd5b938501935b82851015613f2b57843584529385019392850192613f12565b8096505050505050509250929050565b600080600060608486031215613f5057600080fd5b8335613f5b81613d6b565b92506020840135613f6b81613d6b565b929592945050506040919091013590565b8015158114611f6857600080fd5b60008060408385031215613f9d57600080fd5b8235613fa881613d6b565b91506020830135613fb881613f7c565b809150509250929050565b600060208284031215613fd557600080fd5b813563ffffffff81168114610f2b57600080fd5b600060208284031215613ffb57600080fd5b5035919050565b6000806040838503121561401557600080fd5b823561402081613d6b565b91506020830135613fb881613d6b565b60006020828403121561404257600080fd5b813567ffffffffffffffff81168114610f2b57600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156140a157600080fd5b8151610f2b81613f7c565b6000602082840312156140be57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156140ed57600080fd5b8151610f2b81613d6b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156141485784516001600160a01b031683529383019391830191600101614123565b50506001600160a01b03969096166060850152505050608001529392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610de257610de2614169565b80820180821115610de257610de2614169565b634e487b7160e01b600052601260045260246000fd5b6000826141ca576141ca6141a5565b500690565b6001600160a01b03979097168752602087019590955260408601939093526060850191909152608084015260ff1660a083015260c082015260e00190565b8082028115828204841417610de257610de2614169565b600082614233576142336141a5565b500490565b60006001820161424a5761424a614169565b506001019056fedad2a6255cb4ac6e5db11e33f30e2b29818f9fa716f743ad17675961e0b90e1c8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212204e1ea9341f08ce368db7ae7818b162afe157702317abdc716b26cfb895ca210164736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000194dfed7dc31a72556afed6db3ad739022cbcff000000000000000000000000000000000000000000000000000000000000001e

-----Decoded View---------------
Arg [0] : _chainlink (address): 0x0194dFed7dc31A72556Afed6dB3AD739022cbCFf
Arg [1] : _chainpercent (uint256): 30

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000194dfed7dc31a72556afed6db3ad739022cbcff
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001e


Deployed Bytecode Sourcemap

6914:24957:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17591:122;;;;;;;;;;-1:-1:-1;17591:122:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7757:21;;;;;;;;;;-1:-1:-1;7757:21:0;;;;-1:-1:-1;;;;;7757:21:0;;;;;;-1:-1:-1;;;;;1203:32:1;;;1185:51;;1173:2;1158:18;7757:21:0;1039:203:1;11512:80:0;;;;;;;;;;-1:-1:-1;11584:5:0;;;;;;;;;;;;-1:-1:-1;;;11584:5:0;;;;11512:80;;;;;;;:::i;14661:90::-;;;;;;;;;;-1:-1:-1;14661:90:0;;;;;:::i;:::-;;:::i;:::-;;24785:75;;;;;;;;;;;;;:::i;11850:224::-;;;;;;;;;;-1:-1:-1;11850:224:0;;;;;:::i;:::-;;:::i;:::-;;;2285:14:1;;2278:22;2260:41;;2248:2;2233:18;11850:224:0;2120:187:1;8150:26:0;;;;;;;;;;;;;;;;;;;2458:25:1;;;2446:2;2431:18;8150:26:0;2312:177:1;11242:88:0;;;;;;;;;;-1:-1:-1;11315:12:0;;11242:88;;6646:261;;;;;;;;;;-1:-1:-1;6646:261:0;;;;;:::i;:::-;;:::i;12378:368::-;;;;;;;;;;-1:-1:-1;12378:368:0;;;;;:::i;:::-;;:::i;7479:40::-;;;;;;;;;;-1:-1:-1;7479:40:0;;;;;;;;;;;4449:10:1;4437:23;;;4419:42;;4407:2;4392:18;7479:40:0;4275:192:1;25357:111:0;;;;;;;;;;-1:-1:-1;25357:111:0;;;;;:::i;:::-;;:::i;11336:80::-;;;;;;;;;;-1:-1:-1;11336:80:0;;9561:1;5124:36:1;;5112:2;5097:18;11336:80:0;4982:184:1;23909:84:0;;;;;;;;;;-1:-1:-1;23909:84:0;;;;;:::i;:::-;;:::i;25236:113::-;;;;;;;;;;-1:-1:-1;25322:11:0;;25283:7;25310:24;;;:11;:24;;;;;:31;25236:113;;25053:85;;;;;;;;;;-1:-1:-1;25116:14:0;;;;;;;25053:85;;9721:38;;;;;;;;;;;;;;;;8289:26;;;;;;;;;;;;;;;;12082:122;;;;;;;;;;-1:-1:-1;12082:122:0;;;;;:::i;:::-;;:::i;25602:147::-;;;;;;;;;;-1:-1:-1;25602:147:0;;;;;:::i;:::-;;:::i;23587:89::-;;;;;;;;;;-1:-1:-1;23587:89:0;;;;;:::i;:::-;;:::i;7379:91::-;;;;;;;;;;;;;;;;25146:82;;;;;;;;;;;;;:::i;23684:104::-;;;;;;;;;;-1:-1:-1;23684:104:0;;;;;:::i;:::-;;:::i;24868:78::-;;;;;;;;;;-1:-1:-1;24933:5:0;;;;24868:78;;11598:105;;;;;;;;;;-1:-1:-1;11598:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;11682:18:0;11664:7;11682:18;;;:9;:18;;;;;;;11598:105;2898:148;;;;;;;;;;;;;:::i;23004:464::-;;;;;;;;;;;;;:::i;9897:25::-;;;;;;;;;;;;;;;;7564:26;;;;;;;;;;-1:-1:-1;7564:26:0;;;;-1:-1:-1;;;7564:26:0;;;;;;9766:63;;;;;;;;;;;;;;;;24954:91;;;;;;;;;;;;;:::i;9184:40::-;;;;;;;;;;-1:-1:-1;9184:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6301:25:1;;;6357:2;6342:18;;6335:34;;;;6385:18;;;6378:34;;;;6455:14;;6448:22;6443:2;6428:18;;6421:50;6515:14;6508:22;6502:3;6487:19;;6480:51;6575:14;6568:22;6562:3;6547:19;;6540:51;6622:3;6607:19;;6600:35;6288:3;6273:19;9184:40:0;6004:637:1;2671:87:0;;;;;;;;;;-1:-1:-1;2717:7:0;2744:6;-1:-1:-1;;;;;2744:6:0;2671:87;;8953:70;;;;;;;;;;-1:-1:-1;8953:70:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19299:1326;;;;;;;;;;;;;:::i;11422:84::-;;;;;;;;;;-1:-1:-1;11496:7:0;;;;;;;;;;;;-1:-1:-1;;;11496:7:0;;;;11422:84;;7945:26;;;;;;;;;;-1:-1:-1;7945:26:0;;;;;;;;;;;23476:103;;;;;;;;;;-1:-1:-1;23476:103:0;;;;;:::i;:::-;;:::i;3516:294::-;;;;;;;;;;;;;:::i;12212:158::-;;;;;;;;;;-1:-1:-1;12212:158:0;;;;;:::i;:::-;;:::i;8221:27::-;;;;;;;;;;-1:-1:-1;8221:27:0;;;;;;;;25757:132;;;;;;:::i;:::-;;:::i;28906:2962::-;;;;;;;;;;-1:-1:-1;28906:2962:0;;;;;:::i;:::-;;:::i;24001:148::-;;;;;;;;;;-1:-1:-1;24001:148:0;;;;;:::i;:::-;;:::i;24157:106::-;;;;;;;;;;-1:-1:-1;24157:106:0;;;;;:::i;:::-;;:::i;24387:81::-;;;;;;;;;;-1:-1:-1;24457:3:0;;24387:81;;25476:118;;;:::i;14759:99::-;;;;;;;;;;;;;:::i;8255:27::-;;;;;;;;;;;;;;;;3302:208;;;;;;;;;;-1:-1:-1;3302:208:0;;;;;:::i;:::-;;:::i;11709:133::-;;;;;;;;;;-1:-1:-1;11709:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11811:19:0;;;11793:7;11811:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11709:133;7724:26;;;;;;;;;;-1:-1:-1;7724:26:0;;;;-1:-1:-1;;;;;7724:26:0;;;24675:102;;;;;;;;;;-1:-1:-1;24675:102:0;;;;;:::i;:::-;;:::i;9231:49::-;;;;;;;;;;-1:-1:-1;9231:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;8183:31;;;;;;;;;;;;;;;;7634:26;;;;;;;;;;;;;;;;23800:101;;;;;;;;;;-1:-1:-1;23800:101:0;;;;;:::i;:::-;;:::i;7689:28::-;;;;;;;;;;-1:-1:-1;7689:28:0;;;;-1:-1:-1;;;;;7689:28:0;;;3052:244;;;;;;;;;;-1:-1:-1;3052:244:0;;;;;:::i;:::-;;:::i;24476:91::-;;;;;;;;;;-1:-1:-1;24476:91:0;;;;;:::i;:::-;;:::i;7597:30::-;;;;;;;;;;-1:-1:-1;7597:30:0;;;;;:::i;:::-;;:::i;9851:39::-;;;;;;;;;;;;;;;;24575:92;;;;;;;;;;-1:-1:-1;24575:92:0;;;;;:::i;:::-;;:::i;24271:108::-;;;;;;;;;;-1:-1:-1;24271:108:0;;;;;:::i;:::-;;:::i;9622:63::-;;;;;;;;;;;;;;;;17591:122;-1:-1:-1;;;;;17687:18:0;;;;;;:11;:18;;;;;;;;;17680:25;;;;;;;;;;;;;;;;;17651:16;;17680:25;;;17687:18;17680:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17591:122;;;:::o;14661:90::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;;;;;;;;;14727:9:::1;:16:::0;;-1:-1:-1;;;;;;14727:16:0::1;-1:-1:-1::0;;;;;14727:16:0;;;::::1;::::0;;;::::1;::::0;;14661:90::o;24785:75::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;24847:5:::1;::::0;;-1:-1:-1;;24838:14:0;::::1;24847:5;::::0;;::::1;24846:6;24838:14;::::0;;24785:75::o;11850:224::-;11954:10;11925:4;11942:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11942:32:0;;;;;;;;;;:41;;;11999:37;11925:4;;11942:32;;11999:37;;;;11977:6;2458:25:1;;2446:2;2431:18;;2312:177;11999:37:0;;;;;;;;-1:-1:-1;12054:4:0;11850:224;;;;;:::o;6646:261::-;6746:10;-1:-1:-1;;;;;6760:14:0;6746:28;;6742:111;;6792:53;;-1:-1:-1;;;6792:53:0;;6818:10;6792:53;;;8127:34:1;-1:-1:-1;;;;;6830:14:0;8197:15:1;8177:18;;;8170:43;8062:18;;6792:53:0;7915:304:1;6742:111:0;6859:42;6878:9;6889:11;6859:18;:42::i;:::-;6646:261;;:::o;12378:368::-;-1:-1:-1;;;;;12498:19:0;;12478:4;12498:19;;;:11;:19;;;;;;;;12518:10;12498:31;;;;;;;;-1:-1:-1;;12498:52:0;12495:186;;12600:69;;;;;;;;;;;-1:-1:-1;;;12600:69:0;;;;;;;;-1:-1:-1;;;;;12600:19:0;;-1:-1:-1;12600:19:0;;;:11;:19;;;;;12620:10;12600:31;;;;;;;;;;:69;;12636:6;;12600:35;:69::i;:::-;-1:-1:-1;;;;;12566:19:0;;;;;;:11;:19;;;;;;;;12586:10;12566:31;;;;;;;:103;12495:186;12698:40;12712:6;12720:9;12731:6;12698:13;:40::i;:::-;12691:47;;12378:368;;;;;;:::o;25357:111::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25436:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:24;;-1:-1:-1;;25436:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25357:111::o;23909:84::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;23970:8:::1;:15:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;23970:15:0::1;-1:-1:-1::0;;23970:15:0;;::::1;::::0;;;::::1;::::0;;23909:84::o;12082:122::-;12137:4;12161:35;12169:7;-1:-1:-1;;12161:7:0;:35::i;25602:147::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;25692:49:::1;::::0;-1:-1:-1;;;25692:49:0;;25721:10:::1;25692:49;::::0;::::1;8398:51:1::0;8465:18;;;8458:34;;;-1:-1:-1;;;;;25692:28:0;::::1;::::0;::::1;::::0;8371:18:1;;25692:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25602:147:::0;;:::o;23587:89::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;23654:7:::1;:14:::0;23587:89::o;25146:82::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;25213:7:::1;::::0;;-1:-1:-1;;25202:18:0;::::1;25213:7:::0;;;;::::1;;;25212:8;25202:18:::0;;::::1;;::::0;;25146:82::o;23684:104::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;23757:16:::1;:23:::0;23684:104::o;2898:148::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;3005:1:::1;2989:6:::0;;2968:40:::1;::::0;-1:-1:-1;;;;;2989:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;2968:40:0;3005:1;;2968:40:::1;3036:1;3019:19:::0;;-1:-1:-1;;;;;;3019:19:0::1;::::0;;2898:148::o;23004:464::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;23276:11:::1;::::0;;23321:7:::1;::::0;23374:20:::1;::::0;23276:183:::1;::::0;-1:-1:-1;;;23276:183:0;;;;::::1;9004:25:1::0;;;;-1:-1:-1;;;23343:16:0;::::1;;;9045:18:1::0;;;9038:59;23374:20:0;;::::1;;;9113:18:1::0;;;9106:47;23409:16:0::1;::::0;;::::1;9198:18:1::0;;;9191:43;-1:-1:-1;;;23440:8:0;;::::1;;9250:19:1::0;;;9243:44;-1:-1:-1;;;;;23276:11:0::1;::::0;:30:::1;::::0;8976:19:1;;23276:183:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23262:11;:197:::0;23004:464::o;24954:91::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;25023:14:::1;::::0;;-1:-1:-1;;25005:32:0;::::1;25023:14;::::0;;;::::1;;;25022:15;25005:32:::0;;::::1;;::::0;;24954:91::o;19299:1326::-;9143:6;:13;;-1:-1:-1;;9143:13:0;;;;;5158:9:::1;5171:10;5158:23;5150:53;;;::::0;-1:-1:-1;;;5150:53:0;;9689:2:1;5150:53:0::1;::::0;::::1;9671:21:1::0;9728:2;9708:18;;;9701:30;-1:-1:-1;;;9747:18:1;;;9740:47;9804:18;;5150:53:0::1;9487:341:1::0;5150:53:0::1;4828:1:::2;4975:7;;:19:::0;4967:63:::2;;;::::0;-1:-1:-1;;;4967:63:0;;10035:2:1;4967:63:0::2;::::0;::::2;10017:21:1::0;10074:2;10054:18;;;10047:30;10113:33;10093:18;;;10086:61;10164:18;;4967:63:0::2;9833:355:1::0;4967:63:0::2;4828:1;5041:7;:18:::0;;;19396:16:::3;::::0;;;;;;;::::3;::::0;;19372:21:::3;::::0;19396:16;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;;::::0;-1:-1:-1;19396:16:0::3;19372:40;;19441:4;19423;19428:1;19423:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19423:23:0;;::::3;:7;::::0;;::::3;::::0;;;;;;:23;;;;19467:8:::3;::::0;:15:::3;::::0;;-1:-1:-1;;;19467:15:0;;;;:8;;;::::3;::::0;:13:::3;::::0;:15:::3;::::0;;::::3;::::0;19423:7;;19467:15;;;;;:8;:15:::3;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19457:4;19462:1;19457:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19457:25:0;;::::3;:7;::::0;;::::3;::::0;;;;;;:25;19524:11:::3;::::0;19495:19:::3;19517::::0;;;:6:::3;:19:::0;;;;;;:28:::3;;::::0;19568:15;;;;;:33:::3;;-1:-1:-1::0;19587:14:0::3;::::0;::::3;::::0;::::3;;;19568:33;19564:1046;;;19644:4;19624:26;::::0;;;:11:::3;:26;::::0;;;;;;;19659:10:::3;19624:47:::0;;;;;;;;:61;;;19762:8:::3;::::0;:213;;-1:-1:-1;;;19762:213:0;;19726:21:::3;::::0;-1:-1:-1;;;;;19762:8:0;;::::3;::::0;:59:::3;::::0;:213:::3;::::0;19624:61;;:26;19890:4;;19945:15:::3;::::0;19762:213:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;20033:11:0::3;::::0;20026:19:::3;::::0;;;:6:::3;:19;::::0;;;;:28:::3;;::::0;:42:::3;::::0;-1:-1:-1;20057:11:0;;-1:-1:-1;20026:42:0::3;:::i;:::-;19995:6;:19;20002:11;;19995:19;;;;;;;;;;;:28;;:73;;;;20085:17;20105:11;;20119:1;20105:15;;;;:::i;:::-;20085:35:::0;-1:-1:-1;20135:16:0::3;20154:36;:21;20180:9:::0;20154:25:::3;:36::i;:::-;20135:55;;20205:14;20222:43;20261:3;20222:34;20239:16;;20235:3;:20;;;;:::i;:::-;20222:8:::0;;:12:::3;:34::i;:::-;:38:::0;::::3;:43::i;:::-;20205:60;;20292:20;20315:37;20348:3;20315:28;20326:16;;20315:6;:10;;:28;;;;:::i;:37::-;20422:11;::::0;20415:19:::3;::::0;;;:6:::3;:19;::::0;;;;:23;20292:60;;-1:-1:-1;20292:60:0;;20415:32:::3;::::0;20441:6;;20415:32:::3;:::i;:::-;:47;;;;:::i;:::-;20396:11;::::0;20389:19:::3;::::0;;;:6:::3;:19;::::0;;;;;:73;;;;20501:17;;;;:21;:36:::3;::::0;20525:12;;20501:36:::3;:::i;:::-;20477:17;::::0;;;:6:::3;:17;::::0;;;;:60;20560:9:::3;::::0;-1:-1:-1;;;;;20560:9:0::3;20552:46;20580:17;20591:6:::0;20580:8;:17:::3;:::i;:::-;20552:46;::::0;;::::3;::::0;;::::3;::::0;::::3;::::0;;;;;;::::3;;;;;;;;;;;;;::::0;::::3;;;;;;19603:1007;;;;;19564:1046;-1:-1:-1::0;;4784:1:0::2;5082:7;:22:::0;9161:6;:14;;-1:-1:-1;;9161:14:0;;;19299:1326::o;23476:103::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;23548:16:::1;:23:::0;;-1:-1:-1;;23548:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;23476:103::o;3516:294::-;3568:14;;-1:-1:-1;;;;;3568:14:0;3586:10;3568:28;3560:77;;;;-1:-1:-1;;;3560:77:0;;12163:2:1;3560:77:0;;;12145:21:1;12202:2;12182:18;;;12175:30;12241:34;12221:18;;;12214:62;-1:-1:-1;;;12292:18:1;;;12285:34;12336:19;;3560:77:0;11961:400:1;3560:77:0;3674:9;;3656:15;:27;3648:60;;;;-1:-1:-1;;;3648:60:0;;12568:2:1;3648:60:0;;;12550:21:1;12607:2;12587:18;;;12580:30;-1:-1:-1;;;12626:18:1;;;12619:49;12685:18;;3648:60:0;12366:343:1;3648:60:0;3753:14;;;3745:6;;3724:44;;-1:-1:-1;;;;;3753:14:0;;;;3745:6;;;;-1:-1:-1;;;;;;;;;;;3724:44:0;;3788:14;;;3779:23;;-1:-1:-1;;;;;;3779:23:0;-1:-1:-1;;;;;3788:14:0;;;3779:23;;;;;;3516:294::o;12212:158::-;12292:4;12318:44;12332:10;12344:9;12355:6;12318:13;:44::i;25757:132::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;25851:14:::1;::::0;;;:6:::1;:14;::::0;;;;:18;:30:::1;::::0;25872:9:::1;::::0;25851:30:::1;:::i;:::-;25830:14;::::0;;;:6:::1;:14;::::0;;;;;:51;25757:132::o;28906:2962::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;28993:15:::1;:23:::0;;-1:-1:-1;;28993:23:0::1;::::0;;29045:16:::1;::::0;29027:35:::1;::::0;:17:::1;:35::i;:::-;29103:16;::::0;29077::::1;29096:24:::0;;;:6:::1;:24;::::0;;;;;;;:28;29139:11:::1;:29:::0;;;;;;:36;:40;;;;:56:::1;;;29194:1;29183:8;:12;29139:56;:94;;;;-1:-1:-1::0;29206:16:0::1;::::0;29199:24:::1;::::0;;;:6:::1;:24;::::0;;;;:34:::1;;::::0;::::1;::::0;::::1;;;29139:94;:141;;;;-1:-1:-1::0;29244:16:0::1;::::0;29237:24:::1;::::0;;;:6:::1;:24;::::0;;;;:43:::1;;::::0;;;::::1;;;29139:141;29135:2677;;;29306:16;::::0;29345:5:::1;29299:24:::0;;;:6:::1;:24;::::0;;;;:43:::1;;:51:::0;;-1:-1:-1;;29299:51:0::1;::::0;;29379:11:::1;::::0;:22:::1;::::0;29393:8;;29379:22:::1;:::i;:::-;29365:11;:36:::0;29467:16:::1;::::0;29418:20:::1;29455:29:::0;;;:11:::1;:29;::::0;;;;:36;29441:50:::1;::::0;:11;:50:::1;:::i;:::-;29576:16;::::0;29506:20:::1;29564:29:::0;;;:11:::1;:29;::::0;;;;:36;29418:73;;-1:-1:-1;29506:20:0;29529:32:::1;:11:::0;29545:15:::1;29529;:32::i;:::-;:71;;;;:::i;:::-;29706:16;::::0;29615:20:::1;29694:29:::0;;;:11:::1;:29;::::0;;;;:36;29506:94;;-1:-1:-1;29615:20:0;29638:53:::1;29675:15;29638:32;:11:::0;29675:15;29638::::1;:32::i;:::-;:36:::0;::::1;:53::i;:::-;:92;;;;:::i;:::-;29615:115;;29747:31;29781:11;:29;29793:16;;29781:29;;;;;;;;;;;29811:12;29781:43;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;29747:77:::1;::::0;;::::1;::::0;::::1;::::0;;29781:43:::1;::::0;;::::1;::::0;;::::1;29747:77:::0;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;29747:77:0::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;29885:16:::1;::::0;29873:29;;:11:::1;:29:::0;;;;;:43;;29747:77;;-1:-1:-1;29873:29:0;29903:12;;29873:43;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;29839:77:::1;::::0;;::::1;::::0;::::1;::::0;;29873:43:::1;::::0;;::::1;::::0;;::::1;29839:77:::0;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;29839:77:0::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;29977:16:::1;::::0;29965:29;;:11:::1;:29:::0;;;;;:43;;29839:77;;-1:-1:-1;29965:29:0;29995:12;;29965:43;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;29931:77:::1;::::0;;::::1;::::0;::::1;::::0;;29965:43:::1;::::0;;::::1;::::0;;::::1;29931:77:::0;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;29931:77:0::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;;;30076:20;;::::1;::::0;30053;;::::1;::::0;29931:77;;-1:-1:-1;29931:77:0;30053:43:::1;::::0;30076:20;30053:43:::1;:::i;:::-;:66;;;;:::i;:::-;30025:94:::0;-1:-1:-1;30140:21:0;;30136:1564:::1;;30182:18;30203:57;30242:17;30203:34;30216:13;:20;;;30203:8;:12;;:34;;;;:::i;:57::-;30182:78;;30279:18;30300:57;30339:17;30300:34;30313:13;:20;;;30300:8;:12;;:34;;;;:::i;:57::-;30279:78;;30376:18;30397:57;30436:17;30397:34;30410:13;:20;;;30397:8;:12;;:34;;;;:::i;:57::-;30519:18;::::0;::::1;::::0;30511:48:::1;::::0;30376:78;;-1:-1:-1;;;;;;30511:36:0::1;::::0;:48;::::1;;;::::0;30548:10;;30511:48:::1;::::0;;;30548:10;30511:36;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30586:13;:18;;;-1:-1:-1::0;;;;;30578:36:0::1;:48;30615:10;30578:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30653:13;:18;;;-1:-1:-1::0;;;;;30645:36:0::1;:48;30682:10;30645:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30736:18:0::1;::::0;;::::1;::::0;30756:24;;30794:16:::1;::::0;30756:24:::1;30832::::0;;;:6:::1;:24:::0;;;;;;;;:28;30722:139;;-1:-1:-1;;;;;;;;;;;30722:139:0;::::1;::::0;30736:18;30756:24;30782:10;;30794:16;;30812:15:::1;::::0;30829:1:::1;::::0;30832:28;30722:139:::1;:::i;:::-;;;;;;;;30899:18;::::0;;::::1;::::0;30919:24;;30957:16:::1;::::0;30919:24:::1;30995::::0;;;:6:::1;:24:::0;;;;;;;;:28;30885:139;;-1:-1:-1;;;;;;;;;;;30885:139:0;::::1;::::0;30899:18;30919:24;30945:10;;30957:16;;30975:15:::1;::::0;30992:1:::1;::::0;30995:28;30885:139:::1;:::i;:::-;;;;;;;;31062:18;::::0;;::::1;::::0;31082:24;;31120:16:::1;::::0;31082:24:::1;31158::::0;;;:6:::1;:24:::0;;;;;;;;:28;31048:139;;-1:-1:-1;;;;;;;;;;;31048:139:0;::::1;::::0;31062:18;31082:24;31108:10;;31120:16;;31138:15:::1;::::0;31155:1:::1;::::0;31158:28;31048:139:::1;:::i;:::-;;;;;;;;30163:1040;;;30136:1564;;;31260:18;::::0;;::::1;::::0;31280:24;;31309:16:::1;::::0;31280:24:::1;31347::::0;;;:6:::1;:24:::0;;;;;;;:28;31246:130;;-1:-1:-1;;;;;;;;;;;31246:130:0;::::1;::::0;31260:18;31280:24;;;31309:16;;31327:15:::1;::::0;31344:1:::1;::::0;31246:130:::1;:::i;:::-;;;;;;;;31414:18;::::0;;::::1;::::0;31434:24;;31463:16:::1;::::0;31434:24:::1;31501::::0;;;:6:::1;:24:::0;;;;;;;:28;31400:130;;-1:-1:-1;;;;;;;;;;;31400:130:0;::::1;::::0;31414:18;31434:24;;;31463:16;;31481:15:::1;::::0;31498:1:::1;::::0;31400:130:::1;:::i;:::-;;;;;;;;31568:18;::::0;;::::1;::::0;31588:24;;31617:16:::1;::::0;31588:24:::1;31655::::0;;;:6:::1;:24:::0;;;;;;;:28;31554:130;;-1:-1:-1;;;;;;;;;;;31554:130:0;::::1;::::0;31568:18;31588:24;;;31617:16;;31635:15:::1;::::0;31652:1:::1;::::0;31554:130:::1;:::i;:::-;;;;;;;;30136:1564;29282:2437;;;;;;;29135:2677;;;31756:16;::::0;31795:5:::1;31749:24:::0;;;:6:::1;:24;::::0;;;;:43:::1;;:51:::0;;-1:-1:-1;;31749:51:0::1;::::0;;29135:2677:::1;31843:16;::::0;31831:29:::1;::::0;;;:11:::1;:29;::::0;;;;31824:36:::1;::::0;::::1;:::i;24001:148::-:0;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;24080:2:::1;24073:3;;:9;;:20;;;;;24092:1;24086:3;;:7;24073:20;24065:55;;;::::0;-1:-1:-1;;;24065:55:0;;17119:2:1;24065:55:0::1;::::0;::::1;17101:21:1::0;17158:2;17138:18;;;17131:30;-1:-1:-1;;;17177:18:1;;;17170:52;17239:18;;24065:55:0::1;16917:346:1::0;24065:55:0::1;24131:3;:10:::0;24001:148::o;24157:106::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;24231:17:::1;:24:::0;24157:106::o;25476:118::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;25535:51:::1;::::0;25543:10:::1;::::0;25564:21:::1;25535:51:::0;::::1;;;::::0;::::1;::::0;;;25564:21;25543:10;25535:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25476:118::o:0;14759:99::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;14835:15:::1;::::0;;-1:-1:-1;;14816:34:0;::::1;14835:15;::::0;;::::1;14834:16;14816:34;::::0;;14759:99::o;3302:208::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;3383:6:::1;::::0;;;3366:23;;-1:-1:-1;;;;;;3366:23:0;;::::1;-1:-1:-1::0;;;;;3383:6:0;::::1;3366:23;::::0;;;3400:19:::1;::::0;;3430:9:::1;:16:::0;;;3462:40:::1;::::0;3383:6;;-1:-1:-1;;;;;;;;;;;3462:40:0;3383:6;;3462:40:::1;3302:208:::0;:::o;24675:102::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;24747:16:::1;:22:::0;24675:102::o;23800:101::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;23870:16:::1;:23:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;23870:23:0::1;-1:-1:-1::0;;;;23870:23:0;;::::1;::::0;;;::::1;::::0;;23800:101::o;3052:244::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3141:22:0;::::1;3133:73;;;::::0;-1:-1:-1;;;3133:73:0;;17470:2:1;3133:73:0::1;::::0;::::1;17452:21:1::0;17509:2;17489:18;;;17482:30;17548:34;17528:18;;;17521:62;-1:-1:-1;;;17599:18:1;;;17592:36;17645:19;;3133:73:0::1;17268:402:1::0;3133:73:0::1;3243:6;::::0;;3222:38:::1;::::0;-1:-1:-1;;;;;3222:38:0;;::::1;::::0;3243:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;3222:38:0;::::1;3271:6;:17:::0;;-1:-1:-1;;;;;;3271:17:0::1;-1:-1:-1::0;;;;;3271:17:0;;;::::1;::::0;;;::::1;::::0;;3052:244::o;24476:91::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;24540:13:::1;:19:::0;24476:91::o;7597:30::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7597:30:0;:::o;24575:92::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;24642:11:::1;:17:::0;24575:92::o;24271:108::-;2717:7;2744:6;-1:-1:-1;;;;;2744:6:0;2169:10;2808:23;2800:68;;;;-1:-1:-1;;;2800:68:0;;;;;;;:::i;:::-;24346:18:::1;:25:::0;24271:108::o;607:246::-;665:7;689:1;694;689:6;685:47;;-1:-1:-1;719:1:0;712:8;;685:47;742:9;754:5;758:1;754;:5;:::i;:::-;742:17;-1:-1:-1;787:1:0;778:5;782:1;742:17;778:5;:::i;:::-;:10;770:56;;;;-1:-1:-1;;;770:56:0;;18175:2:1;770:56:0;;;18157:21:1;18214:2;18194:18;;;18187:30;18253:34;18233:18;;;18226:62;-1:-1:-1;;;18304:18:1;;;18297:31;18345:19;;770:56:0;17973:397:1;859:132:0;917:7;944:39;948:1;951;944:39;;;;;;;;;;;;;;;;;:3;:39::i;25897:2954::-;26000:27;;;;:13;;:27;;;;;:::i;:::-;-1:-1:-1;26038:15:0;:23;;-1:-1:-1;;26038:23:0;;;26090:16;;26072:35;;:17;:35::i;:::-;26148:16;;26122;26141:24;;;:6;:24;;;;;;;;:28;26184:11;:29;;;;;;:36;:40;;;;:56;;;26239:1;26228:8;:12;26184:56;:94;;;;-1:-1:-1;26251:16:0;;26244:24;;;;:6;:24;;;;;:34;;;;;;;;26184:94;:141;;;;-1:-1:-1;26289:16:0;;26282:24;;;;:6;:24;;;;;:43;;;;;;;;26184:141;26180:2617;;;26351:16;;26390:5;26344:24;;;:6;:24;;;;;:43;;:51;;-1:-1:-1;;26344:51:0;;;26424:11;;:22;;26438:8;;26424:22;:::i;:::-;26410:11;:36;26515:16;;26463:20;26503:29;;;:11;:29;;;;;:36;26486:14;;:11;;26463:20;;26486:14;;;;:::i;:::-;;;;;;;:53;;;;:::i;:::-;26606:16;;26554:20;26594:29;;;:11;:29;;;;;:36;26577:14;;26463:76;;-1:-1:-1;26554:20:0;;26577:11;;26589:1;;26577:14;;;;;;:::i;:::-;;;;;;;:53;;;;:::i;:::-;26697:16;;26645:20;26685:29;;;:11;:29;;;;;:36;26668:14;;26554:76;;-1:-1:-1;26645:20:0;;26668:11;;26680:1;;26668:14;;;;;;:::i;:::-;;;;;;;:53;;;;:::i;:::-;26645:76;;26738:31;26772:11;:29;26784:16;;26772:29;;;;;;;;;;;26802:12;26772:43;;;;;;;;:::i;:::-;;;;;;;;;26738:77;;;;;;;;26772:43;;;;;;;26738:77;;;;;;;;-1:-1:-1;;;;;26738:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26876:16;;26864:29;;:11;:29;;;;;:43;;26738:77;;-1:-1:-1;26864:29:0;26894:12;;26864:43;;;;;;:::i;:::-;;;;;;;;;26830:77;;;;;;;;26864:43;;;;;;;26830:77;;;;;;;;-1:-1:-1;;;;;26830:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26968:16;;26956:29;;:11;:29;;;;;:43;;26830:77;;-1:-1:-1;26956:29:0;26986:12;;26956:43;;;;;;:::i;:::-;;;;;;;;;26922:77;;;;;;;;26956:43;;;;;;;26922:77;;;;;;;;-1:-1:-1;;;;;26922:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27067:20;;;;27044;;;;26922:77;;-1:-1:-1;26922:77:0;27044:43;;27067:20;27044:43;:::i;:::-;:66;;;;:::i;:::-;27016:94;-1:-1:-1;27131:21:0;;27127:1564;;27173:18;27194:57;27233:17;27194:34;27207:13;:20;;;27194:8;:12;;:34;;;;:::i;:57::-;27173:78;;27270:18;27291:57;27330:17;27291:34;27304:13;:20;;;27291:8;:12;;:34;;;;:::i;:57::-;27270:78;;27367:18;27388:57;27427:17;27388:34;27401:13;:20;;;27388:8;:12;;:34;;;;:::i;:57::-;27510:18;;;;27502:48;;27367:78;;-1:-1:-1;;;;;;27502:36:0;;:48;;;;;27539:10;;27502:48;;;;27539:10;27502:36;:48;;;;;;;;;;;;;;;;;;;;;27577:13;:18;;;-1:-1:-1;;;;;27569:36:0;:48;27606:10;27569:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27644:13;:18;;;-1:-1:-1;;;;;27636:36:0;:48;27673:10;27636:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27727:18:0;;;;;27747:24;;27785:16;;27747:24;27823;;;:6;:24;;;;;;;;:28;27713:139;;-1:-1:-1;;;;;;;;;;;27713:139:0;;;27727:18;27747:24;27773:10;;27785:16;;27803:15;;27820:1;;27823:28;27713:139;:::i;:::-;;;;;;;;27890:18;;;;;27910:24;;27948:16;;27910:24;27986;;;:6;:24;;;;;;;;:28;27876:139;;-1:-1:-1;;;;;;;;;;;27876:139:0;;;27890:18;27910:24;27936:10;;27948:16;;27966:15;;27983:1;;27986:28;27876:139;:::i;:::-;;;;;;;;28053:18;;;;;28073:24;;28111:16;;28073:24;28149;;;:6;:24;;;;;;;;:28;28039:139;;-1:-1:-1;;;;;;;;;;;28039:139:0;;;28053:18;28073:24;28099:10;;28111:16;;28129:15;;28146:1;;28149:28;28039:139;:::i;:::-;;;;;;;;27154:1040;;;27127:1564;;;28251:18;;;;;28271:24;;28300:16;;28271:24;28338;;;:6;:24;;;;;;;:28;28237:130;;-1:-1:-1;;;;;;;;;;;28237:130:0;;;28251:18;28271:24;;;28300:16;;28318:15;;28335:1;;28237:130;:::i;:::-;;;;;;;;28405:18;;;;;28425:24;;28454:16;;28425:24;28492;;;:6;:24;;;;;;;:28;28391:130;;-1:-1:-1;;;;;;;;;;;28391:130:0;;;28405:18;28425:24;;;28454:16;;28472:15;;28489:1;;28391:130;:::i;:::-;;;;;;;;28559:18;;;;;28579:24;;28608:16;;28579:24;28646;;;:6;:24;;;;;;;:28;28545:130;;-1:-1:-1;;;;;;;;;;;28545:130:0;;;28559:18;28579:24;;;28608:16;;28626:15;;28643:1;;28545:130;:::i;:::-;;;;;;;;27127:1564;26327:2375;;;;;;;26180:2617;;;28741:16;;28780:5;28734:24;;;:6;:24;;;;;:43;;:51;;-1:-1:-1;;28734:51:0;;;26180:2617;28826:16;;28814:29;;;;:11;:29;;;;;28807:36;;;:::i;411:190::-;497:7;533:12;525:6;;;;517:29;;;;-1:-1:-1;;;517:29:0;;;;;;;;:::i;:::-;-1:-1:-1;557:9:0;569:5;573:1;569;:5;:::i;:::-;557:17;411:190;-1:-1:-1;;;;;411:190:0:o;12754:1111::-;12922:11;;12846:4;12915:19;;;:6;:19;;;;;:26;;;12944:15;-1:-1:-1;12915:76:0;;;;-1:-1:-1;12970:11:0;;12963:19;;;;:6;:19;;;;;:28;;;;;12915:76;:110;;;;-1:-1:-1;13003:11:0;;12996:19;;;;:6;:19;;;;;:29;;;;;;;;12995:30;12915:110;:121;;;;-1:-1:-1;13029:7:0;;;;;;;12915:121;:132;;;;-1:-1:-1;13041:6:0;;;;;;;13040:7;12915:132;12911:189;;;13073:15;:13;:15::i;:::-;13117:6;;;;;;;13114:62;;;13133:41;13148:6;13156:9;13167:6;13133:14;:41::i;:::-;13126:48;;;;13114:62;13189:15;:13;:15::i;:::-;13186:31;;;13206:9;:7;:9::i;:::-;13248:53;;;;;;;;;;;-1:-1:-1;;;13248:53:0;;;;;;;;-1:-1:-1;;;;;13248:17:0;;-1:-1:-1;13248:17:0;;;:9;:17;;;;;;;;:53;;13270:6;;13248:21;:53::i;:::-;-1:-1:-1;;;;;13228:17:0;;;;;;:9;:17;;;;;:73;;;;13337:31;13238:6;13358:9;13337:12;:31::i;:::-;:77;;13408:6;13337:77;;;13371:34;13379:6;13387;13395:9;13371:7;:34::i;:::-;-1:-1:-1;;;;;13448:20:0;;;;;;:9;:20;;;;;;13312:102;;-1:-1:-1;13448:40:0;;13312:102;13448:24;:40::i;:::-;-1:-1:-1;;;;;13425:20:0;;;;;;;:9;:20;;;;;:63;;;;13648:6;;;13635:19;;:64;;-1:-1:-1;13669:6:0;;-1:-1:-1;;;;;13659:16:0;;;13669:6;;13659:16;;;;:39;;-1:-1:-1;13692:6:0;;-1:-1:-1;;;;;13679:19:0;;;13692:6;;13679:19;;13659:39;13631:139;;;13716:42;13751:6;13716:34;:42::i;:::-;13809:9;-1:-1:-1;;;;;13792:43:0;13801:6;-1:-1:-1;;;;;13792:43:0;;13820:14;13792:43;;;;2458:25:1;;2446:2;2431:18;;2312:177;13792:43:0;;;;;;;;-1:-1:-1;13853:4:0;;12754:1111;-1:-1:-1;;;;12754:1111:0:o;269:136::-;327:7;354:43;358:1;361;354:43;;;;;;;;;;;;;;;;;:3;:43::i;20713:1379::-;9143:6;:13;;-1:-1:-1;;9143:13:0;;;;;20810:16:::1;::::0;;20824:1:::1;20810:16:::0;;;;;::::1;::::0;;-1:-1:-1;;20810:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20810:16:0::1;20786:40;;20855:4;20837;20842:1;20837:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20837:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;20881:8:::1;::::0;:15:::1;::::0;;-1:-1:-1;;;20881:15:0;;;;:8;;;::::1;::::0;:13:::1;::::0;:15:::1;::::0;;::::1;::::0;20837:7;;20881:15;;;;;:8;:15:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20871:4;20876:1;20871:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20871:25:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:25;20909:19:::1;20931:14:::0;;;:6:::1;:14:::0;;;;;;:23:::1;;::::0;20977:15;;;;;:33:::1;;-1:-1:-1::0;20996:14:0::1;::::0;::::1;::::0;::::1;;;20977:33;20973:1112;;;21052:4;21032:26;::::0;;;:11:::1;:26;::::0;;;;;;;21067:10:::1;21032:47:::0;;;;;;;:61;;;21109:32;;;;;;21150:8:::1;::::0;;-1:-1:-1;;;;;21150:8:0;;::::1;21109:51:::0;;;;;;;;;:65;;;21256:8;;:213;;-1:-1:-1;;;21256:213:0;;21220:21:::1;::::0;21256:8;;;::::1;::::0;:59:::1;::::0;:213:::1;::::0;21082:11;;21032:26;21384:4;;21439:15:::1;::::0;21256:213:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;21515:14:0::1;::::0;;;:6:::1;:14;::::0;;;;:23:::1;;::::0;:37:::1;::::0;-1:-1:-1;21541:11:0;;21515:37:::1;:::i;:::-;21489:14;::::0;;;:6:::1;:14;::::0;;;;:23:::1;::::0;;::::1;:63:::0;;;;:14;21591:10:::1;::::0;21496:6;;21591:10:::1;:::i;:::-;21571:30:::0;-1:-1:-1;21618:16:0::1;21637:36;:21;21663:9:::0;21637:25:::1;:36::i;:::-;21618:55;;21688:14;21705:43;21744:3;21705:34;21722:16;;21718:3;:20;;;;:::i;21705:43::-;21688:60;;21775:20;21798:37;21831:3;21798:28;21809:16;;21798:6;:10;;:28;;;;:::i;:37::-;21895:14;::::0;;;:6:::1;:14;::::0;;;;:18;21775:60;;-1:-1:-1;21775:60:0;;21895:27:::1;::::0;21916:6;;21895:27:::1;:::i;:::-;:42;;;;:::i;:::-;21874:14;::::0;;;:6:::1;:14;::::0;;;;;:63;;;;21976:17;;;;:21;:36:::1;::::0;22000:12;;21976:36:::1;:::i;:::-;21952:17;::::0;;;:6:::1;:17;::::0;;;;:60;22035:9:::1;::::0;-1:-1:-1;;;;;22035:9:0::1;22027:46;22055:17;22066:6:::0;22055:8;:17:::1;:::i;:::-;22027:46;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21012:1073;;;;;20973:1112;-1:-1:-1::0;;9161:6:0;:14;;-1:-1:-1;;9161:14:0;;;-1:-1:-1;20713:1379:0:o;84:179::-;142:7;;174:5;178:1;174;:5;:::i;:::-;162:17;;203:1;198;:6;;190:46;;;;-1:-1:-1;;;190:46:0;;18577:2:1;190:46:0;;;18559:21:1;18616:2;18596:18;;;18589:30;18655:29;18635:18;;;18628:57;18702:18;;190:46:0;18375:351:1;997:189:0;1083:7;1118:12;1111:5;1103:28;;;;-1:-1:-1;;;1103:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1142:9:0;1154:5;1158:1;1154;:5;:::i;22104:892::-;22352:11;;;22333:16;:30;;;-1:-1:-1;22374:19:0;;;:6;:19;;;;;;:29;;;;:36;;-1:-1:-1;;22374:36:0;;;;;22428:11;;22421:19;;;;;:38;:45;;-1:-1:-1;;22421:45:0;;;;;22477:15;:22;;-1:-1:-1;;22477:22:0;22406:4;22477:22;;;;;;22570:11;;-1:-1:-1;;22570:15:0;;:11;:15;:::i;:::-;22600:11;:22;;;22633:19;;;;:6;:19;;;;;:28;;:35;;-1:-1:-1;;22633:35:0;22664:4;22633:35;;;22726:13;;22551:34;;-1:-1:-1;22708:31:0;;:15;:31;:::i;:::-;22686:11;;22679:19;;;;:6;:19;;;;;;;:26;;:60;;;;22763:15;22750:10;:28;22805:11;;;22850:7;;22903:20;;22805:183;;-1:-1:-1;;;22805:183:0;;;;;9004:25:1;-1:-1:-1;;;22872:16:0;;;;9045:18:1;;;9038:59;22903:20:0;;;;;9113:18:1;;;9106:47;22938:16:0;;;;9198:18:1;;;9191:43;-1:-1:-1;;;22969:8:0;;;;;;9250:19:1;;;9243:44;-1:-1:-1;;;;;22805:11:0;;;;:30;;8976:19:1;;22805:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22791:11;:197;-1:-1:-1;22104:892:0:o;13877:330::-;14007:53;;;;;;;;;;;-1:-1:-1;;;14007:53:0;;;;;;;;-1:-1:-1;;;;;14007:17:0;;13970:4;14007:17;;;:9;:17;;;;;;;:53;;14029:6;;14007:21;:53::i;:::-;-1:-1:-1;;;;;13987:17:0;;;;;;;:9;:17;;;;;;:73;;;;14094:20;;;;;;;:32;;14119:6;14094:24;:32::i;:::-;-1:-1:-1;;;;;14071:20:0;;;;;;;:9;:20;;;;;;;:55;;;;14142:35;;;;;;;;;;14170:6;2458:25:1;;2446:2;2431:18;;2312:177;14142:35:0;;;;;;;;-1:-1:-1;14195:4:0;13877:330;;;;;:::o;17721:167::-;17817:6;;17769:4;;-1:-1:-1;;;;;17817:6:0;17803:10;:20;;;;:40;;-1:-1:-1;17837:6:0;;;;;;;17836:7;17803:40;:67;;;;-1:-1:-1;17856:14:0;;;;;;;17803:67;17786:84;;17721:167;:::o;17896:1297::-;9143:6;:13;;-1:-1:-1;;9143:13:0;;;;;17968:16:::1;::::0;;17982:1:::1;17968:16:::0;;;;;::::1;::::0;;-1:-1:-1;;17968:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17968:16:0::1;17944:40;;18013:4;17995;18000:1;17995:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17995:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;18039:8:::1;::::0;:15:::1;::::0;;-1:-1:-1;;;18039:15:0;;;;:8;;;::::1;::::0;:13:::1;::::0;:15:::1;::::0;;::::1;::::0;17995:7;;18039:15;;;;;:8;:15:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18029:4;18034:1;18029:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18029:25:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:25;18096:11:::1;::::0;18067:19:::1;18089::::0;;;:6:::1;:19:::0;;;;;;:28:::1;;::::0;18142:16:::1;::::0;18128:30;::::1;:67;;18194:1;18128:67;;;-1:-1:-1::0;18175:16:0::1;::::0;;18128:67:::1;;18224:1;18210:11;:15;:33;;;;-1:-1:-1::0;18229:14:0::1;::::0;::::1;::::0;::::1;;;18210:33;18206:972;;;18328:8;::::0;:213:::1;::::0;-1:-1:-1;;;18328:213:0;;18292:21:::1;::::0;-1:-1:-1;;;;;18328:8:0::1;::::0;:59:::1;::::0;:213:::1;::::0;18406:11;;18272:17:::1;::::0;18456:4;;18487::::1;::::0;18511:15:::1;::::0;18328:213:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18601:11:0::1;::::0;18594:19:::1;::::0;;;:6:::1;:19;::::0;;;;:28:::1;;::::0;:42:::1;::::0;-1:-1:-1;18625:11:0;;-1:-1:-1;18594:42:0::1;:::i;:::-;18563:6;:19;18570:11;;18563:19;;;;;;;;;;;:28;;:73;;;;18653:17;18673:11;;18687:1;18673:15;;;;:::i;:::-;18653:35:::0;-1:-1:-1;18703:16:0::1;18722:36;:21;18748:9:::0;18722:25:::1;:36::i;:::-;18703:55;;18773:14;18790:43;18829:3;18790:34;18807:16;;18803:3;:20;;;;:::i;18790:43::-;18773:60;;18860:20;18883:37;18916:3;18883:28;18894:16;;18883:6;:10;;:28;;;;:::i;:37::-;18990:11;::::0;18983:19:::1;::::0;;;:6:::1;:19;::::0;;;;:23;18860:60;;-1:-1:-1;18860:60:0;;18983:32:::1;::::0;19009:6;;18983:32:::1;:::i;:::-;:47;;;;:::i;:::-;18964:11;::::0;18957:19:::1;::::0;;;:6:::1;:19;::::0;;;;;:73;;;;19069:17;;;;:21;:36:::1;::::0;19093:12;;19069:36:::1;:::i;:::-;19045:17;::::0;;;:6:::1;:17;::::0;;;;:60;19128:9:::1;::::0;-1:-1:-1;;;;;19128:9:0::1;19120:46;19148:17;19159:6:::0;19148:8;:17:::1;:::i;:::-;19120:46;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18245:933;;;;;18206:972;-1:-1:-1::0;;9161:6:0;:14;;-1:-1:-1;;9161:14:0;;;17896:1297::o;14866:259::-;14980:6;;14946:4;;-1:-1:-1;;;;;14970:16:0;;;14980:6;;14970:16;:56;;;;-1:-1:-1;2717:7:0;2744:6;-1:-1:-1;;;;;15006:20:0;;;2744:6;;15006:20;;14970:56;:99;;;;-1:-1:-1;;;;;;15046:23:0;;;;14970:99;:147;;;;-1:-1:-1;;;;;;15089:28:0;;15110:6;15089:28;;14963:154;;14866:259;;;;:::o;15133:2450::-;15219:7;15239:15;15257:24;15277:3;15257:15;15268:3;;15257:6;:10;;:15;;;;:::i;:24::-;15337:4;15319:24;;;;:9;:24;;;;;;15239:42;;-1:-1:-1;15319:37:0;;15239:42;15319:28;:37::i;:::-;15310:4;15292:24;;;;:9;:24;;;;;:64;15371:11;;15367:2112;;15566:18;;-1:-1:-1;;;;;15524:26:0;;;;;;:15;:26;;;;;;;;15551:11;;15524:39;;;;;;;;:60;15516:104;;;;-1:-1:-1;;;15516:104:0;;18933:2:1;15516:104:0;;;18915:21:1;18972:2;18952:18;;;18945:30;19011:33;18991:18;;;18984:61;19062:18;;15516:104:0;18731:355:1;15516:104:0;15657:17;;15647:6;:27;;15639:71;;;;-1:-1:-1;;;15639:71:0;;19293:2:1;15639:71:0;;;19275:21:1;19332:2;19312:18;;;19305:30;19371:33;19351:18;;;19344:61;19422:18;;15639:71:0;19091:355:1;15639:71:0;15805:9;;;:6;:9;;:18;;;;15800:217;;15848:9;;;:6;:9;;:18;:25;;-1:-1:-1;;15848:25:0;15869:4;15848:25;;;15933:13;;15915:31;;:15;:31;:::i;:::-;15896:9;;;:6;:9;;:16;:50;15982:15;15969:10;:28;15800:217;-1:-1:-1;;;;;16093:26:0;;;;;;:15;:26;;;;;;;;16120:11;;16093:39;;;;;;;;:44;;16089:192;;-1:-1:-1;;;;;16219:22:0;;;;;;:11;:22;;;;;16162:34;16219:42;;16162:34;;16219:42;;;;;:::i;:::-;;16139:142;16089:192;16339:11;;16332:19;;;;:6;:19;;;;;:28;;;:38;;16363:7;;16332:38;:::i;:::-;16308:11;;;16301:19;;;;:6;:19;;;;;;:28;;;;:69;;;;16430:11;;16423:19;;;:31;;;:35;;;:::i;:::-;16396:11;;;16389:19;;;;:6;:19;;;;;;;;:31;;:69;;;;-1:-1:-1;;;;;16551:22:0;;;;;:11;:22;;;;;;16622:11;;16610:24;;:11;:24;;;;;:31;16592:50;;;;;;;;;;;;;;;16661:22;;;;;;;:37;;;;16551:22;;;;16661:37;:::i;:::-;-1:-1:-1;;;;;;16761:26:0;;;;;;:15;:26;;;;;;;;16788:11;;16761:39;;;;;;;;:43;;16803:1;16761:43;:::i;:::-;-1:-1:-1;;;;;16719:26:0;;;;;;:15;:26;;;;;;;;16746:11;;16719:39;;;;;;;:85;;;;16845:12;;:16;;16860:1;16845:16;:::i;:::-;16823:38;;16882:29;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16882:29:0;16956:11;16930;:22;;:37;;;;;17006:11;;16986;:17;;:31;;;;;17058:15;17036:11;:19;;:37;;;;;17111:9;17092:11;:16;;:28;-1:-1:-1;;;;;17092:28:0;;;-1:-1:-1;;;;;17092:28:0;;;;;17160:6;17139:11;:18;;:27;;;;;17185:11;:24;17197:11;;17185:24;;;;;;;;;;;17215:11;17185:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17185:42:0;;;;;-1:-1:-1;;;;;17185:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17273:12;17246:13;:24;17260:9;-1:-1:-1;;;;;17246:24:0;-1:-1:-1;;;;;17246:24:0;;;;;;;;;;;;:39;;;;17324:11;17309:12;:26;;;;17379:72;17390:9;17401:11;17414;;17427:6;17435:15;17379:72;;;;;;;;;-1:-1:-1;;;;;19728:32:1;;;;19710:51;;19792:2;19777:18;;19770:34;;;;19835:2;19820:18;;19813:34;;;;19878:2;19863:18;;19856:34;19921:3;19906:19;;19899:35;19697:3;19682:19;;19451:489;17379:72:0;;;;;;;;15384:2095;;;15367:2112;17498:40;;2458:25:1;;;17523:4:0;;-1:-1:-1;;;;;17498:40:0;;;;;2446:2:1;2431:18;17498:40:0;;;;;;;17556:19;:6;17567:7;17556:10;:19::i;14244:409::-;-1:-1:-1;;;;;14339:23:0;;14324:12;14339:23;;;:15;:23;;;;;;;;14363:11;;14339:36;;;;;;;;;14386:209;14408:4;14404:1;:8;14386:209;;;14446:11;;14492:1;14434:24;;;:11;:24;;;;;;;;-1:-1:-1;;;;;14459:19:0;;;;:11;:19;;;;;:22;;14479:1;;14459:22;;;;;;:::i;:::-;;;;;;;;;14434:48;;;;;;;;:::i;:::-;;;;;;;;;:55;:48;;;;;:55;;;;:59;;;;14535:11;;14523:24;;:11;:24;;;;;;-1:-1:-1;;;;;14548:19:0;;;;:11;:19;;;;;:22;;14513:70;;14523:24;14548:19;14568:1;;14548:22;;;;;;:::i;:::-;;;;;;;;;14523:48;;;;;;;;:::i;:::-;;;;;;;;;;;:59;;;14513:70;;;;2458:25:1;;2446:2;2431:18;;2312:177;14513:70:0;;;;;;;;14414:3;;;;:::i;:::-;;;;14386:209;;;-1:-1:-1;;;;;;;14605:23:0;14644:1;14605:23;;;:15;:23;;;;;;;;14629:11;;14605:36;;;;;;;:40;14244:409::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:632::-;573:2;625:21;;;695:13;;598:18;;;717:22;;;544:4;;573:2;796:15;;;;770:2;755:18;;;544:4;839:169;853:6;850:1;847:13;839:169;;;914:13;;902:26;;983:15;;;;948:12;;;;875:1;868:9;839:169;;;-1:-1:-1;1025:3:1;;402:632;-1:-1:-1;;;;;;402:632:1:o;1247:548::-;1359:4;1388:2;1417;1406:9;1399:21;1449:6;1443:13;1492:6;1487:2;1476:9;1472:18;1465:34;1517:1;1527:140;1541:6;1538:1;1535:13;1527:140;;;1636:14;;;1632:23;;1626:30;1602:17;;;1621:2;1598:26;1591:66;1556:10;;1527:140;;;1531:3;1716:1;1711:2;1702:6;1691:9;1687:22;1683:31;1676:42;1786:2;1779;1775:7;1770:2;1762:6;1758:15;1754:29;1743:9;1739:45;1735:54;1727:62;;;;1247:548;;;;:::o;1800:315::-;1868:6;1876;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1984:9;1971:23;2003:31;2028:5;2003:31;:::i;:::-;2053:5;2105:2;2090:18;;;;2077:32;;-1:-1:-1;;;1800:315:1:o;2494:127::-;2555:10;2550:3;2546:20;2543:1;2536:31;2586:4;2583:1;2576:15;2610:4;2607:1;2600:15;2626:1183;2719:6;2727;2780:2;2768:9;2759:7;2755:23;2751:32;2748:52;;;2796:1;2793;2786:12;2748:52;2832:9;2819:23;2809:33;;2861:2;2914;2903:9;2899:18;2886:32;2937:18;2978:2;2970:6;2967:14;2964:34;;;2994:1;2991;2984:12;2964:34;3032:6;3021:9;3017:22;3007:32;;3077:7;3070:4;3066:2;3062:13;3058:27;3048:55;;3099:1;3096;3089:12;3048:55;3135:2;3122:16;3157:2;3153;3150:10;3147:36;;;3163:18;;:::i;:::-;3209:2;3206:1;3202:10;3241:2;3235:9;3304:2;3300:7;3295:2;3291;3287:11;3283:25;3275:6;3271:38;3359:6;3347:10;3344:22;3339:2;3327:10;3324:18;3321:46;3318:72;;;3370:18;;:::i;:::-;3406:2;3399:22;3456:18;;;3490:15;;;;-1:-1:-1;3532:11:1;;;3528:20;;;3560:19;;;3557:39;;;3592:1;3589;3582:12;3557:39;3616:11;;;;3636:142;3652:6;3647:3;3644:15;3636:142;;;3718:17;;3706:30;;3669:12;;;;3756;;;;3636:142;;;3797:6;3787:16;;;;;;;;2626:1183;;;;;:::o;3814:456::-;3891:6;3899;3907;3960:2;3948:9;3939:7;3935:23;3931:32;3928:52;;;3976:1;3973;3966:12;3928:52;4015:9;4002:23;4034:31;4059:5;4034:31;:::i;:::-;4084:5;-1:-1:-1;4141:2:1;4126:18;;4113:32;4154:33;4113:32;4154:33;:::i;:::-;3814:456;;4206:7;;-1:-1:-1;;;4260:2:1;4245:18;;;;4232:32;;3814:456::o;4472:118::-;4558:5;4551:13;4544:21;4537:5;4534:32;4524:60;;4580:1;4577;4570:12;4595:382;4660:6;4668;4721:2;4709:9;4700:7;4696:23;4692:32;4689:52;;;4737:1;4734;4727:12;4689:52;4776:9;4763:23;4795:31;4820:5;4795:31;:::i;:::-;4845:5;-1:-1:-1;4902:2:1;4887:18;;4874:32;4915:30;4874:32;4915:30;:::i;:::-;4964:7;4954:17;;;4595:382;;;;;:::o;5171:276::-;5229:6;5282:2;5270:9;5261:7;5257:23;5253:32;5250:52;;;5298:1;5295;5288:12;5250:52;5337:9;5324:23;5387:10;5380:5;5376:22;5369:5;5366:33;5356:61;;5413:1;5410;5403:12;5452:180;5511:6;5564:2;5552:9;5543:7;5539:23;5535:32;5532:52;;;5580:1;5577;5570:12;5532:52;-1:-1:-1;5603:23:1;;5452:180;-1:-1:-1;5452:180:1:o;6646:388::-;6714:6;6722;6775:2;6763:9;6754:7;6750:23;6746:32;6743:52;;;6791:1;6788;6781:12;6743:52;6830:9;6817:23;6849:31;6874:5;6849:31;:::i;:::-;6899:5;-1:-1:-1;6956:2:1;6941:18;;6928:32;6969:33;6928:32;6969:33;:::i;7265:284::-;7323:6;7376:2;7364:9;7355:7;7351:23;7347:32;7344:52;;;7392:1;7389;7382:12;7344:52;7431:9;7418:23;7481:18;7474:5;7470:30;7463:5;7460:41;7450:69;;7515:1;7512;7505:12;7554:356;7756:2;7738:21;;;7775:18;;;7768:30;7834:34;7829:2;7814:18;;7807:62;7901:2;7886:18;;7554:356::o;8503:245::-;8570:6;8623:2;8611:9;8602:7;8598:23;8594:32;8591:52;;;8639:1;8636;8629:12;8591:52;8671:9;8665:16;8690:28;8712:5;8690:28;:::i;9298:184::-;9368:6;9421:2;9409:9;9400:7;9396:23;9392:32;9389:52;;;9437:1;9434;9427:12;9389:52;-1:-1:-1;9460:16:1;;9298:184;-1:-1:-1;9298:184:1:o;10193:127::-;10254:10;10249:3;10245:20;10242:1;10235:31;10285:4;10282:1;10275:15;10309:4;10306:1;10299:15;10325:251;10395:6;10448:2;10436:9;10427:7;10423:23;10419:32;10416:52;;;10464:1;10461;10454:12;10416:52;10496:9;10490:16;10515:31;10540:5;10515:31;:::i;10581:980::-;10843:4;10891:3;10880:9;10876:19;10922:6;10911:9;10904:25;10948:2;10986:6;10981:2;10970:9;10966:18;10959:34;11029:3;11024:2;11013:9;11009:18;11002:31;11053:6;11088;11082:13;11119:6;11111;11104:22;11157:3;11146:9;11142:19;11135:26;;11196:2;11188:6;11184:15;11170:29;;11217:1;11227:195;11241:6;11238:1;11235:13;11227:195;;;11306:13;;-1:-1:-1;;;;;11302:39:1;11290:52;;11397:15;;;;11362:12;;;;11338:1;11256:9;11227:195;;;-1:-1:-1;;;;;;;11478:32:1;;;;11473:2;11458:18;;11451:60;-1:-1:-1;;;11542:3:1;11527:19;11520:35;11439:3;10581:980;-1:-1:-1;;;10581:980:1:o;11566:127::-;11627:10;11622:3;11618:20;11615:1;11608:31;11658:4;11655:1;11648:15;11682:4;11679:1;11672:15;11698:128;11765:9;;;11786:11;;;11783:37;;;11800:18;;:::i;11831:125::-;11896:9;;;11917:10;;;11914:36;;;11930:18;;:::i;12714:127::-;12775:10;12770:3;12766:20;12763:1;12756:31;12806:4;12803:1;12796:15;12830:4;12827:1;12820:15;12846:112;12878:1;12904;12894:35;;12909:18;;:::i;:::-;-1:-1:-1;12943:9:1;;12846:112::o;12963:650::-;-1:-1:-1;;;;;13302:32:1;;;;13284:51;;13366:2;13351:18;;13344:34;;;;13409:2;13394:18;;13387:34;;;;13452:2;13437:18;;13430:34;;;;13495:3;13480:19;;13473:35;13557:4;13545:17;13322:3;13524:19;;13517:46;13594:3;13579:19;;13572:35;13271:3;13256:19;;12963:650::o;17675:168::-;17748:9;;;17779;;17796:15;;;17790:22;;17776:37;17766:71;;17817:18;;:::i;17848:120::-;17888:1;17914;17904:35;;17919:18;;:::i;:::-;-1:-1:-1;17953:9:1;;17848:120::o;19945:135::-;19984:3;20005:17;;;20002:43;;20025:18;;:::i;:::-;-1:-1:-1;20072:1:1;20061:13;;19945:135::o

Swarm Source

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

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