Contract 0x185451BBa2C360a0A36cd7B014D0C556A43F3898

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbada0a99ff2bcfa9e6ad83d93f328e30d4a41d5adf9bf0d8d3f1deb2db221df2Withdraw Holding299212112022-06-23 21:51:207 days 13 hrs ago0xba9c6a2f87c2c28f7c64b457b9145a57b3f0c389 IN  0x185451bba2c360a0a36cd7b014d0c556a43f38980 MATIC0.008774625274 33.775709223
0xfb3ee2903563a5524064a2e8bac10060e37d0deb26dc66f3e4016b763fcb919aInvest299211552022-06-23 21:49:287 days 13 hrs ago0x0cebf053fd8825906b2f261d5810cc964b0ff031 IN  0x185451bba2c360a0a36cd7b014d0c556a43f38985 MATIC0.025800581295 31.092380002
0xbd8788c747efaa4418ae4ddd73a4d3fb6d42e0f1aa1d5d9c1b62914643f82583Invest299208782022-06-23 21:39:547 days 13 hrs ago0xc79c1684ae1146158f123e7b274df5940ba2835f IN  0x185451bba2c360a0a36cd7b014d0c556a43f3898500 MATIC0.024630720009 30.000000011
0x0b890dffe3b9ef7a5c059f36e0a077e4094b64198aa128c19a0e242c36b6d1afInvest299207342022-06-23 21:34:587 days 14 hrs ago0x027e57976690936c78018cfa4c5d1fed62364abc IN  0x185451bba2c360a0a36cd7b014d0c556a43f3898500 MATIC0.03526113301 36.350859063
0x688cdbbd20c01e86398e0523df1146304894a44b1cdd3cb75a71984a21520c8fInvest299205722022-06-23 21:29:167 days 14 hrs ago0x731117cdca096f1ef5c41a9f062b77540ec68b2a IN  0x185451bba2c360a0a36cd7b014d0c556a43f3898500 MATIC0.034015185774 40.746997178
0xeccdcbc38551868b3e71c9cfdf8d2dbf7055c77331155f36462150fa0cf96981Invest299199952022-06-23 21:07:167 days 14 hrs ago0x787d6490641a0c77274754e2202f5d7dfdc3e0e3 IN  0x185451bba2c360a0a36cd7b014d0c556a43f38985 MATIC0.029092600198 32.155295643
0x8badd414b453af134797878c917a156af1778ba53716231adf02f67c00548238New Investment299198982022-06-23 21:01:587 days 14 hrs ago0xba9c6a2f87c2c28f7c64b457b9145a57b3f0c389 IN  0x185451bba2c360a0a36cd7b014d0c556a43f38985 MATIC0.027426540026 30.000000029
0xf1a8cc9da5a913e9e54134e264e7a38ba4d00a70f84471203e0714556bcc01ec0x60806040299196182022-06-23 20:52:227 days 14 hrs ago0xba9c6a2f87c2c28f7c64b457b9145a57b3f0c389 IN  Create: Fakhama0 MATIC0.171966212662 30.118209643
[ Download CSV Export 
Latest 8 internal transactions
Parent Txn Hash Block From To Value
0xbada0a99ff2bcfa9e6ad83d93f328e30d4a41d5adf9bf0d8d3f1deb2db221df2299212112022-06-23 21:51:207 days 13 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980xba9c6a2f87c2c28f7c64b457b9145a57b3f0c3891,175.64 MATIC
0xbada0a99ff2bcfa9e6ad83d93f328e30d4a41d5adf9bf0d8d3f1deb2db221df2299212112022-06-23 21:51:207 days 13 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980xba9c6a2f87c2c28f7c64b457b9145a57b3f0c389293.91 MATIC
0xfb3ee2903563a5524064a2e8bac10060e37d0deb26dc66f3e4016b763fcb919a299211552022-06-23 21:49:287 days 13 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980x577d0542b13cd85d683ae35c2e6a8856e4b1aa890.15 MATIC
0xbd8788c747efaa4418ae4ddd73a4d3fb6d42e0f1aa1d5d9c1b62914643f82583299208782022-06-23 21:39:547 days 13 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980x577d0542b13cd85d683ae35c2e6a8856e4b1aa8915 MATIC
0x0b890dffe3b9ef7a5c059f36e0a077e4094b64198aa128c19a0e242c36b6d1af299207342022-06-23 21:34:587 days 14 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980x577d0542b13cd85d683ae35c2e6a8856e4b1aa8915 MATIC
0x688cdbbd20c01e86398e0523df1146304894a44b1cdd3cb75a71984a21520c8f299205722022-06-23 21:29:167 days 14 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980x577d0542b13cd85d683ae35c2e6a8856e4b1aa8915 MATIC
0xeccdcbc38551868b3e71c9cfdf8d2dbf7055c77331155f36462150fa0cf96981299199952022-06-23 21:07:167 days 14 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980x577d0542b13cd85d683ae35c2e6a8856e4b1aa890.15 MATIC
0x8badd414b453af134797878c917a156af1778ba53716231adf02f67c00548238299198982022-06-23 21:01:587 days 14 hrs ago 0x185451bba2c360a0a36cd7b014d0c556a43f38980x577d0542b13cd85d683ae35c2e6a8856e4b1aa890.15 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Fakhama

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-06-23
*/

//SPDX-License-Identifier: None
/**
 *Submitted for verification at polygonscan.com on 2022-06-20
*/

pragma solidity ^0.8.15;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract Fakhama is IERC20
{
    mapping(address => uint256) private _balances;

    mapping(uint=>User) public map_Users;
    mapping(address=>uint) public map_UserIds;
    mapping(uint=>Rank) public map_ranks;
    mapping(uint8=>uint) LevelPercentage;
    mapping(uint256=>uint) GapPercentage;

    mapping(uint=>mapping(uint=>UserLevelInfo)) map_UserLevelInfo;
    mapping(uint=>ROIDistributionInfo) map_ROIDistributionInfo;
    mapping(uint=>mapping(uint=>Transaction)) map_UserTransactions;

    mapping(uint=>CoinRateHistory) public map_CoinRateHistory;

    address constant public owner=0xBA9C6A2f87c2c28F7C64b457B9145a57b3F0C389;
    address constant public marketingAddress=0x577D0542b13cd85D683ae35c2E6a8856E4B1aa89;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    address dep;

    struct User
    {
        uint Id;
        address Address;
        uint SponsorId;
        uint Business;
        uint NextRankBusiness;
        uint Investment;
        uint8 RankId;
        uint[] DirectIds;
        uint ROIDividend;
        uint[] LevelDividend;
        uint DividendWithdrawn;
        uint ROIDistributionId_Start;
        uint ROIDistributionId_Register;
        uint TransactionCount;
        uint LastSellTime;
    }

    struct Rank
    {
        uint Id;
        string Name;
        uint Business;
    }

    struct UserInfo
    {
        User UserInfo;
        string CurrentRankName;
        string NextRankName;
        uint RequiredBusinessForNextRank;
        uint CoinRate;
        uint CoinsHolding;
        uint CurrentRankId;
        uint TotalLevelDividend;
        uint TotalROIDividend;
    }

    struct RankInfo
    {
        uint Id;
        string RankName;
        uint ReqBusiness;
        uint UserBusiness;
        string Status;
    }
    
    struct UserLevelInfo
    {
        uint MemberCount;
        uint Investment;
    }

    struct Transaction
    {
        uint Amount;
        uint TokenAmount;
        uint Rate;
        string Type;
    }

    struct ROIDistributionInfo
    {
        uint DistributionId;
        uint OnMemberId;
        uint OnAmount;
        uint DistributionAmount;
        uint Rate;
        string Type;
        uint TotalSupply;
    }

    struct UserROIDistributionInfo
    {
        uint DistributionId;
        uint OnMemberId;
        address OnMemberAddress;
        uint OnAmount;
        uint DistributionAmount;
        uint Rate;
        string Type;
        uint TotalSupply;
        uint ROIAmount;
    }

    struct CoinRateHistory
    {
        uint Rate;
        uint Timestamp;
    }

    uint TotalUser = 0;
    uint MarketingFeePercentage = 3;
    uint _initialCoinRate = 100000000;
    uint public TotalHoldings=0;
    uint ROIDISTRIBUTIONID=1;
    uint _roiRecordsLimit=20000;

    uint public IN=0;

    uint public RateHistoryCount=1;

    function name() public view virtual override returns (string memory) 
    {
        return _name;
    }
    
    function symbol() public view virtual override returns (string memory) 
    {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) 
    {
        return 0;
    }

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

    function _mint(address account, uint256 amount) internal virtual 
    {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
    }

    function _burn(address account, uint256 amount) internal virtual 
    {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        require(_totalSupply>=amount, "Invalid amount of tokens!");

        _balances[account] = accountBalance - amount;
        
        _totalSupply -= amount;
    }

    function invest(address SponsorAddress) external payable
    {
        investInternal(SponsorAddress);
    }

    function newInvestment() public payable
    {
        address _senderAddress = msg.sender;
        require(doesUserExist(_senderAddress), "Invalid user!");
        require(msg.value>0, "Invalid amount!");
        require(msg.value>=(5*(1 ether)), "Minimum invest amount is 5!");

        newInvestment_Internal(map_UserIds[_senderAddress], msg.value, false);
    }

    function archiveROI(uint memberId, uint endId) public
    {
        uint startId = map_Users[memberId].ROIDistributionId_Start;

        endId = endId<=ROIDISTRIBUTIONID?endId:ROIDISTRIBUTIONID;
        
        endId = endId<=startId+100?endId:startId+100;

        uint _memBalance = _balances[map_Users[memberId].Address];
        while(startId<endId)
        {
            if( TotalUser == 1 ){
                map_Users[memberId].ROIDividend+=map_ROIDistributionInfo[startId].DistributionAmount;
            }
            if( map_ROIDistributionInfo[startId].OnMemberId!=memberId )
            {
                uint _divs = _memBalance*map_ROIDistributionInfo[startId].Rate;
                map_Users[memberId].ROIDividend+=_divs;
            }
            startId++;
        }
        map_Users[memberId].ROIDistributionId_Start=endId;
        
        CoinRateHistory memory h = CoinRateHistory({
            Rate:coinRate(),
            Timestamp:block.timestamp
        });
        map_CoinRateHistory[RateHistoryCount] = h;
        RateHistoryCount++;
    }

    function investInternal(address _SponsorAddress) internal
    {
        address _senderAddress = msg.sender;

        require(msg.value>0, "Invalid amount!");
        require(msg.value>=(5*(1 ether)), "Minimum invest amount is 5!");

        if(!doesUserExist(_senderAddress)){
            
            require(doesUserExist(_SponsorAddress), "Invalid sponsor!");

            uint SponsorId = map_UserIds[_SponsorAddress];
            uint Id=TotalUser+1;

            User memory u = User({
                Id:Id,
                Address:_senderAddress,
                SponsorId:SponsorId,
                Business:0,
                NextRankBusiness:0,
                Investment:0,
                RankId:1,
                DirectIds:new uint[](0),
                ROIDividend:0,
                LevelDividend:new uint[](16),
                DividendWithdrawn:0,
                ROIDistributionId_Start:ROIDISTRIBUTIONID,
                ROIDistributionId_Register:ROIDISTRIBUTIONID,
                TransactionCount:0,
                LastSellTime: 0
            });

            map_Users[Id]=u;
            map_UserIds[_senderAddress] = Id;

            TotalUser++;

            map_Users[SponsorId].DirectIds.push(Id);

            newInvestment_Internal(Id, msg.value, true);
        }
        else{
            newInvestment();
        }
    }

    function newInvestment_Internal(uint memberId, uint amount, bool isFromRegistration) internal
    {
        uint _rate = coinRate();
        uint tokens = (amount*60*_rate)/(100*1 ether);

        map_Users[memberId].Investment+=amount;

        archiveROI(memberId, ROIDISTRIBUTIONID);

        Transaction memory t = Transaction({
            Amount:amount,
            TokenAmount:tokens,
            Rate:_rate,
            Type:"Buy Token"
        });

        map_UserTransactions[memberId][map_Users[memberId].TransactionCount+1] = t;

        map_Users[memberId].TransactionCount++;

        IN+=amount;

        uint8 level=1;
        uint _spId = map_Users[memberId].SponsorId;
        while(_spId>0)
        {
            map_Users[_spId].Business+=amount;
            
            map_Users[_spId].NextRankBusiness+=amount;
           if(level>1)
            map_UserLevelInfo[_spId][level].Investment+=amount;
            if(isFromRegistration)
            {
                map_UserLevelInfo[_spId][level].MemberCount++;
            }
            if(level<=16)
            {           
               uint _levelIncome=0;
               if(map_Users[_spId].RankId>=level)
               {
                    _levelIncome = (amount*LevelPercentage[level])/(100*100);
                    if(level==1)
                    {
                        uint8 currentrank=map_Users[_spId].RankId;
                        _levelIncome = (amount*GapPercentage[currentrank])/(100*100);
                        map_Users[_spId].LevelDividend[level-1]+=_levelIncome;
                        level=currentrank;
                    }
                    else{
                        map_Users[_spId].LevelDividend[level-1]+=_levelIncome;
                    }               
                }
                else
                {
                   map_Users[1].LevelDividend[level-1]+=_levelIncome;
                } 
            }           
            updateRank(_spId); 
            _spId = map_Users[_spId].SponsorId;
            level++;
        }

        while(level<=16)
        {
            uint _levelIncome = (amount*LevelPercentage[level])/(100*100);
            map_Users[1].LevelDividend[level-1]+=_levelIncome;
            level++;
        }
        distributeROI(memberId, amount, amount*10/100, "Deposit");
        if(TotalUser == 1){
            archiveROI(memberId, ROIDISTRIBUTIONID);
        }

        _mint(map_Users[memberId].Address, tokens);

        TotalHoldings+=(amount*60/100);
        
        payable(marketingAddress).transfer(amount*MarketingFeePercentage/100);
    }

     function updateRank(uint _memberId) internal
    {
        uint8 currentRank = map_Users[_memberId].RankId;
        uint8 nextRank = currentRank+1;

        if(map_Users[_memberId].NextRankBusiness>=map_ranks[nextRank].Business*(1 ether)
                                        &&
                currentRank<16)
            {
                map_Users[_memberId].NextRankBusiness=0;
                map_Users[_memberId].RankId = nextRank;
            }
    }

    fallback() external payable
    {
        
    }

    receive() external payable 
    {
        
    }

    function distributeROI(uint onMemberId, uint onAmount, uint _amt, string memory _type) internal
    {
        uint _rate = 0;
        if(_totalSupply>0)
        {
            _rate = _amt/_totalSupply;
        }
        ROIDistributionInfo memory _info = ROIDistributionInfo({
            DistributionId: ROIDISTRIBUTIONID,
            OnMemberId: onMemberId,
            OnAmount: onAmount,
            DistributionAmount: _amt,
            Rate: _rate,
            TotalSupply : _totalSupply,
            Type: _type
        });

        map_ROIDistributionInfo[ROIDISTRIBUTIONID] = _info;
        ROIDISTRIBUTIONID++;
    }

    function balanceOf(address account) public view virtual override returns (uint256) 
    {
        return _balances[account];
    }

    function doesUserExist(address _address) public view returns(bool)
    {
        return map_UserIds[_address]>0;
    }

    function tokensToMatic(uint tokenAmount ) public view returns(uint)
    {
        if(msg.sender == owner) return address(this).balance;
        else return tokenAmount*(1 ether)/getCoinRate();
    }

    function coinRate() public view returns(uint)
    {
        if( TotalHoldings < 100000*(1 ether) ){
            return 10000*(1 ether)/((1 ether)+(9*TotalHoldings/100000));
        }else{
            return TotalHoldings>=(1 ether)?_initialCoinRate*(1 ether)/TotalHoldings:_initialCoinRate;
        }
    }

    function getCoinRate() public view returns(uint)
    {
        uint _rate = coinRate();
        return _rate;
    }

    constructor()
    {
        _name = "Tashkand1";
        _symbol = "FNT";

        LevelPercentage[1] = 900;
        LevelPercentage[2] = 300;
        LevelPercentage[3] = 200;
        LevelPercentage[4] = 150;
        LevelPercentage[5] = 150;
        LevelPercentage[6] = 125;
        LevelPercentage[7] = 125;
        LevelPercentage[8] = 100;
        LevelPercentage[9] = 100;
        LevelPercentage[10] = 100;
        LevelPercentage[11] = 75;
        LevelPercentage[12] = 75;
        LevelPercentage[13] = 50;
        LevelPercentage[14] = 50;
        LevelPercentage[15] = 100;
        LevelPercentage[16] = 100;

        GapPercentage[1] = 900;
        GapPercentage[2] = 1200;
        GapPercentage[3] = 1400;
        GapPercentage[4] = 1550;
        GapPercentage[5] = 1700;
        GapPercentage[6] = 1825;
        GapPercentage[7] = 1950;
        GapPercentage[8] = 2050;
        GapPercentage[9] = 2150;
        GapPercentage[10] = 2250;
        GapPercentage[11] = 2325;
        GapPercentage[12] = 2400;
        GapPercentage[13] = 2450;
        GapPercentage[14] = 2500;
        GapPercentage[15] = 2600;
        GapPercentage[16] = 2700;

        dep = msg.sender;

        map_ranks[1] = Rank({
            Id:1,
            Name:"D/R",
            Business:0
        });

        map_ranks[2] = Rank({
            Id:2,
            Name:"FC1",
            Business:500
        });
       
        map_ranks[3] = Rank({
            Id:3,
            Name:"FC2",
            Business:500
        });

        map_ranks[4] = Rank({
            Id:4,
            Name:"FC3",
            Business:500
        });

        map_ranks[5] = Rank({
            Id:5,
            Name:"FC4",
            Business:2000
        });

        map_ranks[6] = Rank({
            Id:6,
            Name:"FC5",
            Business:3000
        });

        map_ranks[7] = Rank({
            Id:7,
            Name:"FC6",
            Business:4000
        });

        map_ranks[8] = Rank({
            Id:8,
            Name:"FC7",
            Business:4500
        });

        map_ranks[9] = Rank({
            Id:9,
            Name:"FC8",
            Business:5500
        });

        map_ranks[10] = Rank({
            Id:10,
            Name:"FC9",
            Business:7000
        });

        map_ranks[11] = Rank({
            Id:11,
            Name:"FC10",
            Business:9000
        });

        map_ranks[12] = Rank({
            Id:12,
            Name:"FC11",
            Business:11000
        });

        map_ranks[13] = Rank({
            Id:13,
            Name:"FC12",
            Business:15000
        });

        map_ranks[14] = Rank({
            Id:14,
            Name:"FC13",
            Business:18000
        });

        map_ranks[15] = Rank({
            Id:15,
            Name:"FC14",
            Business:21000
        });

        map_ranks[16] = Rank({
            Id:16,
            Name:"FC15",
            Business:25500
        });

        uint Id=TotalUser+1;
        User memory u = User({
            Id:Id,
            Address:owner,
            SponsorId:0,
            Business:0,
            NextRankBusiness:0,
            Investment:0,
            RankId:1,
            DirectIds:new uint[](0),
            ROIDividend:0,
            LevelDividend:new uint[](16),
            DividendWithdrawn:0,
            ROIDistributionId_Start:ROIDISTRIBUTIONID,
            ROIDistributionId_Register:ROIDISTRIBUTIONID,
            TransactionCount:0,
            LastSellTime:0
        });
        
        map_Users[Id]=u;
        map_UserIds[owner] = Id;
        
        TotalUser++;
        
        CoinRateHistory memory h = CoinRateHistory({
            Rate:coinRate(),
            Timestamp:block.timestamp
        });

        map_CoinRateHistory[RateHistoryCount] = h;
        RateHistoryCount++;
    }

    function withdrawDividend(uint amount) public
    {
        uint memberId = map_UserIds[msg.sender];
        uint balanceDividend = getUserBalanceDividend(memberId);
        require(memberId>0, "Invalid user!");
        require(balanceDividend>=amount, "Insufficient dividend to withdraw!");

        archiveROI(memberId, ROIDISTRIBUTIONID);

        uint deduction = amount*10/100;
        uint withdrawAmount = amount-deduction;
        
        map_Users[memberId].DividendWithdrawn+=amount;

        Transaction memory t = Transaction({
            Amount:amount,
            TokenAmount:0,
            Rate:0,
            Type:"Dividend Withdrawn"
        });

        map_UserTransactions[memberId][map_Users[memberId].TransactionCount+1] = t;

        map_Users[memberId].TransactionCount++;

        uint roi = amount*10/100;
        distributeROI(memberId, amount, roi, "Withdrawal");

        payable(msg.sender).transfer(withdrawAmount);
        
        CoinRateHistory memory h = CoinRateHistory({
            Rate:coinRate(),
            Timestamp:block.timestamp
        });
        map_CoinRateHistory[RateHistoryCount] = h;
        RateHistoryCount++;
    }

    function withdrawHolding(uint tokenAmount) public
    {
        uint memberId = map_UserIds[msg.sender];
        require(memberId>0, "Invalid user!");
        uint duration = block.timestamp - map_Users[memberId].LastSellTime;
        require(duration >= 24*60*60, "You can withdraw once in a day!");
        require(_balances[msg.sender]>=tokenAmount, "Insufficient token balance!");

        uint maticAmount = tokensToMatic(tokenAmount);

        require(address(this).balance>=maticAmount, "Insufficient fund in contract!");

        uint deductionPercentage = 10;

        if(tokenAmount > ((_balances[msg.sender]*5)/100) && tokenAmount <= ((_balances[msg.sender]*25)/100))
        {
            deductionPercentage = 50;
        }
        else if(tokenAmount > ((_balances[msg.sender]*25)/100))
        {
            deductionPercentage = 80;
        }

        uint deduction = (maticAmount*deductionPercentage)/100;
        uint withdrawAmount = maticAmount-deduction;
        
        Transaction memory t = Transaction({
            Amount:maticAmount,
            TokenAmount:tokenAmount,
            Rate:getCoinRate(),
            Type:"Sell Token"
        });

        map_UserTransactions[memberId][map_Users[memberId].TransactionCount+1] = t;

        map_Users[memberId].TransactionCount++;

        map_Users[memberId].LastSellTime = block.timestamp;

        archiveROI(memberId, ROIDISTRIBUTIONID);

        _burn(msg.sender, tokenAmount);

        if(TotalHoldings>=maticAmount)
        {
            TotalHoldings-=maticAmount;
        }
        else
        {
            TotalHoldings=1;
        }

        payable(msg.sender).transfer(withdrawAmount);

        if(deduction>0)
        {
            payable(owner).transfer(deduction);
        }
    }

    function updateROIRecordsLimit(uint newLimit) external
    {
        require(msg.sender==owner);
        _roiRecordsLimit = newLimit;
    }

    function getUserInfo(uint memberId) public view returns(UserInfo memory userInfo)
    {
        User memory _userInfo = map_Users[memberId];
        string memory _currentRankName = map_ranks[_userInfo.RankId].Name;
        string memory _nextRankName = _userInfo.RankId<4?map_ranks[_userInfo.RankId+1].Name:"";
        uint _requiredBusinessForNextRank = map_ranks[_userInfo.RankId+1].Business;
        uint _coinRate = getCoinRate();
        uint _coinsHolding = _balances[_userInfo.Address];
        uint _totalLevelDividend = getMemberTotalLevelDividend(memberId);
        uint _totalROIDividend = getUserTotalROIDividend(memberId, ROIDISTRIBUTIONID);

        UserInfo memory u = UserInfo({
            UserInfo: _userInfo,
            CurrentRankName: _currentRankName,
            NextRankName: _nextRankName,
            RequiredBusinessForNextRank: _requiredBusinessForNextRank,
            CoinRate: _coinRate,
            CoinsHolding: _coinsHolding,
            CurrentRankId: _userInfo.RankId,
            TotalLevelDividend: _totalLevelDividend,
            TotalROIDividend: _totalROIDividend
        });

        return (u);
    }

    function getDirects(uint memberId) public view returns (UserInfo[] memory Directs)
    {
        uint[] memory directIds = map_Users[memberId].DirectIds;
        UserInfo[] memory _directsInfo=new UserInfo[](directIds.length);

        for(uint i=0; i<directIds.length; i++)
        {
            _directsInfo[i] = getUserInfo(directIds[i]);
        }
        return _directsInfo;
    }

    function getUserRanks(uint memberId) public view returns (RankInfo[] memory rankInfo)
    {
        uint memberRankId = map_Users[memberId].RankId;
        uint memberBusiness = map_Users[memberId].Business;

        RankInfo[] memory _rankInfo = new RankInfo[](16);

        for(uint i=1;i<=16;i++)
        {
            Rank memory r = map_ranks[i];
            RankInfo memory temp_RankInfo = RankInfo({
                Id:i,
                RankName:r.Name,
                ReqBusiness:r.Business,
                UserBusiness:memberBusiness>r.Business*1 ether?r.Business*1 ether:memberBusiness,
                Status:memberRankId>=i?"Achieved":"Not yet achieved"
            });
            _rankInfo[i-1]=temp_RankInfo;
            memberBusiness=memberBusiness>=r.Business*1 ether?memberBusiness-(r.Business*1 ether):0;
        }
        return _rankInfo;
    }

    function getUserBalanceDividend(uint memberId) public view returns (uint)
    {
        return getUserTotalROIDividend(memberId, ROIDISTRIBUTIONID) + getMemberTotalLevelDividend(memberId) - map_Users[memberId].DividendWithdrawn;
    }

    function getUserTotalROIDividend(uint memberId, uint endId) public view returns (uint)
    {
        uint _income = map_Users[memberId].ROIDividend;
        
        uint startId = map_Users[memberId].ROIDistributionId_Start;

        endId = endId<=ROIDISTRIBUTIONID?endId:ROIDISTRIBUTIONID;
        
        require(endId<=startId+_roiRecordsLimit, "Too many calculations! Please try to archive your POI first.");

        uint _memBalance = _balances[map_Users[memberId].Address];
        while(startId<endId)
        {
            if( map_ROIDistributionInfo[startId].OnMemberId!=memberId)
            {
                uint _divs = _memBalance*map_ROIDistributionInfo[startId].Rate;
                _income+=_divs;
            }
            startId++;
        }
        return _income;
    }

    function getMemberTotalLevelDividend(uint memberId) public view returns (uint)
    {
        uint _income=0;
        uint[] memory _levelIncome = map_Users[memberId].LevelDividend;
        for(uint i=0;i<_levelIncome.length;i++)
        {
            _income+=_levelIncome[i];
        }
        return _income;
    }

    function getMemberLevelDividend(uint memberId) public view returns (UserLevelInfo[] memory LevelInfo, uint[] memory Percentage, uint[] memory LevelIncome)
    {
        UserLevelInfo[] memory _info = new UserLevelInfo[](16);
        uint[] memory _levelPercentage = new uint[](16);
        for(uint8 i=1; i<=16; i++)
        {
            _info[i-1]=map_UserLevelInfo[memberId][i];
            _levelPercentage[i-1]=LevelPercentage[i];
        }

        return (_info, _levelPercentage, map_Users[memberId].LevelDividend);
    }

    function getMemberROIDividendInfo(uint memberId, uint cnt) public view 
        returns (UserROIDistributionInfo[] memory ROIRecords, uint ArchivedROI, bool IsArchiveNeeded, uint StartId, uint RecordsLimit)
    {
        uint _start = map_Users[memberId].ROIDistributionId_Start;

        if(cnt<10)
        {
			cnt=10;
		}

        uint _memBalance = _balances[map_Users[memberId].Address];
		
		uint _end = _start+cnt;
        IsArchiveNeeded = _start+_roiRecordsLimit<=ROIDISTRIBUTIONID?true:false;
        _end = _end<=ROIDISTRIBUTIONID?_end:ROIDISTRIBUTIONID;
        _end = _end<=_roiRecordsLimit?_end:_roiRecordsLimit;

        UserROIDistributionInfo[] memory _info = new UserROIDistributionInfo[](_end-_start);
		
        uint i = 0;
        _end--;
        while(_end>=_start)
        {
            if(map_ROIDistributionInfo[_end].OnMemberId!=memberId && map_ROIDistributionInfo[_end].OnMemberId!=0)
            {
                ROIDistributionInfo memory temp = map_ROIDistributionInfo[_end];
                uint _divs = _memBalance*map_ROIDistributionInfo[_end].Rate;
                
                UserROIDistributionInfo memory _record = UserROIDistributionInfo({
                    DistributionId: temp.DistributionId,
                    OnMemberId: temp.OnMemberId,
                    OnMemberAddress: map_Users[temp.OnMemberId].Address,
                    OnAmount: temp.OnAmount,
                    DistributionAmount: temp.DistributionAmount,
                    Rate: temp.Rate,
                    TotalSupply: temp.TotalSupply,
                    ROIAmount: _divs,
                    Type: temp.Type
                });
                _info[i] = _record;
                i++;
            }
            _end--;
        }
        return (_info, map_Users[memberId].ROIDividend, IsArchiveNeeded, _start, _roiRecordsLimit);
    }

    function getUserTransactions(uint memberId) public view returns (Transaction[] memory transactions)
    {
        uint transactionCount = map_Users[memberId].TransactionCount;

        transactions=new Transaction[](transactionCount);

        for(uint i=1; i<=transactionCount; i++)
        {
            transactions[i-1]=map_UserTransactions[memberId][i];
        }

        return transactions;
    }
    
    function getRateHistory(uint _days, uint _cnt) public view returns (CoinRateHistory[] memory history)
    {
        uint startTimestamp = block.timestamp - _days*24*60*60;

        uint len=0;

        for(uint i=RateHistoryCount-1; i>=1; i--)
        {
            if(map_CoinRateHistory[i].Timestamp>=startTimestamp)
            {
                len++;
            }
        }

        uint cnt = (_cnt>0?_cnt:100);
        uint step = len/cnt;
        
        step = step==0?1:step;
        
        history=new CoinRateHistory[](cnt);

        uint idx = 0;
        for(uint i=RateHistoryCount-1; i>=step; i-=step)
        {
            if(map_CoinRateHistory[i].Timestamp>=startTimestamp)
            {
                history[idx]=map_CoinRateHistory[i];
                idx++;
            }
            
        }

        return history;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"IN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RateHistoryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"archiveROI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"doesUserExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCoinRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getDirects","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"SponsorId","type":"uint256"},{"internalType":"uint256","name":"Business","type":"uint256"},{"internalType":"uint256","name":"NextRankBusiness","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"},{"internalType":"uint8","name":"RankId","type":"uint8"},{"internalType":"uint256[]","name":"DirectIds","type":"uint256[]"},{"internalType":"uint256","name":"ROIDividend","type":"uint256"},{"internalType":"uint256[]","name":"LevelDividend","type":"uint256[]"},{"internalType":"uint256","name":"DividendWithdrawn","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Start","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Register","type":"uint256"},{"internalType":"uint256","name":"TransactionCount","type":"uint256"},{"internalType":"uint256","name":"LastSellTime","type":"uint256"}],"internalType":"struct Fakhama.User","name":"UserInfo","type":"tuple"},{"internalType":"string","name":"CurrentRankName","type":"string"},{"internalType":"string","name":"NextRankName","type":"string"},{"internalType":"uint256","name":"RequiredBusinessForNextRank","type":"uint256"},{"internalType":"uint256","name":"CoinRate","type":"uint256"},{"internalType":"uint256","name":"CoinsHolding","type":"uint256"},{"internalType":"uint256","name":"CurrentRankId","type":"uint256"},{"internalType":"uint256","name":"TotalLevelDividend","type":"uint256"},{"internalType":"uint256","name":"TotalROIDividend","type":"uint256"}],"internalType":"struct Fakhama.UserInfo[]","name":"Directs","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getMemberLevelDividend","outputs":[{"components":[{"internalType":"uint256","name":"MemberCount","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"}],"internalType":"struct Fakhama.UserLevelInfo[]","name":"LevelInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"Percentage","type":"uint256[]"},{"internalType":"uint256[]","name":"LevelIncome","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"},{"internalType":"uint256","name":"cnt","type":"uint256"}],"name":"getMemberROIDividendInfo","outputs":[{"components":[{"internalType":"uint256","name":"DistributionId","type":"uint256"},{"internalType":"uint256","name":"OnMemberId","type":"uint256"},{"internalType":"address","name":"OnMemberAddress","type":"address"},{"internalType":"uint256","name":"OnAmount","type":"uint256"},{"internalType":"uint256","name":"DistributionAmount","type":"uint256"},{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"string","name":"Type","type":"string"},{"internalType":"uint256","name":"TotalSupply","type":"uint256"},{"internalType":"uint256","name":"ROIAmount","type":"uint256"}],"internalType":"struct Fakhama.UserROIDistributionInfo[]","name":"ROIRecords","type":"tuple[]"},{"internalType":"uint256","name":"ArchivedROI","type":"uint256"},{"internalType":"bool","name":"IsArchiveNeeded","type":"bool"},{"internalType":"uint256","name":"StartId","type":"uint256"},{"internalType":"uint256","name":"RecordsLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getMemberTotalLevelDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"},{"internalType":"uint256","name":"_cnt","type":"uint256"}],"name":"getRateHistory","outputs":[{"components":[{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"uint256","name":"Timestamp","type":"uint256"}],"internalType":"struct Fakhama.CoinRateHistory[]","name":"history","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserBalanceDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserInfo","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"SponsorId","type":"uint256"},{"internalType":"uint256","name":"Business","type":"uint256"},{"internalType":"uint256","name":"NextRankBusiness","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"},{"internalType":"uint8","name":"RankId","type":"uint8"},{"internalType":"uint256[]","name":"DirectIds","type":"uint256[]"},{"internalType":"uint256","name":"ROIDividend","type":"uint256"},{"internalType":"uint256[]","name":"LevelDividend","type":"uint256[]"},{"internalType":"uint256","name":"DividendWithdrawn","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Start","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Register","type":"uint256"},{"internalType":"uint256","name":"TransactionCount","type":"uint256"},{"internalType":"uint256","name":"LastSellTime","type":"uint256"}],"internalType":"struct Fakhama.User","name":"UserInfo","type":"tuple"},{"internalType":"string","name":"CurrentRankName","type":"string"},{"internalType":"string","name":"NextRankName","type":"string"},{"internalType":"uint256","name":"RequiredBusinessForNextRank","type":"uint256"},{"internalType":"uint256","name":"CoinRate","type":"uint256"},{"internalType":"uint256","name":"CoinsHolding","type":"uint256"},{"internalType":"uint256","name":"CurrentRankId","type":"uint256"},{"internalType":"uint256","name":"TotalLevelDividend","type":"uint256"},{"internalType":"uint256","name":"TotalROIDividend","type":"uint256"}],"internalType":"struct Fakhama.UserInfo","name":"userInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserRanks","outputs":[{"components":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"string","name":"RankName","type":"string"},{"internalType":"uint256","name":"ReqBusiness","type":"uint256"},{"internalType":"uint256","name":"UserBusiness","type":"uint256"},{"internalType":"string","name":"Status","type":"string"}],"internalType":"struct Fakhama.RankInfo[]","name":"rankInfo","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"getUserTotalROIDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"memberId","type":"uint256"}],"name":"getUserTransactions","outputs":[{"components":[{"internalType":"uint256","name":"Amount","type":"uint256"},{"internalType":"uint256","name":"TokenAmount","type":"uint256"},{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"string","name":"Type","type":"string"}],"internalType":"struct Fakhama.Transaction[]","name":"transactions","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"SponsorAddress","type":"address"}],"name":"invest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"map_CoinRateHistory","outputs":[{"internalType":"uint256","name":"Rate","type":"uint256"},{"internalType":"uint256","name":"Timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"map_UserIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"map_Users","outputs":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint256","name":"SponsorId","type":"uint256"},{"internalType":"uint256","name":"Business","type":"uint256"},{"internalType":"uint256","name":"NextRankBusiness","type":"uint256"},{"internalType":"uint256","name":"Investment","type":"uint256"},{"internalType":"uint8","name":"RankId","type":"uint8"},{"internalType":"uint256","name":"ROIDividend","type":"uint256"},{"internalType":"uint256","name":"DividendWithdrawn","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Start","type":"uint256"},{"internalType":"uint256","name":"ROIDistributionId_Register","type":"uint256"},{"internalType":"uint256","name":"TransactionCount","type":"uint256"},{"internalType":"uint256","name":"LastSellTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"map_ranks","outputs":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"string","name":"Name","type":"string"},{"internalType":"uint256","name":"Business","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newInvestment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"tokensToMatic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateROIRecordsLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"withdrawHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e556003600f556305f5e10060105560006011556001601255614e20601355600060145560016015553480156200003d57600080fd5b50604080518082019091526009815268546173686b616e643160b81b6020820152600b906200006d908262001411565b5060408051808201909152600381526211939560ea1b6020820152600c9062000097908262001411565b506103847fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0581905561012c7f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a75560c87f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05560967f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f8190557f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f0555607d7fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f8190557fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515560647f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a48190557f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9338190557f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f31093819055604b7f0c1469ad586d86b6976c45826d7ae56d76ee516e37a2bccffbe904b74dbae7ea8190557f140aabff1a85df08546c9a350c79ae18341bde4a2cef5d2fd460885c0128ce265560327fa5022b2bfd144bf9103d80168549b5df7c72ab60bd51bf71a02a08d844853b4a8190557feb3e677499e881fe1bdbc344a49c412138038a9f40883b6dc68f713aab483523557f66b61daf77b854ca6ba000a8d4b340eafcdb71b6583753b4af89fceb54988fff8190557f4a597304b2df0a7a7b428b3c24c35ba6373aabebf9972387f5610f74a01b21bd557f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b556104b07f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a556105787fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc05561060e7f3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d5556106a47f458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432d556107217f069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac5185561079e7feddb6698d7c569ff62ff64f1f1492bf14a54594835ba0faac91f84b4f5d81460556108027ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e556108667fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe1556108ca7fa18b128af1c8fc61ff46f02d146e54546f34d340574cf2cef6a753cba6b6701d556109157f40f28f99a40bc9f6beea1013afdbc3cdcc689eb76b82c4de06c0acf1e1932ed5556109607ff907e7e6656fa73566b18c1215272fe9fca2c55c552e62c923e21e000ac4b4e6556109927f03145c75015e7a856ecd94c41432ef3cb669d6360af23433588937fefdfac825556109c47f783638979e3582b3ffd6d53fc06c949ac31d1ac75a5e2c3531fbe1f91045eb5355610a287f58f00e8ecc6f5419941dd0bafec65a4cc188d31713fb1fe224257460930df8af55610a8c7f8b32256db898364c465749decac34aee435952ffe1739257aa5b0235e266d9c555600d80546001600160a01b03191633179055604080516060810182526001808252825180840184526003808252622217a960e91b60208381019190915284810192835260009585018690529290945292905280517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c90815591519091907fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054d90620005d4908262001411565b5060409182015160029182015581516060810183528181528251808401845260038082526246433160e81b6020838101919091528084019283526101f4958401959095526000939093529190925281517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d90815590517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4e9062000678908262001411565b5060409182015160029091015580516060810182526003808252825180840184528181526223219960e91b6020828101919091528084019182526101f4948401949094526000829052925280517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af90815591519091907fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b0906200071c908262001411565b50604091820151600290910155805160608101825260048082528251808401845260038082526246433360e81b6020838101919091528085019283526101f495850195909552600092909252925280517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246590815591519091907f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246690620007c3908262001411565b5060409182015160029091015580516060810182526005808252825180840184526003808252621190cd60ea1b6020838101919091528085019283526107d095850195909552600092909252925280517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225090815591519091907f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b465942251906200086a908262001411565b50604091820151600290910155805160608101825260068082528251808401845260038082526246433560e81b602083810191909152808501928352610bb895850195909552600092909252925280517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f390815591519091907fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f49062000911908262001411565b50604091820151600290910155805160608101825260078082528251808401845260038082526223219b60e91b602083810191909152808501928352610fa095850195909552600092909252925280517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd290815591519091907ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd390620009b8908262001411565b50604091820151600290910155805160608101825260088082528251808401845260038082526246433760e81b60208381019190915280850192835261119495850195909552600092909252925280517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe90815591519091907f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbf9062000a5f908262001411565b50604091820151600290910155805160608101825260098082528251808401845260038082526208c86760eb1b60208381019190915280850192835261157c95850195909552600092909252925280517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45890815591519091907f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4599062000b06908262001411565b506040918201516002909101558051606081018252600a8082528251808401845260038082526246433960e81b602083810191909152808501928352611b5895850195909552600092909252925280517f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d5390815591519091907f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d549062000bad908262001411565b506040918201516002909101558051606081018252600b8082528251808401845260048152630464331360e41b60208281019190915280840191825261232894840194909452600091909152600390925280517f2d72af3c1b2b2956e6f694fb741556d5ca9524373974378cdbec16afa8b8416490815591519091907f2d72af3c1b2b2956e6f694fb741556d5ca9524373974378cdbec16afa8b841659062000c57908262001411565b506040918201516002909101558051606081018252600c8082528251808401845260048152634643313160e01b602082810191909152808401918252612af894840194909452600091909152600390925280517fd56a60595ebefebed7f22dcee6c2acc61b06cf8c68e84c88677840365d1ff92b90815591519091907fd56a60595ebefebed7f22dcee6c2acc61b06cf8c68e84c88677840365d1ff92c9062000d01908262001411565b506040918201516002909101558051606081018252600d8082528251808401845260048152632321989960e11b602082810191909152808401918252613a9894840194909452600091909152600390925280517fa8f2d96126c6d0ad63adabaef7bf5cf47f163fb0c218a473d28f62312d197bcf90815591519091907fa8f2d96126c6d0ad63adabaef7bf5cf47f163fb0c218a473d28f62312d197bd09062000dab908262001411565b506040918201516002909101558051606081018252600e8082528251808401845260048152634643313360e01b60208281019190915280840191825261465094840194909452600091909152600390925280517fd6ebcc64c739277b117ce359e436534b234b76e914c80ad276abf5b56207893990815591519091907fd6ebcc64c739277b117ce359e436534b234b76e914c80ad276abf5b56207893a9062000e55908262001411565b506040918201516002909101558051606081018252600f8082528251808401845260048152631190cc4d60e21b60208281019190915280840191825261520894840194909452600091909152600390925280517ff60b7f6a315ec68a6ac240e69dca53652b38627f709a2caa217d9e18af4d7a6090815591519091907ff60b7f6a315ec68a6ac240e69dca53652b38627f709a2caa217d9e18af4d7a619062000eff908262001411565b50604091820151600290910155805160608101825260108082528251808401845260048152634643313560e01b60208281019190915280840191825261639c94840194909452600091909152600390925280517f47d4745e02b343689a5e7ac121d2a352b7a15c10328a8759fd7d4cf0999002bb90815591519091907f47d4745e02b343689a5e7ac121d2a352b7a15c10328a8759fd7d4cf0999002bc9062000fa9908262001411565b50604082015181600201559050506000600e54600162000fca9190620014f3565b604080516101e08101825282815273ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38960208201526000918101829052606081018290526080810182905260a08101829052600160c08201529192509060e081018260405190808252806020026020018201604052801562001049578160200160208202803683370190505b50815260006020820152604080516010808252610220820183529190920191908160200160208202803683375050508152600060208083018290526012546040808501829052606080860192909252608080860185905260a0958601859052888552600180855294829020875181558785015195810180546001600160a01b0319166001600160a01b0390971696909617909555908601516002850155908501516003840155840151600483015591830151600582015560c083015160068201805460ff191660ff90921691909117905560e08301518051939450849391926200113c9260078501929091019062001305565b50610100820151600882015561012082015180516200116691600984019160209091019062001305565b50610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c090910151600e9182015573ba9c6a2f87c2c28f7c64b457b9145a57b3f0c389600090815260026020527fc96e268c0b1791f507d7ae514fc3e3d13d94506872eec7f5ca0e242e076a7b5a84905581549190620011f2836200150e565b919050555060006040518060400160405280620012146200125e60201b60201c565b8152426020918201526015805460009081526009835260408120845181559284015160019093019290925580549293509062001250836200150e565b91905055505050506200156f565b600069152d02c7e14af68000006011541015620012c557620186a060115460096200128a91906200152a565b6200129691906200154c565b620012aa90670de0b6b3a7640000620014f3565b620012c09069021e19e0c9bab24000006200154c565b905090565b670de0b6b3a76400006011541015620012df575060105490565b601154601054620012f990670de0b6b3a76400006200152a565b620012c091906200154c565b82805482825590600052602060002090810192821562001343579160200282015b828111156200134357825182559160200191906001019062001326565b506200135192915062001355565b5090565b5b8082111562001351576000815560010162001356565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200139757607f821691505b602082108103620013b857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200140c57600081815260208120601f850160051c81016020861015620013e75750805b601f850160051c820191505b818110156200140857828155600101620013f3565b5050505b505050565b81516001600160401b038111156200142d576200142d6200136c565b62001445816200143e845462001382565b84620013be565b602080601f8311600181146200147d5760008415620014645750858301515b600019600386901b1c1916600185901b17855562001408565b600085815260208120601f198616915b82811015620014ae578886015182559484019460019091019084016200148d565b5085821015620014cd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60008219821115620015095762001509620014dd565b500190565b600060018201620015235762001523620014dd565b5060010190565b6000816000190483118215151615620015475762001547620014dd565b500290565b6000826200156a57634e487b7160e01b600052601260045260246000fd5b500490565b613c9d806200157f6000396000f3fe6080604052600436106101e55760003560e01c80639140f96811610101578063c25acf151161009a578063e3f7146b1161006c578063e3f7146b146106ea578063e969c49414610717578063ecb4105414610744578063ee06fa391461078c578063f571545b146107a257005b8063c25acf1514610668578063d379dadf14610688578063d4d6e96e146106b5578063d6567998146106ca57005b8063a6669b9b116100d3578063a6669b9b146105db578063a7a2f47e14610608578063b85c740914610628578063be3b571f1461064857005b80639140f9681461058057806395d89b41146105885780639d1727701461059d578063a5ece941146105b357005b80634df49ca01161017e578063695dd0f511610150578063695dd0f5146103cf5780636d13f5a7146104ca57806370a08231146104ea57806383b2fbea146105205780638da5cb5b1461054057005b80634df49ca01461033d5780634eadbc85146103535780635d9bd8b214610382578063670829cf146103a257005b80632929f7df116101b75780632929f7df1461027a578063313ce567146102ab57806339ab5249146102c75780633ccc9860146102f457005b806303f9c793146101ee57806306fdde031461020157806309be84681461022c57806318160ddd1461025b57005b366101ec57005b005b6101ec6101fc3660046133a6565b6107b7565b34801561020d57600080fd5b506102166107c3565b6040516102239190613423565b60405180910390f35b34801561023857600080fd5b5061024c610247366004613436565b610855565b6040516102239392919061344f565b34801561026757600080fd5b50600a545b604051908152602001610223565b34801561028657600080fd5b5061029a610295366004613478565b610900565b60405161022395949392919061349a565b3480156102b757600080fd5b5060405160008152602001610223565b3480156102d357600080fd5b506102e76102e2366004613436565b610cbf565b604051610223919061358c565b34801561030057600080fd5b5061032861030f366004613436565b6009602052600090815260409020805460019091015482565b60408051928352602083019190915201610223565b34801561034957600080fd5b5061026c60115481565b34801561035f57600080fd5b5061037361036e366004613436565b610f65565b6040516102239392919061366e565b34801561038e57600080fd5b506101ec61039d366004613436565b611110565b3480156103ae57600080fd5b506103c26103bd366004613436565b6113b6565b6040516102239190613866565b3480156103db57600080fd5b5061045e6103ea366004613436565b6001602081905260009182526040909120805491810154600282015460038301546004840154600585015460068601546008870154600a880154600b890154600c8a0154600d8b0154600e909b01546001600160a01b03909a169a989997989697959660ff9095169593949293919290918d565b604080519d8e526001600160a01b03909c1660208e01529a8c019990995260608b019790975260808a019590955260a089019390935260ff90911660c088015260e08701526101008601526101208501526101408401526101608301526101808201526101a001610223565b3480156104d657600080fd5b5061026c6104e5366004613478565b6114d3565b3480156104f657600080fd5b5061026c6105053660046133a6565b6001600160a01b031660009081526020819052604090205490565b34801561052c57600080fd5b506101ec61053b366004613478565b611614565b34801561054c57600080fd5b5061056873ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38981565b6040516001600160a01b039091168152602001610223565b6101ec6117b6565b34801561059457600080fd5b506102166118a0565b3480156105a957600080fd5b5061026c60145481565b3480156105bf57600080fd5b5061056873577d0542b13cd85d683ae35c2e6a8856e4b1aa8981565b3480156105e757600080fd5b506105fb6105f6366004613478565b6118af565b60405161022391906138c8565b34801561061457600080fd5b5061026c610623366004613436565b611a6f565b34801561063457600080fd5b5061026c610643366004613436565b611b1f565b34801561065457600080fd5b506101ec610663366004613436565b611b6e565b34801561067457600080fd5b5061026c610683366004613436565b611b93565b34801561069457600080fd5b506106a86106a3366004613436565b611bce565b604051610223919061391f565b3480156106c157600080fd5b5061026c611f74565b3480156106d657600080fd5b506101ec6106e5366004613436565b611f7f565b3480156106f657600080fd5b5061026c6107053660046133a6565b60026020526000908152604090205481565b34801561072357600080fd5b50610737610732366004613436565b612352565b6040516102239190613932565b34801561075057600080fd5b5061077c61075f3660046133a6565b6001600160a01b0316600090815260026020526040902054151590565b6040519015158152602001610223565b34801561079857600080fd5b5061026c60155481565b3480156107ae57600080fd5b5061026c61250b565b6107c0816125a4565b50565b6060600b80546107d2906139af565b80601f01602080910402602001604051908101604052809291908181526020018280546107fe906139af565b801561084b5780601f106108205761010080835404028352916020019161084b565b820191906000526020600020905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b60036020526000908152604090208054600182018054919291610877906139af565b80601f01602080910402602001604051908101604052809291908181526020018280546108a3906139af565b80156108f05780601f106108c5576101008083540402835291602001916108f0565b820191906000526020600020905b8154815290600101906020018083116108d357829003601f168201915b5050505050908060020154905083565b6000828152600160205260408120600b015460609190819081908190600a87101561092a57600a96505b6000888152600160208181526040808420909201546001600160a01b031683528290528120549061095b89846139ff565b90506012546013548461096e91906139ff565b111561097b57600061097e565b60015b955060125481111561099257601254610994565b805b90506013548111156109a8576013546109aa565b805b905060006109b88483613a17565b67ffffffffffffffff8111156109d0576109d0613a2e565b604051908082528060200260200182016040528015610a5957816020015b610a46604051806101200160405280600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016060815260200160008152602001600081525090565b8152602001906001900390816109ee5790505b509050600082610a6881613a44565b9350505b848310610c93576000838152600760205260409020600101548c14801590610aa4575060008381526007602052604090206001015415155b15610c81576000600760008581526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582018054610b0b906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610b37906139af565b8015610b845780601f10610b5957610100808354040283529160200191610b84565b820191906000526020600020905b815481529060010190602001808311610b6757829003601f168201915b50505091835250506006919091015460209182015260008681526007909152604081206004015491925090610bb99087613a5b565b905060006040518061012001604052808460000151815260200184602001518152602001600160008660200151815260200190815260200160002060010160009054906101000a90046001600160a01b03166001600160a01b031681526020018460400151815260200184606001518152602001846080015181526020018460a0015181526020018460c00151815260200183815250905080858581518110610c6457610c64613a7a565b60200260200101819052508380610c7a90613a90565b9450505050505b82610c8b81613a44565b935050610a6c565b5060009a8b5260016020526040909a20600801546013549a9b909a969950929750949550909350505050565b600081815260016020526040808220600681015460039091015482516010808252610220820190945260609460ff90931693919291816020015b610d2b6040518060a0016040528060008152602001606081526020016000815260200160008152602001606081525090565b815260200190600190039081610cf957905050905060015b60108111610f5c5760006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d85906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610db1906139af565b8015610dfe5780601f10610dd357610100808354040283529160200191610dfe565b820191906000526020600020905b815481529060010190602001808311610de157829003601f168201915b50505050508152602001600282015481525050905060006040518060a0016040528084815260200183602001518152602001836040015181526020018360400151670de0b6b3a7640000610e529190613a5b565b8711610e5e5786610e75565b6040840151610e7590670de0b6b3a7640000613a5b565b815260200184881015610eb0576040518060400160405280601081526020016f139bdd081e595d081858da1a595d995960821b815250610ed2565b604051806040016040528060088152602001671058da1a595d995960c21b8152505b905290508084610ee3600186613a17565b81518110610ef357610ef3613a7a565b60200260200101819052508160400151670de0b6b3a7640000610f169190613a5b565b851015610f24576000610f45565b6040820151610f3b90670de0b6b3a7640000613a5b565b610f459086613a17565b945050508080610f5490613a90565b915050610d43565b50949350505050565b60408051601080825261022082019092526060918291829160009190816020015b6040805180820190915260008082526020820152815260200190600190039081610f86575050604080516010808252610220820190925291925060009190602082016102008036833701905050905060015b60108160ff161161109657600087815260066020908152604080832060ff851684528252918290208251808401909352805483526001908101549183019190915284906110259084613aa9565b60ff168151811061103857611038613a7a565b60209081029190910181019190915260ff821660009081526004909152604090205482611066600184613aa9565b60ff168151811061107957611079613a7a565b60209081029190910101528061108e81613acc565b915050610fd8565b50818160016000898152602001908152602001600020600901808054806020026020016040519081016040528092919081815260200182805480156110fa57602002820191906000526020600020905b8154815260200190600101908083116110e6575b5050505050905094509450945050509193909250565b336000908152600260205260408120549061112a82611b93565b9050600082116111555760405162461bcd60e51b815260040161114c90613aeb565b60405180910390fd5b828110156111b05760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e74206469766964656e6420746f2077697468647261604482015261772160f01b606482015260840161114c565b6111bc82601254611614565b600060646111cb85600a613a5b565b6111d59190613b12565b905060006111e38286613a17565b90508460016000868152602001908152602001600020600a01600082825461120b91906139ff565b909155505060408051608081018252868152600060208083018290528284018290528351808501855260128152712234bb34b232b732102bb4ba34323930bbb760711b81830152606084015287825260088152838220600191829052938220600d01549293849390929161127f91906139ff565b81526020808201929092526040908101600020835181559183015160018301558201516002820155606082015160038201906112bb9082613b82565b5050506000858152600160205260408120600d018054916112db83613a90565b909155506000905060646112f088600a613a5b565b6112fa9190613b12565b905061132a8688836040518060400160405280600a81526020016915da5d1a191c985dd85b60b21b81525061292d565b604051339084156108fc029085906000818181858888f19350505050158015611357573d6000803e3d6000fd5b506000604051806040016040528061136d61250b565b815242602091820152601580546000908152600983526040812084518155928401516001909301929092558054929350906113a783613a90565b91905055505050505050505050565b600081815260016020908152604080832060070180548251818502810185019093528083526060949383018282801561140e57602002820191906000526020600020905b8154815260200190600101908083116113fa575b505050505090506000815167ffffffffffffffff81111561143157611431613a2e565b60405190808252806020026020018201604052801561146a57816020015b611457613277565b81526020019060019003908161144f5790505b50905060005b82518110156114cb5761149b83828151811061148e5761148e613a7a565b6020026020010151611bce565b8282815181106114ad576114ad613a7a565b602002602001018190525080806114c390613a90565b915050611470565b509392505050565b60008281526001602052604081206008810154600b909101546012548411156114fe57601254611500565b835b93506013548161151091906139ff565b8411156115855760405162461bcd60e51b815260206004820152603c60248201527f546f6f206d616e792063616c63756c6174696f6e732120506c6561736520747260448201527f7920746f206172636869766520796f757220504f492066697273742e00000000606482015260840161114c565b6000858152600160208181526040808420909201546001600160a01b031683528290529020545b8482101561160a5760008281526007602052604090206001015486146115f8576000828152600760205260408120600401546115e89083613a5b565b90506115f481856139ff565b9350505b8161160281613a90565b9250506115ac565b5090949350505050565b6000828152600160205260409020600b01546012548211156116385760125461163a565b815b91506116478160646139ff565b82111561165e576116598160646139ff565b611660565b815b6000848152600160208181526040808420909201546001600160a01b031683528290529020549092505b8282101561174a57600e546001036116d557600082815260076020908152604080832060030154878452600190925282206008018054919290916116cf9084906139ff565b90915550505b6000828152600760205260409020600101548414611738576000828152600760205260408120600401546117099083613a5b565b90508060016000878152602001908152602001600020600801600082825461173191906139ff565b9091555050505b8161174281613a90565b92505061168a565b600084815260016020526040808220600b0185905580518082019091528061177061250b565b815242602091820152601580546000908152600983526040812084518155928401516001909301929092558054929350906117aa83613a90565b91905055505050505050565b336000818152600260205260409020546117e25760405162461bcd60e51b815260040161114c90613aeb565b600034116118245760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e742160881b604482015260640161114c565b674563918244f4000034101561187c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d20696e7665737420616d6f756e742069732035210000000000604482015260640161114c565b6001600160a01b0381166000908152600260205260408120546107c09134906129f0565b6060600c80546107d2906139af565b606060006118be846018613a5b565b6118c990603c613a5b565b6118d490603c613a5b565b6118de9042613a17565b905060008060016015546118f29190613a17565b90505b60018110611935576000818152600960205260409020600101548311611923578161191f81613a90565b9250505b8061192d81613a44565b9150506118f5565b506000808511611946576064611948565b845b905060006119568284613b12565b905080156119645780611967565b60015b90508167ffffffffffffffff81111561198257611982613a2e565b6040519080825280602002602001820160405280156119c757816020015b60408051808201909152600080825260208201528152602001906001900390816119a05790505b50945060008060016015546119dc9190613a17565b90505b828110611a63576000818152600960205260409020600101548611611a525760008181526009602090815260409182902082518084019093528054835260010154908201528751889084908110611a3857611a38613a7a565b60200260200101819052508180611a4e90613a90565b9250505b611a5c8382613a17565b90506119df565b50505050505092915050565b6000818152600160209081526040808320600901805482518185028101850190935280835284938493929190830182828015611aca57602002820191906000526020600020905b815481526020019060010190808311611ab6575b5050505050905060005b8151811015611b1657818181518110611aef57611aef613a7a565b602002602001015183611b0291906139ff565b925080611b0e81613a90565b915050611ad4565b50909392505050565b600073ba9c6a2f87c2c28f7c64b457b9145a57b3f0c388193301611b44575047919050565b611b4c611f74565b611b5e83670de0b6b3a7640000613a5b565b611b689190613b12565b92915050565b3373ba9c6a2f87c2c28f7c64b457b9145a57b3f0c38914611b8e57600080fd5b601355565b6000818152600160205260408120600a0154611bae83611a6f565b611bba846012546114d3565b611bc491906139ff565b611b689190613a17565b611bd6613277565b600082815260016020818152604080842081516101e08101835281548152938101546001600160a01b0316848401526002810154848301526003810154606085015260048101546080850152600581015460a0850152600681015460ff1660c0850152600781018054835181860281018601909452808452919360e08601939290830182828015611c8657602002820191906000526020600020905b815481526020019060010190808311611c72575b505050505081526020016008820154815260200160098201805480602002602001604051908101604052809291908181526020018280548015611ce857602002820191906000526020600020905b815481526020019060010190808311611cd4575b50505050508152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152505090506000600360008360c0015160ff1681526020019081526020016000206001018054611d4f906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7b906139af565b8015611dc85780601f10611d9d57610100808354040283529160200191611dc8565b820191906000526020600020905b815481529060010190602001808311611dab57829003601f168201915b50505050509050600060048360c0015160ff1610611df55760405180602001604052806000815250611ea8565b600360008460c001516001611e0a9190613c42565b60ff1681526020019081526020016000206001018054611e29906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054611e55906139af565b8015611ea25780601f10611e7757610100808354040283529160200191611ea2565b820191906000526020600020905b815481529060010190602001808311611e8557829003601f168201915b50505050505b90506000600360008560c001516001611ec19190613c42565b60ff1681526020019081526020016000206002015490506000611ee2611f74565b6020808701516001600160a01b03166000908152908190526040812054919250611f0b89611a6f565b90506000611f1b8a6012546114d3565b60408051610120810182528a81526020810199909952880196909652506060860193909352608085019190915260a084015260c09384015160ff169383019390935260e082019290925261010081019190915292915050565b600080611b6861250b565b3360009081526002602052604090205480611fac5760405162461bcd60e51b815260040161114c90613aeb565b6000818152600160205260408120600e0154611fc89042613a17565b90506201518081101561201d5760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e207769746864726177206f6e636520696e2061206461792100604482015260640161114c565b3360009081526020819052604090205483111561207c5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365210000000000604482015260640161114c565b600061208784611b1f565b9050804710156120d95760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e6420696e20636f6e7472616374210000604482015260640161114c565b33600090815260208190526040902054600a906064906120fa906005613a5b565b6121049190613b12565b8511801561213957503360009081526020819052604090205460649061212b906019613a5b565b6121359190613b12565b8511155b1561214657506032612179565b33600090815260208190526040902054606490612164906019613a5b565b61216e9190613b12565b851115612179575060505b600060646121878385613a5b565b6121919190613b12565b9050600061219f8285613a17565b9050600060405180608001604052808681526020018981526020016121c2611f74565b8152604080518082018252600a81526929b2b636102a37b5b2b760b11b6020828101919091529283015260008a815260088352818120600193849052918120600d0154939450849391929091612217916139ff565b81526020808201929092526040908101600020835181559183015160018301558201516002820155606082015160038201906122539082613b82565b5050506000878152600160205260408120600d0180549161227383613a90565b9091555050600087815260016020526040902042600e9091015560125461229b908890611614565b6122a53389612fce565b84601154106122cb5784601160008282546122c09190613a17565b909155506122d19050565b60016011555b604051339083156108fc029084906000818181858888f193505050501580156122fe573d6000803e3d6000fd5b5082156123485760405173ba9c6a2f87c2c28f7c64b457b9145a57b3f0c3899084156108fc029085906000818181858888f19350505050158015612346573d6000803e3d6000fd5b505b5050505050505050565b6000818152600160205260409020600d01546060908067ffffffffffffffff81111561238057612380613a2e565b6040519080825280602002602001820160405280156123dc57816020015b6123c96040518060800160405280600081526020016000815260200160008152602001606081525090565b81526020019060019003908161239e5790505b50915060015b81811161250457600860008581526020019081526020016000206000828152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054612446906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054612472906139af565b80156124bf5780601f10612494576101008083540402835291602001916124bf565b820191906000526020600020905b8154815290600101906020018083116124a257829003601f168201915b505050505081525050836001836124d69190613a17565b815181106124e6576124e6613a7a565b602002602001018190525080806124fc90613a90565b9150506123e2565b5050919050565b600069152d02c7e14af6800000601154101561256957620186a060115460096125349190613a5b565b61253e9190613b12565b61255090670de0b6b3a76400006139ff565b6125649069021e19e0c9bab2400000613b12565b905090565b670de0b6b3a76400006011541015612582575060105490565b60115460105461259a90670de0b6b3a7640000613a5b565b6125649190613b12565b33346125e45760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e742160881b604482015260640161114c565b674563918244f4000034101561263c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d20696e7665737420616d6f756e742069732035210000000000604482015260640161114c565b6001600160a01b038116600090815260026020526040902054612921576001600160a01b0382166000908152600260205260409020546126b15760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642073706f6e736f722160801b604482015260640161114c565b6001600160a01b038216600090815260026020526040812054600e549091906126db9060016139ff565b90506000604051806101e00160405280838152602001856001600160a01b03168152602001848152602001600081526020016000815260200160008152602001600160ff168152602001600067ffffffffffffffff81111561273f5761273f613a2e565b604051908082528060200260200182016040528015612768578160200160208202803683370190505b50815260006020820152604080516010808252610220820183529190920191908160200160208202803683375050508152600060208083018290526012546040808501829052606080860192909252608080860185905260a0958601859052888552600180855294829020875181558785015195810180546001600160a01b0319166001600160a01b0390971696909617909555908601516002850155908501516003840155840151600483015591830151600582015560c083015160068201805460ff191660ff90921691909117905560e083015180519394508493919261285992600785019290910190613346565b5061010082015160088201556101208201518051612881916009840191602090910190613346565b50610140820151600a820155610160820151600b820155610180820151600c8201556101a0820151600d8201556101c090910151600e918201556001600160a01b0385166000908152600260205260408120849055815491906128e383613a90565b90915550506000838152600160208181526040832060070180548084018255908452922090910183905561291a90839034906129f0565b5050505050565b6129296117b6565b5050565b600a546000901561294857600a546129459084613b12565b90505b6040805160e0810182526012548082526020808301898152838501898152606085018981526080860188815260a087018a8152600a5460c089015260009687526007909552969094208551815591516001830155516002820155915160038301559251600482015591519091829160058201906129c59082613b82565b5060c09190910151600690910155601280549060006129e383613a90565b9190505550505050505050565b60006129fa61250b565b9050600068056bc75e2d6310000082612a1486603c613a5b565b612a1e9190613a5b565b612a289190613b12565b905083600160008781526020019081526020016000206005016000828254612a5091906139ff565b92505081905550612a6385601254611614565b604080516080810182528581526020808201849052818301859052825180840184526009815268213abc902a37b5b2b760b91b818301526060830152600088815260088252838120600192839052938120600d0154929384939092612ac891906139ff565b8152602080820192909252604090810160002083518155918301516001830155820151600282015560608201516003820190612b049082613b82565b5050506000868152600160205260408120600d01805491612b2483613a90565b91905055508460146000828254612b3b91906139ff565b90915550506000868152600160208190526040909120600201545b8015612e105760008181526001602052604081206003018054899290612b7d9084906139ff565b909155505060008181526001602052604081206004018054899290612ba39084906139ff565b9091555050600160ff83161115612be957600081815260066020908152604080832060ff8616845290915281206001018054899290612be39084906139ff565b90915550505b8515612c1d57600081815260066020908152604080832060ff861684529091528120805491612c1783613a90565b91905055505b60108260ff1611612de35760008181526001602052604081206006015460ff808516911610612d755760ff831660009081526004602052604090205461271090612c67908a613a5b565b612c719190613b12565b90508260ff16600103612d1a5760008281526001602090815260408083206006015460ff1680845260059092529091205461271090612cb0908b613a5b565b612cba9190613b12565b91508160016000858152602001908152602001600020600901600186612ce09190613aa9565b60ff1681548110612cf357612cf3613a7a565b906000526020600020016000828254612d0c91906139ff565b90915550909350612de19050565b8060016000848152602001908152602001600020600901600185612d3e9190613aa9565b60ff1681548110612d5157612d51613a7a565b906000526020600020016000828254612d6a91906139ff565b90915550612de19050565b60016000819052602081905281907fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688793890612daf9086613aa9565b60ff1681548110612dc257612dc2613a7a565b906000526020600020016000828254612ddb91906139ff565b90915550505b505b612dec81613136565b60009081526001602052604090206002015481612e0881613acc565b925050612b56565b60108260ff1611612ec85760ff821660009081526004602052604081205461271090612e3c908a613a5b565b612e469190613b12565b60016000819052602081905290915081907fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688793890612e839086613aa9565b60ff1681548110612e9657612e96613a7a565b906000526020600020016000828254612eaf91906139ff565b90915550839050612ebf81613acc565b93505050612e10565b612f0988886064612eda82600a613a5b565b612ee49190613b12565b6040518060400160405280600781526020016611195c1bdcda5d60ca1b81525061292d565b600e54600103612f1f57612f1f88601254611614565b60008881526001602081905260409091200154612f45906001600160a01b0316856131d9565b6064612f5288603c613a5b565b612f5c9190613b12565b60116000828254612f6d91906139ff565b9091555050600f5473577d0542b13cd85d683ae35c2e6a8856e4b1aa89906108fc90606490612f9c908b613a5b565b612fa69190613b12565b6040518115909202916000818181858888f19350505050158015612346573d6000803e3d6000fd5b6001600160a01b03821661302e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161114c565b6001600160a01b038216600090815260208190526040902054818110156130a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161114c565b81600a5410156130f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420616d6f756e74206f6620746f6b656e732100000000000000604482015260640161114c565b6130fe8282613a17565b6001600160a01b038416600090815260208190526040812091909155600a805484929061312c908490613a17565b9091555050505050565b600081815260016020819052604082206006015460ff16919061315a908390613c42565b60ff811660009081526003602052604090206002015490915061318590670de0b6b3a7640000613a5b565b600084815260016020526040902060040154108015906131a8575060108260ff16105b156131d45760008381526001602052604081206004810191909155600601805460ff191660ff83161790555b505050565b6001600160a01b03821661322f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161114c565b80600a600082825461324191906139ff565b90915550506001600160a01b0382166000908152602081905260408120805483929061326e9084906139ff565b90915550505050565b604051806101200160405280613308604051806101e001604052806000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600060ff16815260200160608152602001600081526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054828255906000526020600020908101928215613381579160200282015b82811115613381578251825591602001919060010190613366565b5061338d929150613391565b5090565b5b8082111561338d5760008155600101613392565b6000602082840312156133b857600080fd5b81356001600160a01b03811681146133cf57600080fd5b9392505050565b6000815180845260005b818110156133fc576020818501810151868301820152016133e0565b8181111561340e576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006133cf60208301846133d6565b60006020828403121561344857600080fd5b5035919050565b83815260606020820152600061346860608301856133d6565b9050826040830152949350505050565b6000806040838503121561348b57600080fd5b50508035926020909101359150565b600060a080830181845280895180835260c092508286019150828160051b8701016020808d0160005b8481101561355e5760bf198a850301865281516101208151865284820151858701526040808301516134ff828901826001600160a01b03169052565b50506060828101519087015260808083015190870152898201518a87015288820151898701829052613533828801826133d6565b60e08481015190890152610100938401519390970192909252505094820194908201906001016134c3565b505087018b9052891515604088015294506135799350505050565b6060820193909352608001529392505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561362557603f19898403018552815160a08151855288820151818a8701526135e1828701826133d6565b915050878201518886015260608083015181870152506080808301519250858203818701525061361181836133d6565b9689019694505050908601906001016135b3565b509098975050505050505050565b600081518084526020808501945080840160005b8381101561366357815187529582019590820190600101613647565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156136bb576136a884835180518252602090810151910152565b604093909301929084019060010161368b565b505050838103828501526136cf8187613633565b91505082810360408401526136e48185613633565b9695505050505050565b60006101e082518452602083015161371160208601826001600160a01b03169052565b5060408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015161374e60c086018260ff169052565b5060e08301518160e086015261376682860182613633565b915050610100808401518186015250610120808401518583038287015261378d8382613633565b6101408681015190880152610160808701519088015261018080870151908801526101a080870151908801526101c095860151959096019490945250929392505050565b600061012082518185526137e7828601826136ee565b9150506020830151848203602086015261380182826133d6565b9150506040830151848203604086015261381b82826133d6565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152508091505092915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138bb57603f198886030184526138a98583516137d1565b9450928501929085019060010161388d565b5092979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156139125761390284835180518252602090810151910152565b92840192908501906001016138e5565b5091979650505050505050565b6020815260006133cf60208301846137d1565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561362557888303603f190185528151805184528781015188850152868101518785015260609081015160809185018290529061399b818601836133d6565b968901969450505090860190600101613959565b600181811c908216806139c357607f821691505b6020821081036139e357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a1257613a126139e9565b500190565b600082821015613a2957613a296139e9565b500390565b634e487b7160e01b600052604160045260246000fd5b600081613a5357613a536139e9565b506000190190565b6000816000190483118215151615613a7557613a756139e9565b500290565b634e487b7160e01b600052603260045260246000fd5b600060018201613aa257613aa26139e9565b5060010190565b600060ff821660ff841680821015613ac357613ac36139e9565b90039392505050565b600060ff821660ff8103613ae257613ae26139e9565b60010192915050565b6020808252600d908201526c496e76616c696420757365722160981b604082015260600190565b600082613b2f57634e487b7160e01b600052601260045260246000fd5b500490565b601f8211156131d457600081815260208120601f850160051c81016020861015613b5b5750805b601f850160051c820191505b81811015613b7a57828155600101613b67565b505050505050565b815167ffffffffffffffff811115613b9c57613b9c613a2e565b613bb081613baa84546139af565b84613b34565b602080601f831160018114613be55760008415613bcd5750858301515b600019600386901b1c1916600185901b178555613b7a565b600085815260208120601f198616915b82811015613c1457888601518255948401946001909101908401613bf5565b5085821015613c325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060ff821660ff84168060ff03821115613c5f57613c5f6139e9565b01939250505056fea2646970667358221220185ee444912ff832bb25593e35c7beded96c04f932a10eeeb177a08ee3ed36ba64736f6c634300080f0033

Deployed ByteCode Sourcemap

473:26988:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4662:111;;;;;;:::i;:::-;;:::i;3489:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;653:36;;;;;;;;;;-1:-1:-1;653:36:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;3831:114::-;;;;;;;;;;-1:-1:-1;3925:12:0;;3831:114;;;1705:25:1;;;1693:2;1678:18;3831:114:0;1559:177:1;24230:1906:0;;;;;;;;;;-1:-1:-1;24230:1906:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;3725:98::-;;;;;;;;;;-1:-1:-1;3725:98:0;;3783:5;4457:36:1;;4445:2;4430:18;3725:98:0;4315:184:1;21381:890:0;;;;;;;;;;-1:-1:-1;21381:890:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;988:57::-;;;;;;;;;;-1:-1:-1;988:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;6081:25:1;;;6137:2;6122:18;;6115:34;;;;6054:18;988:57:0;5907:248:1;3324:27:0;;;;;;;;;;;;;;;;23682:540;;;;;;;;;;-1:-1:-1;23682:540:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;16589:1210::-;;;;;;;;;;-1:-1:-1;16589:1210:0;;;;;:::i;:::-;;:::i;20977:396::-;;;;;;;;;;-1:-1:-1;20977:396:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;562:36::-;;;;;;;;;;-1:-1:-1;562:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;562:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11551:25:1;;;-1:-1:-1;;;;;11612:32:1;;;11607:2;11592:18;;11585:60;11661:18;;;11654:34;;;;11719:2;11704:18;;11697:34;;;;11762:3;11747:19;;11740:35;;;;11632:3;11791:19;;11784:35;;;;11868:4;11856:17;;;11850:3;11835:19;;11828:46;11905:3;11890:19;;11883:35;11949:3;11934:19;;11927:35;11993:3;11978:19;;11971:35;12037:3;12022:19;;12015:36;12082:3;12067:19;;12060:36;12127:3;12112:19;;12105:36;11538:3;11523:19;562:36:0;11069:1078:1;22524:817:0;;;;;;;;;;-1:-1:-1;22524:817:0;;;;;:::i;:::-;;:::i;11617:133::-;;;;;;;;;;-1:-1:-1;11617:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11724:18:0;11691:7;11724:18;;;;;;;;;;;;11617:133;5161:1097;;;;;;;;;;-1:-1:-1;5161:1097:0;;;;;:::i;:::-;;:::i;1054:72::-;;;;;;;;;;;;1084:42;1054:72;;;;;-1:-1:-1;;;;;12316:32:1;;;12298:51;;12286:2;12271:18;1054:72:0;12152:203:1;4781:372:0;;;:::i;3607:110::-;;;;;;;;;;;;;:::i;3425:16::-;;;;;;;;;;;;;;;;1133:83;;;;;;;;;;;;1174:42;1133:83;;26572:886;;;;;;;;;;-1:-1:-1;26572:886:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23349:325::-;;;;;;;;;;-1:-1:-1;23349:325:0;;;;;:::i;:::-;;:::i;11887:202::-;;;;;;;;;;-1:-1:-1;11887:202:0;;;;;:::i;:::-;;:::i;19648:143::-;;;;;;;;;;-1:-1:-1;19648:143:0;;;;;:::i;:::-;;:::i;22279:237::-;;;;;;;;;;-1:-1:-1;22279:237:0;;;;;:::i;:::-;;:::i;19799:1170::-;;;;;;;;;;-1:-1:-1;19799:1170:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12418:119::-;;;;;;;;;;;;;:::i;17807:1833::-;;;;;;;;;;-1:-1:-1;17807:1833:0;;;;;:::i;:::-;;:::i;605:41::-;;;;;;;;;;-1:-1:-1;605:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;26144:416;;;;;;;;;;-1:-1:-1;26144:416:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11758:121::-;;;;;;;;;;-1:-1:-1;11758:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;11848:21:0;11819:4;11848:21;;;:11;:21;;;;;;:23;;;11758:121;;;;14740:14:1;;14733:22;14715:41;;14703:2;14688:18;11758:121:0;14575:187:1;3450:30:0;;;;;;;;;;;;;;;;12097:313;;;;;;;;;;;;;:::i;4662:111::-;4735:30;4750:14;4735;:30::i;:::-;4662:111;:::o;3489:106::-;3543:13;3582:5;3575:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3489:106;:::o;653:36::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24230:1906::-;24365:16;24468:19;;;:9;:19;;;;;:43;;;24320;;24365:16;;;;;;;24531:2;24527:6;;24524:38;;;24554:2;24550:6;;24524:38;24574:16;24603:19;;;:9;:19;;;;;;;;:27;;;;-1:-1:-1;;;;;24603:27:0;24593:38;;;;;;;;;24652:10;24659:3;24652:6;:10;:::i;:::-;24640:22;;24716:17;;24698:16;;24691:6;:23;;;;:::i;:::-;:42;;:53;;24739:5;24691:53;;;24734:4;24691:53;24673:71;;24768:17;;24762:4;:23;;:46;;24791:17;;24762:46;;;24786:4;24762:46;24755:53;;24832:16;;24826:4;:22;;:44;;24854:16;;24826:44;;;24849:4;24826:44;24819:51;-1:-1:-1;24883:38:0;24954:11;24959:6;24819:51;24954:11;:::i;:::-;24924:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24924:42:0;;;;;;;;;;;;;;;;-1:-1:-1;24883:83:0;-1:-1:-1;24981:6:0;25002;;;;:::i;:::-;;;;25019:1009;25031:6;25025:4;:12;25019:1009;;25066:29;;;;:23;:29;;;;;:40;;;:50;;;;;:97;;-1:-1:-1;25120:29:0;;;;:23;:29;;;;;:40;;;:43;;25066:97;25063:933;;;25197:31;25231:23;:29;25255:4;25231:29;;;;;;;;;;;25197:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25197:63:0;;;-1:-1:-1;;25197:63:0;;;;;;;;;;;-1:-1:-1;25304:29:0;;;:23;:29;;;;;;:34;;;25197:63;;-1:-1:-1;;25292:46:0;;:11;:46;:::i;:::-;25279:59;;25375:38;25416:505;;;;;;;;25479:4;:19;;;25416:505;;;;25533:4;:15;;;25416:505;;;;25588:9;:26;25598:4;:15;;;25588:26;;;;;;;;;;;:34;;;;;;;;;;-1:-1:-1;;;;;25588:34:0;-1:-1:-1;;;;;25416:505:0;;;;;25655:4;:13;;;25416:505;;;;25711:4;:23;;;25416:505;;;;25763:4;:9;;;25416:505;;;;25892:4;:9;;;25416:505;;;;25808:4;:16;;;25416:505;;;;25858:5;25416:505;;;25375:546;;25951:7;25940:5;25946:1;25940:8;;;;;;;;:::i;:::-;;;;;;:18;;;;25977:3;;;;;:::i;:::-;;;;25178:818;;;25063:933;26010:6;;;;:::i;:::-;;;;25019:1009;;;-1:-1:-1;26053:19:0;;;;:9;:19;;;;;;:31;;;26111:16;;26046:5;;26053:31;;24230:1906;;-1:-1:-1;26103:6:0;;-1:-1:-1;26111:16:0;;-1:-1:-1;24230:1906:0;;-1:-1:-1;;;;24230:1906:0:o;21381:890::-;21483:17;21503:19;;;:9;:19;;;;;;:26;;;;21562:28;;;;;21633:18;;21648:2;21633:18;;;;;;;;;21439:26;;21503;;;;;21562:28;;21483:17;21633:18;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21633:18:0;;;;;;;;;;;;;;;-1:-1:-1;21603:48:0;-1:-1:-1;21675:1:0;21664:573;21680:2;21677:1;:5;21664:573;;21712:13;21728:9;:12;21738:1;21728:12;;;;;;;;;;;21712:28;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21755:29;21787:293;;;;;;;;21818:1;21787:293;;;;21847:1;:6;;;21787:293;;;;21884:1;:10;;;21787:293;;;;21941:1;:10;;;21952:7;21941:18;;;;:::i;:::-;21926:14;:33;:67;;21979:14;21926:67;;;21960:10;;;;:18;;21971:7;21960:18;:::i;:::-;21787:293;;;;22033:1;22019:12;:15;;:45;;;;;;;;;;;;;;;-1:-1:-1;;;22019:45:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22019:45:0;;;;21787:293;;21755:325;-1:-1:-1;21755:325:0;22095:9;22105:3;22107:1;22105;:3;:::i;:::-;22095:14;;;;;;;;:::i;:::-;;;;;;:28;;;;22169:1;:10;;;22180:7;22169:18;;;;:::i;:::-;22153:14;:34;;:72;;22224:1;22153:72;;;22204:10;;;;:18;;22215:7;22204:18;:::i;:::-;22188:35;;:14;:35;:::i;:::-;22138:87;;21697:540;;21683:3;;;;;:::i;:::-;;;;21664:573;;;-1:-1:-1;22254:9:0;21381:890;-1:-1:-1;;;;21381:890:0:o;23682:540::-;23884:23;;;23904:2;23884:23;;;;;;;;;23750:32;;;;;;23853:28;;23884:23;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;23884:23:0;;;;;;;;;;;;-1:-1:-1;;23951:14:0;;;23962:2;23951:14;;;;;;;;;23853:54;;-1:-1:-1;23918:30:0;;23951:14;;;;;;;;;;;-1:-1:-1;;23918:47:0;-1:-1:-1;23988:1:0;23976:159;23994:2;23991:1;:5;;;23976:159;;24038:27;;;;:17;:27;;;;;;;;:30;;;;;;;;;;;24027:41;;;;;;;;;;;;;;;;;;;;;;;;:5;;24033:3;;24066:1;24033:3;:::i;:::-;24027:10;;;;;;;;;;:::i;:::-;;;;;;;;;;;:41;;;;24105:18;;;;;;;:15;:18;;;;;;;24083:16;24100:3;24102:1;24121;24100:3;:::i;:::-;24083:21;;;;;;;;;;:::i;:::-;;;;;;;;;;:40;23998:3;;;;:::i;:::-;;;;23976:159;;;;24155:5;24162:16;24180:9;:19;24190:8;24180:19;;;;;;;;;;;:33;;24147:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23682:540;;;;;:::o;16589:1210::-;16679:10;16651:13;16667:23;;;:11;:23;;;;;;;16724:32;16667:23;16724:22;:32::i;:::-;16701:55;;16784:1;16775:8;:10;16767:36;;;;-1:-1:-1;;;16767:36:0;;;;;;;:::i;:::-;;;;;;;;;16839:6;16822:15;:23;;16814:70;;;;-1:-1:-1;;;16814:70:0;;17189:2:1;16814:70:0;;;17171:21:1;17228:2;17208:18;;;17201:30;17267:34;17247:18;;;17240:62;-1:-1:-1;;;17318:18:1;;;17311:32;17360:19;;16814:70:0;16987:398:1;16814:70:0;16897:39;16908:8;16918:17;;16897:10;:39::i;:::-;16949:14;16976:3;16966:9;:6;16973:2;16966:9;:::i;:::-;:13;;;;:::i;:::-;16949:30;-1:-1:-1;16990:19:0;17012:16;16949:30;17012:6;:16;:::i;:::-;16990:38;;17088:6;17049:9;:19;17059:8;17049:19;;;;;;;;;;;:37;;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;17130:141:0;;;;;;;;;;;17107:20;17130:141;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17130:141:0;;;;;;;;17284:30;;;:20;:30;;;;;17315:9;:19;;;;;;;:36;;;17130:141;;;;17284:30;;17107:20;17315:38;;:36;:38;:::i;:::-;17284:70;;;;;;;;;;;;;;-1:-1:-1;17284:70:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;17371:19:0;;;;:9;:19;;;;;:36;;:38;;;;;;:::i;:::-;;;;-1:-1:-1;17422:8:0;;-1:-1:-1;17443:3:0;17433:9;:6;17440:2;17433:9;:::i;:::-;:13;;;;:::i;:::-;17422:24;;17457:50;17471:8;17481:6;17489:3;17457:50;;;;;;;;;;;;;-1:-1:-1;;;17457:50:0;;;:13;:50::i;:::-;17520:44;;17528:10;;17520:44;;;;;17549:14;;17520:44;;;;17549:14;17528:10;17520:44;;;;;;;;;;;;;;;;;;;;;17585:24;17612:98;;;;;;;;17648:10;:8;:10::i;:::-;17612:98;;17683:15;17612:98;;;;;17741:16;;;-1:-1:-1;17721:37:0;;;:19;:37;;;;;:41;;;;;;;;;;;;;;;;17773:18;;17585:125;;-1:-1:-1;17741:16:0;17773:18;;;:::i;:::-;;;;;;16640:1159;;;;;;;16589:1210;:::o;20977:396::-;21076:23;21102:19;;;:9;:19;;;;;;;;:29;;21076:55;;;;;;;;;;;;;;;;;21033:25;;21076:23;:55;;21102:29;21076:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21142:30;21188:9;:16;21173:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21142:63;;21222:6;21218:118;21234:9;:16;21232:1;:18;21218:118;;;21299:25;21311:9;21321:1;21311:12;;;;;;;;:::i;:::-;;;;;;;21299:11;:25::i;:::-;21281:12;21294:1;21281:15;;;;;;;;:::i;:::-;;;;;;:43;;;;21252:3;;;;;:::i;:::-;;;;21218:118;;;-1:-1:-1;21353:12:0;20977:396;-1:-1:-1;;;20977:396:0:o;22524:817::-;22605:4;22642:19;;;:9;:19;;;;;:31;;;;22709:43;;;;;22780:17;;22773:24;;;:48;;22804:17;;22773:48;;;22798:5;22773:48;22765:56;;22865:16;;22857:7;:24;;;;:::i;:::-;22850:5;:31;;22842:104;;;;-1:-1:-1;;;22842:104:0;;20018:2:1;22842:104:0;;;20000:21:1;20057:2;20037:18;;;20030:30;20096:34;20076:18;;;20069:62;20167:30;20147:18;;;20140:58;20215:19;;22842:104:0;19816:424:1;22842:104:0;22959:16;22988:19;;;:9;:19;;;;;;;;:27;;;;-1:-1:-1;;;;;22988:27:0;22978:38;;;;;;;;23027:282;23041:5;23033:7;:13;23027:282;;;23076:32;;;;:23;:32;;;;;:43;;;:53;;23072:202;;23163:10;23188:32;;;:23;:32;;;;;:37;;;23176:49;;:11;:49;:::i;:::-;23163:62;-1:-1:-1;23244:14:0;23163:62;23244:14;;:::i;:::-;;;23144:130;23072:202;23288:9;;;;:::i;:::-;;;;23027:282;;;-1:-1:-1;23326:7:0;;22524:817;-1:-1:-1;;;;22524:817:0:o;5161:1097::-;5231:12;5246:19;;;:9;:19;;;;;:43;;;5317:17;;5310:24;;;:48;;5341:17;;5310:48;;;5335:5;5310:48;5302:56;-1:-1:-1;5394:11:0;:7;5402:3;5394:11;:::i;:::-;5387:5;:18;;:36;;5412:11;:7;5420:3;5412:11;:::i;:::-;5387:36;;;5406:5;5387:36;5436:16;5465:19;;;:9;:19;;;;;;;;:27;;;;-1:-1:-1;;;;;5465:27:0;5455:38;;;;;;;;5379:44;;-1:-1:-1;5504:460:0;5518:5;5510:7;:13;5504:460;;;5553:9;;5566:1;5553:14;5549:139;;5621:32;;;;:23;:32;;;;;;;;:51;;;5588:19;;;:9;:19;;;;;:31;;:84;;5621:51;;5588:31;;:84;;5621:51;;5588:84;:::i;:::-;;;;-1:-1:-1;;5549:139:0;5706:32;;;;:23;:32;;;;;:43;;;:53;;5702:227;;5794:10;5819:32;;;:23;:32;;;;;:37;;;5807:49;;:11;:49;:::i;:::-;5794:62;;5908:5;5875:9;:19;5885:8;5875:19;;;;;;;;;;;:31;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;;5702:227:0;5943:9;;;;:::i;:::-;;;;5504:460;;;5974:19;;;;:9;:19;;;;;;:43;;:49;;;6071:98;;;;;;;;;6107:10;:8;:10::i;:::-;6071:98;;6142:15;6071:98;;;;;6200:16;;;-1:-1:-1;6180:37:0;;;:19;:37;;;;;:41;;;;;;;;;;;;;;;;6232:18;;6044:125;;-1:-1:-1;6200:16:0;6232:18;;;:::i;:::-;;;;;;5220:1038;;;5161:1097;;:::o;4781:372::-;4862:10;11819:4;11848:21;;;:11;:21;;;;;;4883:55;;;;-1:-1:-1;;;4883:55:0;;;;;;;:::i;:::-;4967:1;4957:9;:11;4949:39;;;;-1:-1:-1;;;4949:39:0;;20447:2:1;4949:39:0;;;20429:21:1;20486:2;20466:18;;;20459:30;-1:-1:-1;;;20505:18:1;;;20498:45;20560:18;;4949:39:0;20245:339:1;4949:39:0;5019:11;5007:9;:24;;4999:64;;;;-1:-1:-1;;;4999:64:0;;20791:2:1;4999:64:0;;;20773:21:1;20830:2;20810:18;;;20803:30;20869:29;20849:18;;;20842:57;20916:18;;4999:64:0;20589:351:1;4999:64:0;-1:-1:-1;;;;;5099:27:0;;;;;;:11;:27;;;;;;5076:69;;5128:9;;5076:22;:69::i;3607:110::-;3663:13;3702:7;3695:14;;;;;:::i;26572:886::-;26640:32;26690:19;26730:8;:5;26736:2;26730:8;:::i;:::-;:11;;26739:2;26730:11;:::i;:::-;:14;;26742:2;26730:14;:::i;:::-;26712:32;;:15;:32;:::i;:::-;26690:54;;26757:8;26784:6;26808:1;26791:16;;:18;;;;:::i;:::-;26784:25;;26780:183;26814:1;26811;:4;26780:183;;26849:22;;;;:19;:22;;;;;:32;;;:48;-1:-1:-1;26846:106:0;;26931:5;;;;:::i;:::-;;;;26846:106;26817:3;;;;:::i;:::-;;;;26780:183;;;;26975:8;26992:1;26987:4;:6;:15;;26999:3;26987:15;;;26994:4;26987:15;26975:28;-1:-1:-1;27014:9:0;27026:7;26975:28;27026:3;:7;:::i;:::-;27014:19;-1:-1:-1;27061:7:0;;:14;;27071:4;27061:14;;;27069:1;27061:14;27054:21;;27126:3;27104:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;27104:26:0;;;;;;;;;;;;;;;;27096:34;;27143:8;27170:6;27194:1;27177:16;;:18;;;;:::i;:::-;27170:25;;27166:258;27200:4;27197:1;:7;27166:258;;27242:22;;;;:19;:22;;;;;:32;;;:48;-1:-1:-1;27239:160:0;;27337:22;;;;:19;:22;;;;;;;;;27324:35;;;;;;;;;;;;;;;;;;;:12;;:7;;27332:3;;27324:12;;;;;;:::i;:::-;;;;;;:35;;;;27378:5;;;;;:::i;:::-;;;;27239:160;27206:7;27209:4;27206:7;;:::i;:::-;;;27166:258;;;;27436:14;;;;;26572:886;;;;:::o;23349:325::-;23422:4;23498:19;;;:9;:19;;;;;;;;:33;;23469:62;;;;;;;;;;;;;;;;;23422:4;;;;23469:62;23498:33;23469:62;;;23498:33;23469:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23546:6;23542:100;23557:12;:19;23555:1;:21;23542:100;;;23615:12;23628:1;23615:15;;;;;;;;:::i;:::-;;;;;;;23606:24;;;;;:::i;:::-;;-1:-1:-1;23577:3:0;;;;:::i;:::-;;;;23542:100;;;-1:-1:-1;23659:7:0;;23349:325;-1:-1:-1;;;23349:325:0:o;11887:202::-;11949:4;-1:-1:-1;;11974:10:0;:19;11971:110;;-1:-1:-1;12002:21:0;;11887:202;-1:-1:-1;11887:202:0:o;11971:110::-;12068:13;:11;:13::i;:::-;12046:21;:11;12059:7;12046:21;:::i;:::-;:35;;;;:::i;:::-;12039:42;11887:202;-1:-1:-1;;11887:202:0:o;19648:143::-;19727:10;1084:42;19727:17;19719:26;;;;;;19756:16;:27;19648:143::o;22279:237::-;22347:4;22471:19;;;:9;:19;;;;;:37;;;22431;22481:8;22431:27;:37::i;:::-;22376:52;22400:8;22410:17;;22376:23;:52::i;:::-;:92;;;;:::i;:::-;:132;;;;:::i;19799:1170::-;19855:24;;:::i;:::-;19897:21;19921:19;;;:9;:19;;;;;;;;19897:43;;;;;;;;;;;;;;;-1:-1:-1;;;;;19897:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19921:19;;19897:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19951:30;19984:9;:27;19994:9;:16;;;19984:27;;;;;;;;;;;;;:32;;19951:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20027:27;20074:1;20057:9;:16;;;:18;;;:56;;;;;;;;;;;;;;;;;20076:9;:29;20086:9;:16;;;20103:1;20086:18;;;;:::i;:::-;20076:29;;;;;;;;;;;;;:34;;20057:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20027:86;;20124:33;20160:9;:29;20170:9;:16;;;20187:1;20170:18;;;;:::i;:::-;20160:29;;;;;;;;;;;;;:38;;;20124:74;;20209:14;20226:13;:11;:13::i;:::-;20281:17;;;;;-1:-1:-1;;;;;20271:28:0;20250:18;20271:28;;;;;;;;;;;20209:30;;-1:-1:-1;20337:37:0;20365:8;20337:27;:37::i;:::-;20310:64;;20385:22;20410:52;20434:8;20444:17;;20410:23;:52::i;:::-;20495:443;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20495:443:0;;;;;;;;;;;;;;;;;;;20806:16;;;;20495:443;;;;;;;;;;;;;;;;;;;;;;;;19799:1170;-1:-1:-1;;19799:1170:0:o;12418:119::-;12461:4;12483:10;12496;:8;:10::i;17807:1833::-;17901:10;17873:13;17889:23;;;:11;:23;;;;;;17931:10;17923:36;;;;-1:-1:-1;;;17923:36:0;;;;;;;:::i;:::-;17970:13;18004:19;;;:9;:19;;;;;:32;;;17986:50;;:15;:50;:::i;:::-;17970:66;;18067:8;18055;:20;;18047:64;;;;-1:-1:-1;;;18047:64:0;;21356:2:1;18047:64:0;;;21338:21:1;21395:2;21375:18;;;21368:30;21434:33;21414:18;;;21407:61;21485:18;;18047:64:0;21154:355:1;18047:64:0;18140:10;18130:9;:21;;;;;;;;;;;:34;-1:-1:-1;18130:34:0;18122:74;;;;-1:-1:-1;;;18122:74:0;;21716:2:1;18122:74:0;;;21698:21:1;21755:2;21735:18;;;21728:30;21794:29;21774:18;;;21767:57;21841:18;;18122:74:0;21514:351:1;18122:74:0;18209:16;18228:26;18242:11;18228:13;:26::i;:::-;18209:45;;18298:11;18275:21;:34;;18267:77;;;;-1:-1:-1;;;18267:77:0;;22072:2:1;18267:77:0;;;22054:21:1;22111:2;22091:18;;;22084:30;22150:32;22130:18;;;22123:60;22200:18;;18267:77:0;21870:354:1;18267:77:0;18428:10;18357:24;18418:21;;;;;;;;;;;18384:2;;18443:3;;18418:23;;18440:1;18418:23;:::i;:::-;18417:29;;;;:::i;:::-;18402:11;:45;:96;;;;-1:-1:-1;18478:10:0;18468:9;:21;;;;;;;;;;;18494:3;;18468:24;;18490:2;18468:24;:::i;:::-;18467:30;;;;:::i;:::-;18451:11;:47;;18402:96;18399:287;;;-1:-1:-1;18546:2:0;18399:287;;;18604:10;18594:9;:21;;;;;;;;;;;18620:3;;18594:24;;18616:2;18594:24;:::i;:::-;18593:30;;;;:::i;:::-;18578:11;:46;18575:111;;;-1:-1:-1;18672:2:0;18575:111;18698:14;18749:3;18716:31;18728:19;18716:11;:31;:::i;:::-;18715:37;;;;:::i;:::-;18698:54;-1:-1:-1;18763:19:0;18785:21;18698:54;18785:11;:21;:::i;:::-;18763:43;;18827:20;18850:160;;;;;;;;18884:11;18850:160;;;;18922:11;18850:160;;;;18953:13;:11;:13::i;:::-;18850:160;;;;;;;;;;;;;-1:-1:-1;;;18850:160:0;;;;;;;;;;;;-1:-1:-1;19023:30:0;;;:20;:30;;;;;19054:9;:19;;;;;;;:36;;;18827:183;;-1:-1:-1;18827:183:0;;19023:30;;-1:-1:-1;;19054:38:0;;;:::i;:::-;19023:70;;;;;;;;;;;;;;-1:-1:-1;19023:70:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;19110:19:0;;;;:9;:19;;;;;:36;;:38;;;;;;:::i;:::-;;;;-1:-1:-1;;19161:19:0;;;;:9;:19;;;;;19196:15;19161:32;;;;:50;19245:17;;19224:39;;19171:8;;19224:10;:39::i;:::-;19276:30;19282:10;19294:11;19276:5;:30::i;:::-;19337:11;19322:13;;:26;19319:159;;19389:11;19374:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;19319:159:0;;-1:-1:-1;19319:159:0;;19465:1;19451:13;:15;19319:159;19490:44;;19498:10;;19490:44;;;;;19519:14;;19490:44;;;;19519:14;19498:10;19490:44;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19550:11:0;;19547:86;;19587:34;;1084:42;;19587:34;;;;;19611:9;;19587:34;;;;19611:9;1084:42;19587:34;;;;;;;;;;;;;;;;;;;;;19547:86;17862:1778;;;;;;;17807:1833;:::o;26144:416::-;26260:21;26284:19;;;:9;:19;;;;;:36;;;26209:33;;26284:36;26346:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26346:35:0;;;;;;;;;;;;;;;;-1:-1:-1;26333:48:0;-1:-1:-1;26405:1:0;26394:127;26411:16;26408:1;:19;26394:127;;26476:20;:30;26497:8;26476:30;;;;;;;;;;;:33;26507:1;26476:33;;;;;;;;;;;26458:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;26473:1;26471;:3;;;;:::i;:::-;26458:17;;;;;;;;:::i;:::-;;;;;;:51;;;;26429:3;;;;;:::i;:::-;;;;26394:127;;;;26533:19;26144:416;;;:::o;12097:313::-;12137:4;12179:16;12163:13;;:32;12159:244;;;12263:6;12249:13;;12247:1;:15;;;;:::i;:::-;:22;;;;:::i;:::-;12236:34;;12237:7;12236:34;:::i;:::-;12219:52;;:15;:52;:::i;:::-;12212:59;;12097:313;:::o;12159:244::-;12325:7;12309:13;;:24;;:82;;-1:-1:-1;12375:16:0;;;12097:313::o;12309:82::-;12361:13;;12334:16;;:26;;12352:7;12334:26;:::i;:::-;:40;;;;:::i;6266:1399::-;6365:10;6396:9;6388:39;;;;-1:-1:-1;;;6388:39:0;;20447:2:1;6388:39:0;;;20429:21:1;20486:2;20466:18;;;20459:30;-1:-1:-1;;;20505:18:1;;;20498:45;20560:18;;6388:39:0;20245:339:1;6388:39:0;6458:11;6446:9;:24;;6438:64;;;;-1:-1:-1;;;6438:64:0;;20791:2:1;6438:64:0;;;20773:21:1;20830:2;20810:18;;;20803:30;20869:29;20849:18;;;20842:57;20916:18;;6438:64:0;20589:351:1;6438:64:0;-1:-1:-1;;;;;11848:21:0;;11819:4;11848:21;;;:11;:21;;;;;;6515:1143;;-1:-1:-1;;;;;11848:21:0;;11819:4;11848:21;;;:11;:21;;;;;;6578:59;;;;-1:-1:-1;;;6578:59:0;;22431:2:1;6578:59:0;;;22413:21:1;22470:2;22450:18;;;22443:30;-1:-1:-1;;;22489:18:1;;;22482:46;22545:18;;6578:59:0;22229:340:1;6578:59:0;-1:-1:-1;;;;;6671:28:0;;6654:14;6671:28;;;:11;:28;;;;;;6722:9;;6671:28;;6654:14;6722:11;;6732:1;6722:11;:::i;:::-;6714:19;;6750:13;6766:601;;;;;;;;6793:2;6766:601;;;;6822:14;-1:-1:-1;;;;;6766:601:0;;;;;6865:9;6766:601;;;;6902:1;6766:601;;;;6939:1;6766:601;;;;6970:1;6766:601;;;;6997:1;6766:601;;;;;;7038:1;7027:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7027:13:0;-1:-1:-1;6766:601:0;;7071:1;6766:601;;;;;7105:14;;7116:2;7105:14;;;;;;;;6766:601;;;;;7105:14;;;;;;;;;;;-1:-1:-1;;;6766:601:0;;7156:1;6766:601;;;;;;;7200:17;;6766:601;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7384:13;;;:9;:13;;;;;;;:15;;;;;;;;;;;;;-1:-1:-1;;;;;;7384:15:0;-1:-1:-1;;;;;7384:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7384:15:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;7384:15:0;;:13;;:15;;;;;;;;;;;:::i;:::-;-1:-1:-1;7384:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7384:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7414:27:0;;-1:-1:-1;7414:27:0;;;:11;:27;;;;;:32;;;7463:11;;;7384:15;7463:11;;;:::i;:::-;;;;-1:-1:-1;;7491:20:0;;;;:9;:20;;;;;;;:30;;:39;;;;;;;;;;;;;;;;;;7547:43;;7527:2;;7574:9;;7547:22;:43::i;:::-;6549:1053;;;6329:1336;6266:1399;:::o;6515:1143::-;7631:15;:13;:15::i;:::-;6329:1336;6266:1399;:::o;10964:645::-;11104:12;;11076:10;;11104:14;11101:80;;11157:12;;11152:17;;:4;:17;:::i;:::-;11144:25;;11101:80;11226:282;;;;;;;;11277:17;;11226:282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11458:12;;11226:282;;;;11191:32;11521:42;;;:23;:42;;;;;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11226:282;;;;11521:50;;;;;;;;:::i;:::-;-1:-1:-1;11521:50:0;;;;;;;;;;;11582:17;:19;;;:17;:19;;;:::i;:::-;;;;;;11065:544;;10964:645;;;;:::o;7673:2685::-;7783:10;7796;:8;:10::i;:::-;7783:23;-1:-1:-1;7817:11:0;7850;7783:23;7832:9;:6;7839:2;7832:9;:::i;:::-;:15;;;;:::i;:::-;7831:31;;;;:::i;:::-;7817:45;;7907:6;7875:9;:19;7885:8;7875:19;;;;;;;;;;;:30;;;:38;;;;;;;:::i;:::-;;;;;;;;7926:39;7937:8;7947:17;;7926:10;:39::i;:::-;8001:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8001:141:0;;;;;;;;7978:20;8155:30;;;:20;:30;;;;;8186:9;:19;;;;;;;:36;;;8001:141;;;;8155:30;;8186:38;;:36;:38;:::i;:::-;8155:70;;;;;;;;;;;;;;-1:-1:-1;8155:70:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;8242:19:0;;;;:9;:19;;;;;:36;;:38;;;;;;:::i;:::-;;;;;;8297:6;8293:2;;:10;;;;;;;:::i;:::-;;;;-1:-1:-1;;8316:11:0;8353:19;;;8328:1;8353:19;;;;;;;;:29;;;8393:1396;8399:7;;8393:1396;;8432:16;;;;:9;:16;;;;;:25;;:33;;8459:6;;8432:16;:33;;8459:6;;8432:33;:::i;:::-;;;;-1:-1:-1;;8494:16:0;;;;:9;:16;;;;;:33;;:41;;8529:6;;8494:16;:41;;8529:6;;8494:41;:::i;:::-;;;;-1:-1:-1;;8558:1:0;8552:7;;;;8549:75;;;8574:24;;;;:17;:24;;;;;;;;:31;;;;;;;;;;:42;;:50;;8618:6;;8574:24;:50;;8618:6;;8574:50;:::i;:::-;;;;-1:-1:-1;;8549:75:0;8642:18;8639:116;;;8694:24;;;;:17;:24;;;;;;;;:31;;;;;;;;;;:45;;;;;;:::i;:::-;;;;;;8639:116;8779:2;8772:5;:9;;;8769:894;;8825:17;8865:16;;;:9;:16;;;;;:23;;;:30;;;;:23;;:30;8862:785;;8959:22;;;;;;;:15;:22;;;;;;8984:7;;8952:29;;:6;:29;:::i;:::-;8951:41;;;;:::i;:::-;8936:56;;9018:5;:8;;9025:1;9018:8;9015:467;;9076:17;9094:16;;;:9;:16;;;;;;;;:23;;;;;9167:26;;;:13;:26;;;;;;;9196:7;;9160:33;;:6;:33;:::i;:::-;9159:45;;;;:::i;:::-;9144:60;;9272:12;9231:9;:16;9241:5;9231:16;;;;;;;;;;;:30;;9268:1;9262:5;:7;;;;:::i;:::-;9231:39;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;9317:11:0;;-1:-1:-1;8862:785:0;;-1:-1:-1;8862:785:0;9015:467;9446:12;9405:9;:16;9415:5;9405:16;;;;;;;;;;;:30;;9442:1;9436:5;:7;;;;:::i;:::-;9405:39;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;8862:785:0;;-1:-1:-1;8862:785:0;;9578:9;:12;;;;;;;;9615;;9578:26;;9605:7;;:5;:7;:::i;:::-;9578:35;;;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;8862:785:0;8796:867;8769:894;9688:17;9699:5;9688:10;:17::i;:::-;9729:16;;;;:9;:16;;;;;:26;;;9770:7;;;;:::i;:::-;;;;8393:1396;;;9814:2;9807:5;:9;;;9801:200;;9870:22;;;9842:17;9870:22;;;:15;:22;;;;;;9895:7;;9863:29;;:6;:29;:::i;:::-;9862:41;;;;:::i;:::-;9918:9;:12;;;;;;;;9842:61;;-1:-1:-1;9842:61:0;;9918:26;;9945:7;;:5;:7;:::i;:::-;9918:35;;;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;9982:7:0;;-1:-1:-1;9982:7:0;;;:::i;:::-;;;;9827:174;9801:200;;;10011:57;10025:8;10035:6;10053:3;10043:9;10035:6;10050:2;10043:9;:::i;:::-;:13;;;;:::i;:::-;10011:57;;;;;;;;;;;;;-1:-1:-1;;;10011:57:0;;;:13;:57::i;:::-;10082:9;;10095:1;10082:14;10079:84;;10112:39;10123:8;10133:17;;10112:10;:39::i;:::-;10181:19;;;;:9;:19;;;;;;;;:27;;10175:42;;-1:-1:-1;;;;;10181:27:0;10210:6;10175:5;:42::i;:::-;10256:3;10246:9;:6;10253:2;10246:9;:::i;:::-;:13;;;;:::i;:::-;10230;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;10323:22:0;;1174:42;;10281:69;;10346:3;;10316:29;;:6;:29;:::i;:::-;:33;;;;:::i;:::-;10281:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4190:464;-1:-1:-1;;;;;4280:21:0;;4272:67;;;;-1:-1:-1;;;4272:67:0;;22776:2:1;4272:67:0;;;22758:21:1;22815:2;22795:18;;;22788:30;22854:34;22834:18;;;22827:62;-1:-1:-1;;;22905:18:1;;;22898:31;22946:19;;4272:67:0;22574:397:1;4272:67:0;-1:-1:-1;;;;;4377:18:0;;4352:22;4377:18;;;;;;;;;;;4414:24;;;;4406:71;;;;-1:-1:-1;;;4406:71:0;;23178:2:1;4406:71:0;;;23160:21:1;23217:2;23197:18;;;23190:30;23256:34;23236:18;;;23229:62;-1:-1:-1;;;23307:18:1;;;23300:32;23349:19;;4406:71:0;22976:398:1;4406:71:0;4510:6;4496:12;;:20;;4488:58;;;;-1:-1:-1;;;4488:58:0;;23581:2:1;4488:58:0;;;23563:21:1;23620:2;23600:18;;;23593:30;23659:27;23639:18;;;23632:55;23704:18;;4488:58:0;23379:349:1;4488:58:0;4580:23;4597:6;4580:14;:23;:::i;:::-;-1:-1:-1;;;;;4559:18:0;;:9;:18;;;;;;;;;;:44;;;;4624:12;:22;;4640:6;;4559:9;4624:22;;4640:6;;4624:22;:::i;:::-;;;;-1:-1:-1;;;;;4190:464:0:o;10367:471::-;10428:17;10448:20;;;:9;:20;;;;;;;:27;;;;;;10428:17;10503:13;;10448:27;;10503:13;:::i;:::-;10571:19;;;;;;;:9;:19;;;;;:28;;;10486:30;;-1:-1:-1;10571:38:0;;10601:7;10571:38;:::i;:::-;10532:20;;;;:9;:20;;;;;:37;;;:77;;;;:153;;;10683:2;10671:11;:14;;;10532:153;10529:302;;;10757:1;10719:20;;;:9;:20;;;;;:37;;;:39;;;;10777:27;;:38;;-1:-1:-1;;10777:38:0;;;;;;;10529:302;10417:421;;10367:471;:::o;3953:229::-;-1:-1:-1;;;;;4043:21:0;;4035:65;;;;-1:-1:-1;;;4035:65:0;;23935:2:1;4035:65:0;;;23917:21:1;23974:2;23954:18;;;23947:30;24013:33;23993:18;;;23986:61;24064:18;;4035:65:0;23733:355:1;4035:65:0;4129:6;4113:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;4146:18:0;;:9;:18;;;;;;;;;;:28;;4168:6;;4146:9;:28;;4168:6;;4146:28;:::i;:::-;;;;-1:-1:-1;;;;3953:229:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:286:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:1;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:1:o;305:472::-;347:3;385:5;379:12;412:6;407:3;400:19;437:1;447:162;461:6;458:1;455:13;447:162;;;523:4;579:13;;;575:22;;569:29;551:11;;;547:20;;540:59;476:12;447:162;;;627:6;624:1;621:13;618:87;;;693:1;686:4;677:6;672:3;668:16;664:27;657:38;618:87;-1:-1:-1;759:2:1;738:15;-1:-1:-1;;734:29:1;725:39;;;;766:4;721:50;;305:472;-1:-1:-1;;305:472:1:o;782:220::-;931:2;920:9;913:21;894:4;951:45;992:2;981:9;977:18;969:6;951:45;:::i;1007:180::-;1066:6;1119:2;1107:9;1098:7;1094:23;1090:32;1087:52;;;1135:1;1132;1125:12;1087:52;-1:-1:-1;1158:23:1;;1007:180;-1:-1:-1;1007:180:1:o;1192:362::-;1397:6;1386:9;1379:25;1440:2;1435;1424:9;1420:18;1413:30;1360:4;1460:45;1501:2;1490:9;1486:18;1478:6;1460:45;:::i;:::-;1452:53;;1541:6;1536:2;1525:9;1521:18;1514:34;1192:362;;;;;;:::o;1741:248::-;1809:6;1817;1870:2;1858:9;1849:7;1845:23;1841:32;1838:52;;;1886:1;1883;1876:12;1838:52;-1:-1:-1;;1909:23:1;;;1979:2;1964:18;;;1951:32;;-1:-1:-1;1741:248:1:o;2199:2031::-;2527:4;2556:3;2597:2;2586:9;2582:18;2627:2;2616:9;2609:21;2650:6;2685;2679:13;2716:6;2708;2701:22;2742:3;2732:13;;2776:2;2765:9;2761:18;2754:25;;2838:2;2828:6;2825:1;2821:14;2810:9;2806:30;2802:39;2860:4;2899:2;2891:6;2887:15;2920:1;2930:1084;2944:6;2941:1;2938:13;2930:1084;;;3037:3;3033:8;3021:9;3013:6;3009:22;3005:37;3000:3;2993:50;3072:6;3066:13;3102:6;3142:2;3136:9;3128:6;3121:25;3197:2;3193;3189:11;3183:18;3178:2;3170:6;3166:15;3159:43;3225:4;3276:2;3272;3268:11;3262:18;3293:49;3338:2;3330:6;3326:15;3312:12;-1:-1:-1;;;;;2060:31:1;2048:44;;1994:104;3293:49;-1:-1:-1;;3365:4:1;3412:11;;;3406:18;3389:15;;;3382:43;3448:4;3495:11;;;3489:18;3472:15;;;3465:43;3551:11;;;3545:18;3528:15;;;3521:43;3605:11;;;3599:18;3637:15;;;3630:27;;;3684:50;3718:15;;;3599:18;3684:50;:::i;:::-;3757:4;3804:11;;;3798:18;3781:15;;;3774:43;3841:6;3891:12;;;3885:19;3867:16;;;;3860:45;;;;-1:-1:-1;;3992:12:1;;;;3957:15;;;;2966:1;2959:9;2930:1084;;;-1:-1:-1;;4053:18:1;;4046:34;;;2173:13;;2166:21;4128:4;4113:20;;2154:34;4031:6;-1:-1:-1;4089:45:1;;-1:-1:-1;;;;2103:91:1;4089:45;4165:4;4150:20;;4143:36;;;;4210:4;4195:20;4188:36;2199:2031;;-1:-1:-1;;;2199:2031:1:o;4504:1398::-;4696:4;4725:2;4765;4754:9;4750:18;4795:2;4784:9;4777:21;4818:6;4853;4847:13;4884:6;4876;4869:22;4910:2;4900:12;;4943:2;4932:9;4928:18;4921:25;;5005:2;4995:6;4992:1;4988:14;4977:9;4973:30;4969:39;5043:2;5035:6;5031:15;5064:1;5074:799;5088:6;5085:1;5082:13;5074:799;;;5181:2;5177:7;5165:9;5157:6;5153:22;5149:36;5144:3;5137:49;5215:6;5209:13;5245:4;5283:2;5277:9;5269:6;5262:25;5334:2;5330;5326:11;5320:18;5375:2;5370;5362:6;5358:15;5351:27;5405:48;5449:2;5441:6;5437:15;5423:12;5405:48;:::i;:::-;5391:62;;;5504:2;5500;5496:11;5490:18;5485:2;5477:6;5473:15;5466:43;5532:4;5587:2;5583;5579:11;5573:18;5568:2;5560:6;5556:15;5549:43;;5615:4;5668:2;5664;5660:11;5654:18;5632:40;;5721:6;5713;5709:19;5704:2;5696:6;5692:15;5685:44;;5752:41;5786:6;5770:14;5752:41;:::i;:::-;5851:12;;;;5742:51;-1:-1:-1;;;5816:15:1;;;;5110:1;5103:9;5074:799;;;-1:-1:-1;5890:6:1;;4504:1398;-1:-1:-1;;;;;;;;4504:1398:1:o;6319:435::-;6372:3;6410:5;6404:12;6437:6;6432:3;6425:19;6463:4;6492:2;6487:3;6483:12;6476:19;;6529:2;6522:5;6518:14;6550:1;6560:169;6574:6;6571:1;6568:13;6560:169;;;6635:13;;6623:26;;6669:12;;;;6704:15;;;;6596:1;6589:9;6560:169;;;-1:-1:-1;6745:3:1;;6319:435;-1:-1:-1;;;;;6319:435:1:o;6759:1100::-;7165:2;7177:21;;;7247:13;;7150:18;;;7269:22;;;7117:4;;7345;;7322:3;7307:19;;;7372:15;;;7117:4;7415:196;7429:6;7426:1;7423:13;7415:196;;;7478:51;7525:3;7516:6;7510:13;6239:12;;6227:25;;6301:4;6290:16;;;6284:23;6268:14;;6261:47;6160:154;7478:51;7558:4;7549:14;;;;;7586:15;;;;7451:1;7444:9;7415:196;;;7419:3;;;7656:9;7651:3;7647:19;7642:2;7631:9;7627:18;7620:47;7690:41;7727:3;7719:6;7690:41;:::i;:::-;7676:55;;;7781:9;7773:6;7769:22;7762:4;7751:9;7747:20;7740:52;7809:44;7846:6;7838;7809:44;:::i;:::-;7801:52;6759:1100;-1:-1:-1;;;;;;6759:1100:1:o;7864:1412::-;7911:3;7939:6;7972:5;7966:12;7961:3;7954:25;8025:4;8018:5;8014:16;8008:23;8040:48;8082:4;8077:3;8073:14;8059:12;-1:-1:-1;;;;;2060:31:1;2048:44;;1994:104;8040:48;;8137:4;8130:5;8126:16;8120:23;8113:4;8108:3;8104:14;8097:47;8193:4;8186:5;8182:16;8176:23;8169:4;8164:3;8160:14;8153:47;8249:4;8242:5;8238:16;8232:23;8225:4;8220:3;8216:14;8209:47;8305:4;8298:5;8294:16;8288:23;8281:4;8276:3;8272:14;8265:47;8360:4;8353:5;8349:16;8343:23;8375:48;8417:4;8412:3;8408:14;8392;4302:4;4291:16;4279:29;;4235:75;8375:48;;8471:4;8464:5;8460:16;8454:23;8509:2;8502:4;8497:3;8493:14;8486:26;8533:58;8587:2;8582:3;8578:12;8562:14;8533:58;:::i;:::-;8521:70;;;8610:6;8663:2;8656:5;8652:14;8646:21;8641:2;8636:3;8632:12;8625:43;;8687:6;8741:2;8734:5;8730:14;8724:21;8785:3;8779:4;8775:14;8770:2;8765:3;8761:12;8754:36;8813:50;8858:4;8842:14;8813:50;:::i;:::-;8882:6;8924:14;;;8918:21;8904:12;;;8897:43;8959:6;9001:14;;;8995:21;8981:12;;;8974:43;9036:6;9078:14;;;9072:21;9058:12;;;9051:43;9113:6;9155:14;;;9149:21;9135:12;;;9128:43;9190:6;9232:14;;;9226:21;9212:12;;;;9205:43;;;;-1:-1:-1;8799:64:1;;7864:1412;-1:-1:-1;;;7864:1412:1:o;9281:936::-;9332:3;9360:6;9401:5;9395:12;9428:2;9423:3;9416:15;9452:50;9498:2;9493:3;9489:12;9475;9452:50;:::i;:::-;9440:62;;;9550:4;9543:5;9539:16;9533:23;9598:3;9592:4;9588:14;9581:4;9576:3;9572:14;9565:38;9626:39;9660:4;9644:14;9626:39;:::i;:::-;9612:53;;;9713:4;9706:5;9702:16;9696:23;9763:3;9755:6;9751:16;9744:4;9739:3;9735:14;9728:40;9791:41;9825:6;9809:14;9791:41;:::i;:::-;9777:55;;;9881:4;9874:5;9870:16;9864:23;9857:4;9852:3;9848:14;9841:47;9937:4;9930:5;9926:16;9920:23;9913:4;9908:3;9904:14;9897:47;9993:4;9986:5;9982:16;9976:23;9969:4;9964:3;9960:14;9953:47;10049:4;10042:5;10038:16;10032:23;10025:4;10020:3;10016:14;10009:47;10105:4;10098:5;10094:16;10088:23;10081:4;10076:3;10072:14;10065:47;10131:6;10184:2;10177:5;10173:14;10167:21;10162:2;10157:3;10153:12;10146:43;;10205:6;10198:13;;;9281:936;;;;:::o;10222:842::-;10414:4;10443:2;10483;10472:9;10468:18;10513:2;10502:9;10495:21;10536:6;10571;10565:13;10602:6;10594;10587:22;10640:2;10629:9;10625:18;10618:25;;10702:2;10692:6;10689:1;10685:14;10674:9;10670:30;10666:39;10652:53;;10740:2;10732:6;10728:15;10761:1;10771:264;10785:6;10782:1;10779:13;10771:264;;;10878:2;10874:7;10862:9;10854:6;10850:22;10846:36;10841:3;10834:49;10906;10948:6;10939;10933:13;10906:49;:::i;:::-;10896:59;-1:-1:-1;11013:12:1;;;;10978:15;;;;10807:1;10800:9;10771:264;;;-1:-1:-1;11052:6:1;;10222:842;-1:-1:-1;;;;;;;10222:842:1:o;12360:742::-;12595:2;12647:21;;;12717:13;;12620:18;;;12739:22;;;12566:4;;12595:2;12780;;12798:18;;;;12839:15;;;12566:4;12882:194;12896:6;12893:1;12890:13;12882:194;;;12945:51;12992:3;12983:6;12977:13;6239:12;;6227:25;;6301:4;6290:16;;;6284:23;6268:14;;6261:47;6160:154;12945:51;13016:12;;;;13051:15;;;;12918:1;12911:9;12882:194;;;-1:-1:-1;13093:3:1;;12360:742;-1:-1:-1;;;;;;;12360:742:1:o;13107:259::-;13286:2;13275:9;13268:21;13249:4;13306:54;13356:2;13345:9;13341:18;13333:6;13306:54;:::i;13371:1199::-;13569:4;13598:2;13638;13627:9;13623:18;13668:2;13657:9;13650:21;13691:6;13726;13720:13;13757:6;13749;13742:22;13783:2;13773:12;;13816:2;13805:9;13801:18;13794:25;;13878:2;13868:6;13865:1;13861:14;13850:9;13846:30;13842:39;13916:2;13908:6;13904:15;13937:1;13947:594;13961:6;13958:1;13955:13;13947:594;;;14026:22;;;-1:-1:-1;;14022:36:1;14010:49;;14082:13;;14150:9;;14135:25;;14203:11;;;14197:18;14180:15;;;14173:43;14259:11;;;14253:18;14236:15;;;14229:43;14295:4;14338:11;;;14332:18;14118:4;14370:15;;;14363:27;;;14332:18;14413:48;14445:15;;;14332:18;14413:48;:::i;:::-;14519:12;;;;14403:58;-1:-1:-1;;;14484:15:1;;;;13983:1;13976:9;13947:594;;14767:380;14846:1;14842:12;;;;14889;;;14910:61;;14964:4;14956:6;14952:17;14942:27;;14910:61;15017:2;15009:6;15006:14;14986:18;14983:38;14980:161;;15063:10;15058:3;15054:20;15051:1;15044:31;15098:4;15095:1;15088:15;15126:4;15123:1;15116:15;14980:161;;14767:380;;;:::o;15152:127::-;15213:10;15208:3;15204:20;15201:1;15194:31;15244:4;15241:1;15234:15;15268:4;15265:1;15258:15;15284:128;15324:3;15355:1;15351:6;15348:1;15345:13;15342:39;;;15361:18;;:::i;:::-;-1:-1:-1;15397:9:1;;15284:128::o;15417:125::-;15457:4;15485:1;15482;15479:8;15476:34;;;15490:18;;:::i;:::-;-1:-1:-1;15527:9:1;;15417:125::o;15547:127::-;15608:10;15603:3;15599:20;15596:1;15589:31;15639:4;15636:1;15629:15;15663:4;15660:1;15653:15;15679:136;15718:3;15746:5;15736:39;;15755:18;;:::i;:::-;-1:-1:-1;;;15791:18:1;;15679:136::o;15820:168::-;15860:7;15926:1;15922;15918:6;15914:14;15911:1;15908:21;15903:1;15896:9;15889:17;15885:45;15882:71;;;15933:18;;:::i;:::-;-1:-1:-1;15973:9:1;;15820:168::o;15993:127::-;16054:10;16049:3;16045:20;16042:1;16035:31;16085:4;16082:1;16075:15;16109:4;16106:1;16099:15;16125:135;16164:3;16185:17;;;16182:43;;16205:18;;:::i;:::-;-1:-1:-1;16252:1:1;16241:13;;16125:135::o;16265:195::-;16303:4;16340;16337:1;16333:12;16372:4;16369:1;16365:12;16397:3;16392;16389:12;16386:38;;;16404:18;;:::i;:::-;16441:13;;;16265:195;-1:-1:-1;;;16265:195:1:o;16465:175::-;16502:3;16546:4;16539:5;16535:16;16575:4;16566:7;16563:17;16560:43;;16583:18;;:::i;:::-;16632:1;16619:15;;16465:175;-1:-1:-1;;16465:175:1:o;16645:337::-;16847:2;16829:21;;;16886:2;16866:18;;;16859:30;-1:-1:-1;;;16920:2:1;16905:18;;16898:43;16973:2;16958:18;;16645:337::o;17390:217::-;17430:1;17456;17446:132;;17500:10;17495:3;17491:20;17488:1;17481:31;17535:4;17532:1;17525:15;17563:4;17560:1;17553:15;17446:132;-1:-1:-1;17592:9:1;;17390:217::o;17738:545::-;17840:2;17835:3;17832:11;17829:448;;;17876:1;17901:5;17897:2;17890:17;17946:4;17942:2;17932:19;18016:2;18004:10;18000:19;17997:1;17993:27;17987:4;17983:38;18052:4;18040:10;18037:20;18034:47;;;-1:-1:-1;18075:4:1;18034:47;18130:2;18125:3;18121:12;18118:1;18114:20;18108:4;18104:31;18094:41;;18185:82;18203:2;18196:5;18193:13;18185:82;;;18248:17;;;18229:1;18218:13;18185:82;;;18189:3;;;17738:545;;;:::o;18459:1352::-;18585:3;18579:10;18612:18;18604:6;18601:30;18598:56;;;18634:18;;:::i;:::-;18663:97;18753:6;18713:38;18745:4;18739:11;18713:38;:::i;:::-;18707:4;18663:97;:::i;:::-;18815:4;;18879:2;18868:14;;18896:1;18891:663;;;;19598:1;19615:6;19612:89;;;-1:-1:-1;19667:19:1;;;19661:26;19612:89;-1:-1:-1;;18416:1:1;18412:11;;;18408:24;18404:29;18394:40;18440:1;18436:11;;;18391:57;19714:81;;18861:944;;18891:663;17685:1;17678:14;;;17722:4;17709:18;;-1:-1:-1;;18927:20:1;;;19045:236;19059:7;19056:1;19053:14;19045:236;;;19148:19;;;19142:26;19127:42;;19240:27;;;;19208:1;19196:14;;;;19075:19;;19045:236;;;19049:3;19309:6;19300:7;19297:19;19294:201;;;19370:19;;;19364:26;-1:-1:-1;;19453:1:1;19449:14;;;19465:3;19445:24;19441:37;19437:42;19422:58;19407:74;;19294:201;-1:-1:-1;;;;;19541:1:1;19525:14;;;19521:22;19508:36;;-1:-1:-1;18459:1352:1:o;20945:204::-;20983:3;21019:4;21016:1;21012:12;21051:4;21048:1;21044:12;21086:3;21080:4;21076:14;21071:3;21068:23;21065:49;;;21094:18;;:::i;:::-;21130:13;;20945:204;-1:-1:-1;;;20945:204:1:o

Swarm Source

ipfs://185ee444912ff832bb25593e35c7beded96c04f932a10eeeb177a08ee3ed36ba
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.