ETH Price: $3,396.95 (+2.05%)

Contract

0xc40D7b9ca90EAca4A6e067b6ec689fD29f4a8b3C
 
Transaction Hash
Method
Block
From
To
Turn Out176717032023-07-11 16:57:47536 days ago1689094667IN
NEST Protocol: nToken Oracle 3
0 ETH0.0022253833.2862832
Turn Out155382332022-09-15 9:32:59835 days ago1663234379IN
NEST Protocol: nToken Oracle 3
0 ETH0.0007488812.275659
Change Block Lim...155382272022-09-15 9:31:47835 days ago1663234307IN
NEST Protocol: nToken Oracle 3
0 ETH0.0004574413.39646286
Send Erc Buy Eth155382232022-09-15 9:30:59835 days ago1663234259IN
NEST Protocol: nToken Oracle 3
0 ETH0.0043631913.41316138
Change Block Lim...155381962022-09-15 9:25:35835 days ago1663233935IN
NEST Protocol: nToken Oracle 3
0 ETH0.000432212.64822144
Turn Out155381232022-09-15 9:10:59835 days ago1663233059IN
NEST Protocol: nToken Oracle 3
0 ETH0.0007648511.16774488
Change Block Lim...155381052022-09-15 9:07:23835 days ago1663232843IN
NEST Protocol: nToken Oracle 3
0 ETH0.0003921811.48527276
Send Erc Buy Eth155381012022-09-15 9:06:35835 days ago1663232795IN
NEST Protocol: nToken Oracle 3
0 ETH0.0038511611.49449072
Change Block Lim...155380862022-09-15 9:03:35835 days ago1663232615IN
NEST Protocol: nToken Oracle 3
0 ETH0.0004769713.95856015
Change Tran Addi...155379362022-09-15 8:32:59835 days ago1663230779IN
NEST Protocol: nToken Oracle 3
0 ETH0.0008231624.1398436
Change Tran Eth155379362022-09-15 8:32:59835 days ago1663230779IN
NEST Protocol: nToken Oracle 3
0 ETH0.0007053924.1398436
Change Mapping155379322022-09-15 8:32:11835 days ago1663230731IN
NEST Protocol: nToken Oracle 3
0 ETH0.0015555528.09894862
Turn Out112097242020-11-07 10:16:001512 days ago1604744160IN
NEST Protocol: nToken Oracle 3
0 ETH0.0014882323
Turn Out110768392020-10-18 0:57:301532 days ago1602982650IN
NEST Protocol: nToken Oracle 3
0 ETH0.02163103
Turn Out110768342020-10-18 0:56:491532 days ago1602982609IN
NEST Protocol: nToken Oracle 3
0 ETH0.00392718.7
Turn Out107726542020-09-01 2:44:001579 days ago1598928240IN
NEST Protocol: nToken Oracle 3
0 ETH0.0063074235
Turn Out107726052020-09-01 2:32:331579 days ago1598927553IN
NEST Protocol: nToken Oracle 3
0 ETH0.01085742220.50000072
Offer107725982020-09-01 2:31:421579 days ago1598927502IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.07546649235
Offer107722852020-09-01 1:19:011579 days ago1598923141IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.07064948220
Offer107722732020-09-01 1:15:321579 days ago1598922932IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.08638718220
Offer107722482020-09-01 1:09:271579 days ago1598922567IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.00880161219
Offer107720832020-09-01 0:34:511579 days ago1598920491IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.08560184218.00000145
Offer107720032020-09-01 0:17:231579 days ago1598919443IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.07943097201
Offer107689512020-08-31 13:23:571580 days ago1598880237IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.10317432258.5
Offer107689502020-08-31 13:23:161580 days ago1598880196IN
NEST Protocol: nToken Oracle 3
10.1 ETH0.10186027255.2000016
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
176717032023-07-11 16:57:47536 days ago1689094667
NEST Protocol: nToken Oracle 3
10 ETH
155382332022-09-15 9:32:59835 days ago1663234379
NEST Protocol: nToken Oracle 3
10 ETH
155381232022-09-15 9:10:59835 days ago1663233059
NEST Protocol: nToken Oracle 3
10 ETH
112097242020-11-07 10:16:001512 days ago1604744160
NEST Protocol: nToken Oracle 3
10 ETH
107726052020-09-01 2:32:331579 days ago1598927553
NEST Protocol: nToken Oracle 3
10 ETH
107722732020-09-01 1:15:321579 days ago1598922932
NEST Protocol: nToken Oracle 3
0.1 ETH
107720832020-09-01 0:34:511579 days ago1598920491
NEST Protocol: nToken Oracle 3
0.1 ETH
107720032020-09-01 0:17:231579 days ago1598919443
NEST Protocol: nToken Oracle 3
0.1 ETH
107689512020-08-31 13:23:571580 days ago1598880237
NEST Protocol: nToken Oracle 3
0.1 ETH
107689502020-08-31 13:23:161580 days ago1598880196
NEST Protocol: nToken Oracle 3
0.1 ETH
107689492020-08-31 13:23:151580 days ago1598880195
NEST Protocol: nToken Oracle 3
0.1 ETH
107689472020-08-31 13:23:021580 days ago1598880182
NEST Protocol: nToken Oracle 3
0.1 ETH
107689432020-08-31 13:21:521580 days ago1598880112
NEST Protocol: nToken Oracle 3
0.1 ETH
107689412020-08-31 13:20:401580 days ago1598880040
NEST Protocol: nToken Oracle 3
0.1 ETH
107689392020-08-31 13:20:321580 days ago1598880032
NEST Protocol: nToken Oracle 3
0.1 ETH
107689362020-08-31 13:19:421580 days ago1598879982
NEST Protocol: nToken Oracle 3
0.1 ETH
107689352020-08-31 13:19:291580 days ago1598879969
NEST Protocol: nToken Oracle 3
0.1 ETH
107689332020-08-31 13:19:231580 days ago1598879963
NEST Protocol: nToken Oracle 3
0.1 ETH
107689292020-08-31 13:19:051580 days ago1598879945
NEST Protocol: nToken Oracle 3
0.1 ETH
107689272020-08-31 13:18:521580 days ago1598879932
NEST Protocol: nToken Oracle 3
0.1 ETH
107689262020-08-31 13:18:381580 days ago1598879918
NEST Protocol: nToken Oracle 3
0.1 ETH
107689252020-08-31 13:18:301580 days ago1598879910
NEST Protocol: nToken Oracle 3
0.1 ETH
107689232020-08-31 13:18:101580 days ago1598879890
NEST Protocol: nToken Oracle 3
0.1 ETH
107689212020-08-31 13:17:551580 days ago1598879875
NEST Protocol: nToken Oracle 3
0.1 ETH
107689202020-08-31 13:17:441580 days ago1598879864
NEST Protocol: nToken Oracle 3
0.1 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Nest_NToken_OfferMain

Compiler Version
v0.6.0+commit.26b70077

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-11
*/

pragma solidity 0.6.0;

/**
 * @title Offering contract
 * @dev Offering logic and mining logic
 */
contract Nest_NToken_OfferMain {
    
    using SafeMath for uint256;
    using address_make_payable for address;
    using SafeERC20 for ERC20;
    
    // Offering data structure
    struct Nest_NToken_OfferPriceData {
        // The unique identifier is determined by the position of the offer in the array, and is converted to each other through a fixed algorithm (toindex(), toaddress())
        address owner;                                  //  Offering owner
        bool deviate;                                   //  Whether it deviates 
        address tokenAddress;                           //  The erc20 contract address of the target offer token
        
        uint256 ethAmount;                              //  The ETH amount in the offer list
        uint256 tokenAmount;                            //  The token amount in the offer list
        
        uint256 dealEthAmount;                          //  The remaining number of tradable ETH
        uint256 dealTokenAmount;                        //  The remaining number of tradable tokens
        
        uint256 blockNum;                               //  The block number where the offer is located
        uint256 serviceCharge;                          //  The fee for mining
        // Determine whether the asset has been collected by judging that ethamount, tokenamount, and servicecharge are all 0
    }
    
    Nest_NToken_OfferPriceData [] _prices;                              //  Array used to save offers
    Nest_3_VoteFactory _voteFactory;                                    //  Voting contract
    Nest_3_OfferPrice _offerPrice;                                      //  Price contract
    Nest_NToken_TokenMapping _tokenMapping;                             //  NToken mapping contract
    ERC20 _nestToken;                                                   //  nestToken
    Nest_3_Abonus _abonus;                                              //  Bonus pool
    uint256 _miningETH = 10;                                            //  Offering mining fee ratio
    uint256 _tranEth = 1;                                               //  Taker fee ratio
    uint256 _tranAddition = 2;                                          //  Additional transaction multiple
    uint256 _leastEth = 10 ether;                                       //  Minimum offer of ETH
    uint256 _offerSpan = 10 ether;                                      //  ETH Offering span
    uint256 _deviate = 10;                                              //  Price deviation - 10%
    uint256 _deviationFromScale = 10;                                   //  Deviation from asset scale
    uint256 _ownerMining = 5;                                           //  Creator ratio
    uint256 _afterMiningAmount = 0.4 ether;                             //  Stable period mining amount
    uint32 _blockLimit = 25;                                            //  Block interval upper limit
    
    uint256 _blockAttenuation = 2400000;                                //  Block decay interval
    mapping(uint256 => mapping(address => uint256)) _blockOfferAmount;  //  Block offer times - block number=>token address=>offer fee
    mapping(uint256 => mapping(address => uint256)) _blockMining;       //  Offering block mining amount - block number=>token address=>mining amount
    uint256[10] _attenuationAmount;                                     //  Mining decay list
    
    //  Log token contract address
    event OfferTokenContractAddress(address contractAddress);           
    //  Log offering contract, token address, amount of ETH, amount of ERC20, delayed block, mining fee
    event OfferContractAddress(address contractAddress, address tokenAddress, uint256 ethAmount, uint256 erc20Amount, uint256 continued,uint256 mining);         
    //  Log transaction sender, transaction token, transaction amount, purchase token address, purchase token amount, transaction offering contract address, transaction user address
    event OfferTran(address tranSender, address tranToken, uint256 tranAmount,address otherToken, uint256 otherAmount, address tradedContract, address tradedOwner);        
    //  Log current block, current block mined amount, token address
    event OreDrawingLog(uint256 nowBlock, uint256 blockAmount, address tokenAddress);
    //  Log offering block, token address, token offered times
    event MiningLog(uint256 blockNum, address tokenAddress, uint256 offerTimes);
    
    /**
     * Initialization method
     * @param voteFactory Voting contract address
     **/
    constructor (address voteFactory) public {
        Nest_3_VoteFactory voteFactoryMap = Nest_3_VoteFactory(address(voteFactory));
        _voteFactory = voteFactoryMap;                                                                 
        _offerPrice = Nest_3_OfferPrice(address(voteFactoryMap.checkAddress("nest.v3.offerPrice")));            
        _nestToken = ERC20(voteFactoryMap.checkAddress("nest"));                                                          
        _abonus = Nest_3_Abonus(voteFactoryMap.checkAddress("nest.v3.abonus"));
        _tokenMapping = Nest_NToken_TokenMapping(address(voteFactoryMap.checkAddress("nest.nToken.tokenMapping")));
        
        uint256 blockAmount = 4 ether;
        for (uint256 i = 0; i < 10; i ++) {
            _attenuationAmount[i] = blockAmount;
            blockAmount = blockAmount.mul(8).div(10);
        }
    }
    
    /**
     * Reset voting contract method
     * @param voteFactory Voting contract address
     **/
    function changeMapping(address voteFactory) public onlyOwner {
        Nest_3_VoteFactory voteFactoryMap = Nest_3_VoteFactory(address(voteFactory));
        _voteFactory = voteFactoryMap;                                                          
        _offerPrice = Nest_3_OfferPrice(address(voteFactoryMap.checkAddress("nest.v3.offerPrice")));      
        _nestToken = ERC20(voteFactoryMap.checkAddress("nest"));                                                   
        _abonus = Nest_3_Abonus(voteFactoryMap.checkAddress("nest.v3.abonus"));
        _tokenMapping = Nest_NToken_TokenMapping(address(voteFactoryMap.checkAddress("nest.nToken.tokenMapping")));
    }
    
    /**
     * Offering method
     * @param ethAmount ETH amount
     * @param erc20Amount Erc20 token amount
     * @param erc20Address Erc20 token address
     **/
    function offer(uint256 ethAmount, uint256 erc20Amount, address erc20Address) public payable {
        require(address(msg.sender) == address(tx.origin), "It can't be a contract");
        address nTokenAddress = _tokenMapping.checkTokenMapping(erc20Address);
        require(nTokenAddress != address(0x0));
        //  Judge whether the price deviates
        uint256 ethMining;
        bool isDeviate = comparativePrice(ethAmount,erc20Amount,erc20Address);
        if (isDeviate) {
            require(ethAmount >= _leastEth.mul(_deviationFromScale), "EthAmount needs to be no less than 10 times of the minimum scale");
            ethMining = _leastEth.mul(_miningETH).div(1000);
        } else {
            ethMining = ethAmount.mul(_miningETH).div(1000);
        }
        require(msg.value >= ethAmount.add(ethMining), "msg.value needs to be equal to the quoted eth quantity plus Mining handling fee");
        uint256 subValue = msg.value.sub(ethAmount.add(ethMining));
        if (subValue > 0) {
            repayEth(address(msg.sender), subValue);
        }
        //  Create an offer
        createOffer(ethAmount, erc20Amount, erc20Address,isDeviate, ethMining);
        //  Transfer in offer asset - erc20 to this contract
        ERC20(erc20Address).safeTransferFrom(address(msg.sender), address(this), erc20Amount);
        _abonus.switchToEthForNTokenOffer.value(ethMining)(nTokenAddress);
        //  Mining
        if (_blockOfferAmount[block.number][erc20Address] == 0) {
            uint256 miningAmount = oreDrawing(nTokenAddress);
            Nest_NToken nToken = Nest_NToken(nTokenAddress);
            nToken.transfer(nToken.checkBidder(), miningAmount.mul(_ownerMining).div(100));
            _blockMining[block.number][erc20Address] = miningAmount.sub(miningAmount.mul(_ownerMining).div(100));
        }
        _blockOfferAmount[block.number][erc20Address] = _blockOfferAmount[block.number][erc20Address].add(ethMining);
    }
    
    /**
     * @dev Create offer
     * @param ethAmount Offering ETH amount
     * @param erc20Amount Offering erc20 amount
     * @param erc20Address Offering erc20 address
     **/
    function createOffer(uint256 ethAmount, uint256 erc20Amount, address erc20Address, bool isDeviate, uint256 mining) private {
        // Check offer conditions
        require(ethAmount >= _leastEth, "Eth scale is smaller than the minimum scale");                                                 
        require(ethAmount % _offerSpan == 0, "Non compliant asset span");
        require(erc20Amount % (ethAmount.div(_offerSpan)) == 0, "Asset quantity is not divided");
        require(erc20Amount > 0);
        // Create offering contract
        emit OfferContractAddress(toAddress(_prices.length), address(erc20Address), ethAmount, erc20Amount,_blockLimit,mining);
        _prices.push(Nest_NToken_OfferPriceData(
            msg.sender,
            isDeviate,
            erc20Address,
            
            ethAmount,
            erc20Amount,
            
            ethAmount, 
            erc20Amount, 
            
            block.number,
            mining
        ));
        // Record price
        _offerPrice.addPrice(ethAmount, erc20Amount, block.number.add(_blockLimit), erc20Address, address(msg.sender));
    }
    
    // Convert offer address into index in offer array
    function toIndex(address contractAddress) public pure returns(uint256) {
        return uint256(contractAddress);
    }
    
    // Convert index in offer array into offer address 
    function toAddress(uint256 index) public pure returns(address) {
        return address(index);
    }
    
    /**
     * Withdraw offer assets
     * @param contractAddress Offer address
     **/
    function turnOut(address contractAddress) public {
        require(address(msg.sender) == address(tx.origin), "It can't be a contract");
        uint256 index = toIndex(contractAddress);
        Nest_NToken_OfferPriceData storage offerPriceData = _prices[index];
        require(checkContractState(offerPriceData.blockNum) == 1, "Offer status error");
        // Withdraw ETH
        if (offerPriceData.ethAmount > 0) {
            uint256 payEth = offerPriceData.ethAmount;
            offerPriceData.ethAmount = 0;
            repayEth(offerPriceData.owner, payEth);
        }
        // Withdraw erc20
        if (offerPriceData.tokenAmount > 0) {
            uint256 payErc = offerPriceData.tokenAmount;
            offerPriceData.tokenAmount = 0;
            ERC20(address(offerPriceData.tokenAddress)).transfer(offerPriceData.owner, payErc);
            
        }
        // Mining settlement
        if (offerPriceData.serviceCharge > 0) {
            mining(offerPriceData.blockNum, offerPriceData.tokenAddress, offerPriceData.serviceCharge, offerPriceData.owner);
            offerPriceData.serviceCharge = 0;
        }
    }
    
    /**
    * @dev Taker order - pay ETH and buy erc20
    * @param ethAmount The amount of ETH of this offer
    * @param tokenAmount The amount of erc20 of this offer
    * @param contractAddress The target offer address
    * @param tranEthAmount The amount of ETH of taker order
    * @param tranTokenAmount The amount of erc20 of taker order
    * @param tranTokenAddress The erc20 address of taker order
    */
    function sendEthBuyErc(uint256 ethAmount, uint256 tokenAmount, address contractAddress, uint256 tranEthAmount, uint256 tranTokenAmount, address tranTokenAddress) public payable {
        require(address(msg.sender) == address(tx.origin), "It can't be a contract");
        uint256 serviceCharge = tranEthAmount.mul(_tranEth).div(1000);
        require(msg.value == ethAmount.add(tranEthAmount).add(serviceCharge), "msg.value needs to be equal to the quotation eth quantity plus transaction eth plus");
        require(tranEthAmount % _offerSpan == 0, "Transaction size does not meet asset span");
        
        //  Get the offer data structure
        uint256 index = toIndex(contractAddress);
        Nest_NToken_OfferPriceData memory offerPriceData = _prices[index]; 
        //  Check the price, compare the current offer to the last effective price
        bool thisDeviate = comparativePrice(ethAmount,tokenAmount,tranTokenAddress);
        bool isDeviate;
        if (offerPriceData.deviate == true) {
            isDeviate = true;
        } else {
            isDeviate = thisDeviate;
        }
        //  Limit the taker order only be twice the amount of the offer to prevent large-amount attacks
        if (offerPriceData.deviate) {
            //  The taker order deviates  x2
            require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale");
        } else {
            if (isDeviate) {
                //  If the taken offer is normal and the taker order deviates x10
                require(ethAmount >= tranEthAmount.mul(_deviationFromScale), "EthAmount needs to be no less than 10 times of transaction scale");
            } else {
                //  If the taken offer is normal and the taker order is normal x2
                require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale");
            }
        }
        
        // Check whether the conditions for taker order are satisfied
        require(checkContractState(offerPriceData.blockNum) == 0, "Offer status error");
        require(offerPriceData.dealEthAmount >= tranEthAmount, "Insufficient trading eth");
        require(offerPriceData.dealTokenAmount >= tranTokenAmount, "Insufficient trading token");
        require(offerPriceData.tokenAddress == tranTokenAddress, "Wrong token address");
        require(tranTokenAmount == offerPriceData.dealTokenAmount * tranEthAmount / offerPriceData.dealEthAmount, "Wrong token amount");
        
        // Update the offer information
        offerPriceData.ethAmount = offerPriceData.ethAmount.add(tranEthAmount);
        offerPriceData.tokenAmount = offerPriceData.tokenAmount.sub(tranTokenAmount);
        offerPriceData.dealEthAmount = offerPriceData.dealEthAmount.sub(tranEthAmount);
        offerPriceData.dealTokenAmount = offerPriceData.dealTokenAmount.sub(tranTokenAmount);
        _prices[index] = offerPriceData;
        // Create a new offer
        createOffer(ethAmount, tokenAmount, tranTokenAddress, isDeviate, 0);
        // Transfer in erc20 + offer asset to this contract
        if (tokenAmount > tranTokenAmount) {
            ERC20(tranTokenAddress).safeTransferFrom(address(msg.sender), address(this), tokenAmount.sub(tranTokenAmount));
        } else {
            ERC20(tranTokenAddress).safeTransfer(address(msg.sender), tranTokenAmount.sub(tokenAmount));
        }

        // Modify price
        _offerPrice.changePrice(tranEthAmount, tranTokenAmount, tranTokenAddress, offerPriceData.blockNum.add(_blockLimit));
        emit OfferTran(address(msg.sender), address(0x0), tranEthAmount, address(tranTokenAddress), tranTokenAmount, contractAddress, offerPriceData.owner);
        
        // Transfer fee
        if (serviceCharge > 0) {
            address nTokenAddress = _tokenMapping.checkTokenMapping(tranTokenAddress);
            _abonus.switchToEth.value(serviceCharge)(nTokenAddress);
        }
    }
    
    /**
    * @dev Taker order - pay erc20 and buy ETH
    * @param ethAmount The amount of ETH of this offer
    * @param tokenAmount The amount of erc20 of this offer
    * @param contractAddress The target offer address
    * @param tranEthAmount The amount of ETH of taker order
    * @param tranTokenAmount The amount of erc20 of taker order
    * @param tranTokenAddress The erc20 address of taker order
    */
    function sendErcBuyEth(uint256 ethAmount, uint256 tokenAmount, address contractAddress, uint256 tranEthAmount, uint256 tranTokenAmount, address tranTokenAddress) public payable {
        require(address(msg.sender) == address(tx.origin), "It can't be a contract");
        uint256 serviceCharge = tranEthAmount.mul(_tranEth).div(1000);
        require(msg.value == ethAmount.sub(tranEthAmount).add(serviceCharge), "msg.value needs to be equal to the quoted eth quantity plus transaction handling fee");
        require(tranEthAmount % _offerSpan == 0, "Transaction size does not meet asset span");
        //  Get the offer data structure
        uint256 index = toIndex(contractAddress);
        Nest_NToken_OfferPriceData memory offerPriceData = _prices[index]; 
        //  Check the price, compare the current offer to the last effective price
        bool thisDeviate = comparativePrice(ethAmount,tokenAmount,tranTokenAddress);
        bool isDeviate;
        if (offerPriceData.deviate == true) {
            isDeviate = true;
        } else {
            isDeviate = thisDeviate;
        }
        //  Limit the taker order only be twice the amount of the offer to prevent large-amount attacks
        if (offerPriceData.deviate) {
            //  The taker order deviates  x2
            require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale");
        } else {
            if (isDeviate) {
                //  If the taken offer is normal and the taker order deviates x10
                require(ethAmount >= tranEthAmount.mul(_deviationFromScale), "EthAmount needs to be no less than 10 times of transaction scale");
            } else {
                //  If the taken offer is normal and the taker order is normal x2
                require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale");
            }
        }
        // Check whether the conditions for taker order are satisfied
        require(checkContractState(offerPriceData.blockNum) == 0, "Offer status error");
        require(offerPriceData.dealEthAmount >= tranEthAmount, "Insufficient trading eth");
        require(offerPriceData.dealTokenAmount >= tranTokenAmount, "Insufficient trading token");
        require(offerPriceData.tokenAddress == tranTokenAddress, "Wrong token address");
        require(tranTokenAmount == offerPriceData.dealTokenAmount * tranEthAmount / offerPriceData.dealEthAmount, "Wrong token amount");
        // Update the offer information
        offerPriceData.ethAmount = offerPriceData.ethAmount.sub(tranEthAmount);
        offerPriceData.tokenAmount = offerPriceData.tokenAmount.add(tranTokenAmount);
        offerPriceData.dealEthAmount = offerPriceData.dealEthAmount.sub(tranEthAmount);
        offerPriceData.dealTokenAmount = offerPriceData.dealTokenAmount.sub(tranTokenAmount);
        _prices[index] = offerPriceData;
        // Create a new offer
        createOffer(ethAmount, tokenAmount, tranTokenAddress, isDeviate, 0);
        // Transfer in erc20 + offer asset to this contract
        ERC20(tranTokenAddress).safeTransferFrom(address(msg.sender), address(this), tranTokenAmount.add(tokenAmount));
        // Modify price
        _offerPrice.changePrice(tranEthAmount, tranTokenAmount, tranTokenAddress, offerPriceData.blockNum.add(_blockLimit));
        emit OfferTran(address(msg.sender), address(tranTokenAddress), tranTokenAmount, address(0x0), tranEthAmount, contractAddress, offerPriceData.owner);
        // Transfer fee
        if (serviceCharge > 0) {
            address nTokenAddress = _tokenMapping.checkTokenMapping(tranTokenAddress);
            _abonus.switchToEth.value(serviceCharge)(nTokenAddress);
        }
    }
    
    /**
     * Offering mining
     * @param ntoken NToken address
     **/
    function oreDrawing(address ntoken) private returns(uint256) {
        Nest_NToken miningToken = Nest_NToken(ntoken);
        (uint256 createBlock, uint256 recentlyUsedBlock) = miningToken.checkBlockInfo();
        uint256 attenuationPointNow = block.number.sub(createBlock).div(_blockAttenuation);
        uint256 miningAmount = 0;
        uint256 attenuation;
        if (attenuationPointNow > 9) {
            attenuation = _afterMiningAmount;
        } else {
            attenuation = _attenuationAmount[attenuationPointNow];
        }
        miningAmount = attenuation.mul(block.number.sub(recentlyUsedBlock));
        miningToken.increaseTotal(miningAmount);
        emit OreDrawingLog(block.number, miningAmount, ntoken);
        return miningAmount;
    }
    
    /**
     * Retrieve mining
     * @param token Token address
     **/
    function mining(uint256 blockNum, address token, uint256 serviceCharge, address owner) private returns(uint256) {
        //  Block mining amount*offer fee/block offer fee
        uint256 miningAmount = _blockMining[blockNum][token].mul(serviceCharge).div(_blockOfferAmount[blockNum][token]);        
        //  Transfer NToken 
        Nest_NToken nToken = Nest_NToken(address(_tokenMapping.checkTokenMapping(token)));
        require(nToken.transfer(address(owner), miningAmount), "Transfer failure");
        
        emit MiningLog(blockNum, token,_blockOfferAmount[blockNum][token]);
        return miningAmount;
    }
    
    // Compare order prices
    function comparativePrice(uint256 myEthValue, uint256 myTokenValue, address token) private view returns(bool) {
        (uint256 frontEthValue, uint256 frontTokenValue) = _offerPrice.updateAndCheckPricePrivate(token);
        if (frontEthValue == 0 || frontTokenValue == 0) {
            return false;
        }
        uint256 maxTokenAmount = myEthValue.mul(frontTokenValue).mul(uint256(100).add(_deviate)).div(frontEthValue.mul(100));
        if (myTokenValue <= maxTokenAmount) {
            uint256 minTokenAmount = myEthValue.mul(frontTokenValue).mul(uint256(100).sub(_deviate)).div(frontEthValue.mul(100));
            if (myTokenValue >= minTokenAmount) {
                return false;
            }
        }
        return true;
    }
    
    // Check contract status
    function checkContractState(uint256 createBlock) public view returns (uint256) {
        if (block.number.sub(createBlock) > _blockLimit) {
            return 1;
        }
        return 0;
    }
    
    // Transfer ETH
    function repayEth(address accountAddress, uint256 asset) private {
        address payable addr = accountAddress.make_payable();
        addr.transfer(asset);
    }
    
    // View the upper limit of the block interval
    function checkBlockLimit() public view returns(uint256) {
        return _blockLimit;
    }
    
    // View taker fee ratio
    function checkTranEth() public view returns (uint256) {
        return _tranEth;
    }
    
    // View additional transaction multiple
    function checkTranAddition() public view returns(uint256) {
        return _tranAddition;
    }
    
    // View minimum offering ETH
    function checkleastEth() public view returns(uint256) {
        return _leastEth;
    }
    
    // View offering ETH span
    function checkOfferSpan() public view returns(uint256) {
        return _offerSpan;
    }

    // View block offering amount
    function checkBlockOfferAmount(uint256 blockNum, address token) public view returns (uint256) {
        return _blockOfferAmount[blockNum][token];
    }
    
    // View offering block mining amount
    function checkBlockMining(uint256 blockNum, address token) public view returns (uint256) {
        return _blockMining[blockNum][token];
    }
    
    // View offering mining amount
    function checkOfferMining(uint256 blockNum, address token, uint256 serviceCharge) public view returns (uint256) {
        if (serviceCharge == 0) {
            return 0;
        } else {
            return _blockMining[blockNum][token].mul(serviceCharge).div(_blockOfferAmount[blockNum][token]);
        }
    }
    
    //  View the owner allocation ratio
    function checkOwnerMining() public view returns(uint256) {
        return _ownerMining;
    }
    
    // View the mining decay
    function checkAttenuationAmount(uint256 num) public view returns(uint256) {
        return _attenuationAmount[num];
    }
    
    // Modify taker order fee ratio
    function changeTranEth(uint256 num) public onlyOwner {
        _tranEth = num;
    }
    
    // Modify block interval upper limit
    function changeBlockLimit(uint32 num) public onlyOwner {
        _blockLimit = num;
    }
    
    // Modify additional transaction multiple
    function changeTranAddition(uint256 num) public onlyOwner {
        require(num > 0, "Parameter needs to be greater than 0");
        _tranAddition = num;
    }
    
    // Modify minimum offering ETH
    function changeLeastEth(uint256 num) public onlyOwner {
        require(num > 0, "Parameter needs to be greater than 0");
        _leastEth = num;
    }
    
    // Modify offering ETH span
    function changeOfferSpan(uint256 num) public onlyOwner {
        require(num > 0, "Parameter needs to be greater than 0");
        _offerSpan = num;
    }
    
    // Modify price deviation
    function changekDeviate(uint256 num) public onlyOwner {
        _deviate = num;
    }
    
    // Modify the deviation from scale 
    function changeDeviationFromScale(uint256 num) public onlyOwner {
        _deviationFromScale = num;
    }
    
    // Modify the owner allocation ratio
    function changeOwnerMining(uint256 num) public onlyOwner {
        _ownerMining = num;
    }
    
    // Modify the mining decay
    function changeAttenuationAmount(uint256 firstAmount, uint256 top, uint256 bottom) public onlyOwner {
        uint256 blockAmount = firstAmount;
        for (uint256 i = 0; i < 10; i ++) {
            _attenuationAmount[i] = blockAmount;
            blockAmount = blockAmount.mul(top).div(bottom);
        }
    }
    
    // Vote administrators only
    modifier onlyOwner(){
        require(_voteFactory.checkOwners(msg.sender), "No authority");
        _;
    }
    
    /**
     * Get the number of offers stored in the offer array
     * @return The number of offers stored in the offer array
     **/
    function getPriceCount() view public returns (uint256) {
        return _prices.length;
    }
    
    /**
     * Get offer information according to the index
     * @param priceIndex Offer index
     * @return Offer information
     **/
    function getPrice(uint256 priceIndex) view public returns (string memory) {
        //  The buffer array used to generate the result string
        bytes memory buf = new bytes(500000);
        uint256 index = 0;
        index = writeOfferPriceData(priceIndex, _prices[priceIndex], buf, index);
        // Generate the result string and return
        bytes memory str = new bytes(index);
        while(index-- > 0) {
            str[index] = buf[index];
        }
        return string(str);
    }
    
    /**
     * Search the contract address list of the target account (reverse order)
     * @param start Search forward from the index corresponding to the given contract address (not including the record corresponding to start address)
     * @param count Maximum number of records to return
     * @param maxFindCount The max index to search
     * @param owner Target account address
     * @return Separate the offer records with symbols. use , to divide fields:  
     * uuid,owner,tokenAddress,ethAmount,tokenAmount,dealEthAmount,dealTokenAmount,blockNum,serviceCharge
     **/
    function find(address start, uint256 count, uint256 maxFindCount, address owner) view public returns (string memory) {
        // Buffer array used to generate result string
        bytes memory buf = new bytes(500000);
        uint256 index = 0;
        // Calculate search interval i and end
        uint256 i = _prices.length;
        uint256 end = 0;
        if (start != address(0)) {
            i = toIndex(start);
        }
        if (i > maxFindCount) {
            end = i - maxFindCount;
        }
        // Loop search, write qualified records into buffer
        while (count > 0 && i-- > end) {
            Nest_NToken_OfferPriceData memory price = _prices[i];
            if (price.owner == owner) {
                --count;
                index = writeOfferPriceData(i, price, buf, index);
            }
        }
        // Generate result string and return
        bytes memory str = new bytes(index);
        while(index-- > 0) {
            str[index] = buf[index];
        }
        return string(str);
    }
    
    /**
     * Get the list of offers by page
     * @param offset Skip the first offset records
     * @param count Maximum number of records to return
     * @param order Sort rules. 0 means reverse order, non-zero means positive order
     * @return Separate the offer records with symbols. use , to divide fields: 
     * uuid,owner,tokenAddress,ethAmount,tokenAmount,dealEthAmount,dealTokenAmount,blockNum,serviceCharge
     **/
    function list(uint256 offset, uint256 count, uint256 order) view public returns (string memory) {
        
        // Buffer array used to generate result string 
        bytes memory buf = new bytes(500000);
        uint256 index = 0;
        
        // Find search interval i and end
        uint256 i = 0;
        uint256 end = 0;
        
        if (order == 0) {
            // Reverse order, in default 
            // Calculate search interval i and end
            if (offset < _prices.length) {
                i = _prices.length - offset;
            } 
            if (count < i) {
                end = i - count;
            }
            
            // Write records in the target interval into the buffer
            while (i-- > end) {
                index = writeOfferPriceData(i, _prices[i], buf, index);
            }
        } else {
            // Ascending order
            // Calculate the search interval i and end
            if (offset < _prices.length) {
                i = offset;
            } else {
                i = _prices.length;
            }
            end = i + count;
            if(end > _prices.length) {
                end = _prices.length;
            }
            
            // Write the records in the target interval into the buffer
            while (i < end) {
                index = writeOfferPriceData(i, _prices[i], buf, index);
                ++i;
            }
        }
        
        // Generate the result string and return
        bytes memory str = new bytes(index);
        while(index-- > 0) {
            str[index] = buf[index];
        }
        return string(str);
    }   
     
    // Write the offer data into the buffer and return the buffer index
    function writeOfferPriceData(uint256 priceIndex, Nest_NToken_OfferPriceData memory price, bytes memory buf, uint256 index) pure private returns (uint256) {
        
        index = writeAddress(toAddress(priceIndex), buf, index);
        buf[index++] = byte(uint8(44));
        
        index = writeAddress(price.owner, buf, index);
        buf[index++] = byte(uint8(44));
        
        index = writeAddress(price.tokenAddress, buf, index);
        buf[index++] = byte(uint8(44));
        
        index = writeUInt(price.ethAmount, buf, index);
        buf[index++] = byte(uint8(44));
        
        index = writeUInt(price.tokenAmount, buf, index);
        buf[index++] = byte(uint8(44));
       
        index = writeUInt(price.dealEthAmount, buf, index);
        buf[index++] = byte(uint8(44));
        
        index = writeUInt(price.dealTokenAmount, buf, index);
        buf[index++] = byte(uint8(44));
        
        index = writeUInt(price.blockNum, buf, index);
        buf[index++] = byte(uint8(44));
        
        index = writeUInt(price.serviceCharge, buf, index);
        buf[index++] = byte(uint8(44));
        
        return index;
    }
     
    // Convert integer to string in decimal form, write the string into the buffer, and return the buffer index
    function writeUInt(uint256 iv, bytes memory buf, uint256 index) pure public returns (uint256) {
        uint256 i = index;
        do {
            buf[index++] = byte(uint8(iv % 10 +48));
            iv /= 10;
        } while (iv > 0);
        
        for (uint256 j = index; j > i; ++i) {
            byte t = buf[i];
            buf[i] = buf[--j];
            buf[j] = t;
        }
        
        return index;
    }

    // Convert the address to a hexadecimal string and write it into the buffer, and return the buffer index
    function writeAddress(address addr, bytes memory buf, uint256 index) pure private returns (uint256) {
        
        uint256 iv = uint256(addr);
        uint256 i = index + 40;
        do {
            uint256 w = iv % 16;
            if(w < 10) {
                buf[index++] = byte(uint8(w +48));
            } else {
                buf[index++] = byte(uint8(w +87));
            }
            
            iv /= 16;
        } while (index < i);
        
        i -= 40;
        for (uint256 j = index; j > i; ++i) {
            byte t = buf[i];
            buf[i] = buf[--j];
            buf[j] = t;
        }
        
        return index;
    }
}

// Price contract
interface Nest_3_OfferPrice {
    // Add price data
    function addPrice(uint256 ethAmount, uint256 tokenAmount, uint256 endBlock, address tokenAddress, address offerOwner) external;
    // Modify price
    function changePrice(uint256 ethAmount, uint256 tokenAmount, address tokenAddress, uint256 endBlock) external;
    function updateAndCheckPricePrivate(address tokenAddress) external view returns(uint256 ethAmount, uint256 erc20Amount);
}

// Voting contract
interface Nest_3_VoteFactory {
    //  Check address
	function checkAddress(string calldata name) external view returns (address contractAddress);
	// Check whether an administrator
	function checkOwners(address man) external view returns (bool);
}

// NToken contract
interface Nest_NToken {
    // Additional issuance
    function increaseTotal(uint256 value) external;
    // Check mining information
    function checkBlockInfo() external view returns(uint256 createBlock, uint256 recentlyUsedBlock);
    // Check creator
    function checkBidder() external view returns(address);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// NToken mapping contract
interface Nest_NToken_TokenMapping {
    // Check token mapping
    function checkTokenMapping(address token) external view returns (address);
}

// Bonus pool contract
interface Nest_3_Abonus {
    function switchToEth(address token) external payable;
    function switchToEthForNTokenOffer(address token) external payable;
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library address_make_payable {
   function make_payable(address x) internal pure returns (address payable) {
      return address(uint160(x));
   }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(ERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(ERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(ERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(ERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function callOptionalReturn(ERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"voteFactory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"offerTimes","type":"uint256"}],"name":"MiningLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"erc20Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"continued","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mining","type":"uint256"}],"name":"OfferContractAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"OfferTokenContractAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tranSender","type":"address"},{"indexed":false,"internalType":"address","name":"tranToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tranAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"otherToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"otherAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"tradedContract","type":"address"},{"indexed":false,"internalType":"address","name":"tradedOwner","type":"address"}],"name":"OfferTran","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nowBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"OreDrawingLog","type":"event"},{"inputs":[{"internalType":"uint256","name":"firstAmount","type":"uint256"},{"internalType":"uint256","name":"top","type":"uint256"},{"internalType":"uint256","name":"bottom","type":"uint256"}],"name":"changeAttenuationAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"num","type":"uint32"}],"name":"changeBlockLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeDeviationFromScale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeLeastEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voteFactory","type":"address"}],"name":"changeMapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeOfferSpan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeOwnerMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeTranAddition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeTranEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changekDeviate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"checkAttenuationAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkBlockLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"checkBlockMining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"checkBlockOfferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"createBlock","type":"uint256"}],"name":"checkContractState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"serviceCharge","type":"uint256"}],"name":"checkOfferMining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkOfferSpan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkOwnerMining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkTranAddition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkTranEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkleastEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"start","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"maxFindCount","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"find","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceIndex","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"order","type":"uint256"}],"name":"list","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"erc20Amount","type":"uint256"},{"internalType":"address","name":"erc20Address","type":"address"}],"name":"offer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tranEthAmount","type":"uint256"},{"internalType":"uint256","name":"tranTokenAmount","type":"uint256"},{"internalType":"address","name":"tranTokenAddress","type":"address"}],"name":"sendErcBuyEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tranEthAmount","type":"uint256"},{"internalType":"uint256","name":"tranTokenAmount","type":"uint256"},{"internalType":"address","name":"tranTokenAddress","type":"address"}],"name":"sendEthBuyErc","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"toAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"toIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"turnOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"iv","type":"uint256"},{"internalType":"bytes","name":"buf","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"writeUInt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

6080604052600a600681905560016007556002600855678ac7230489e8000060098190558155600b819055600c556005600d5567058d15e176280000600e55600f805463ffffffff1916601917905562249f006010553480156200006257600080fd5b5060405162004ae238038062004ae2833981810160405260208110156200008857600080fd5b5051600180546001600160a01b0319166001600160a01b038316908117909155604080516347f3bf4360e11b815260206004820181905260126024830152716e6573742e76332e6f66666572507269636560701b60448301529151849392638fe77e869260648082019391829003018186803b1580156200010857600080fd5b505afa1580156200011d573d6000803e3d6000fd5b505050506040513d60208110156200013457600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048083018290526024830152631b995cdd60e21b6044830152915192841692638fe77e8692606480840193919291829003018186803b158015620001a657600080fd5b505afa158015620001bb573d6000803e3d6000fd5b505050506040513d6020811015620001d257600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155604080516347f3bf4360e11b81526020928101839052600e60248201526d6e6573742e76332e61626f6e757360901b6044820152905192841692638fe77e8692606480840193919291829003018186803b1580156200024e57600080fd5b505afa15801562000263573d6000803e3d6000fd5b505050506040513d60208110156200027a57600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048201819052601860248301527f6e6573742e6e546f6b656e2e746f6b656e4d617070696e6700000000000000006044830152915192841692638fe77e8692606480840193919291829003018186803b1580156200030657600080fd5b505afa1580156200031b573d6000803e3d6000fd5b505050506040513d60208110156200033257600080fd5b5051600380546001600160a01b0319166001600160a01b03909216919091179055673782dace9d90000060005b600a811015620003b85781601382600a81106200037857fe5b0155620003ad600a62000399846008620003c2602090811b6200333d17901c565b6200042960201b620033961790919060201c565b91506001016200035f565b505050506200051a565b600082620003d35750600062000423565b82820282848281620003e157fe5b0414620004205760405162461bcd60e51b815260040180806020018281038252602181526020018062004ac16021913960400191505060405180910390fd5b90505b92915050565b60006200042083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200047360201b60201c565b60008183620005035760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620004c7578181015183820152602001620004ad565b50505050905090810190601f168015620004f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200051057fe5b0495945050505050565b614597806200052a6000396000f3fe6080604052600436106101e35760003560e01c8063b3e2767c11610102578063e0051aa911610095578063e9ec551d11610064578063e9ec551d146107f1578063f0bbe1ba14610824578063f6a4932f1461084e578063faee702214610880576101e3565b8063e0051aa91461072d578063e18da8bf14610773578063e5d69e3f1461079d578063e7572230146107c7576101e3565b8063cbc7ef09116100d1578063cbc7ef091461066e578063cd6d875614610683578063d900d676146106bc578063dea0799a14610703576101e3565b8063b3e2767c146105bf578063b43ea2d814610605578063b86f25581461062f578063c48c1a7114610659576101e3565b80633d9faf871161017a57806395334db21161014957806395334db2146104645780639abe81c814610497578063a16f460f146104d0578063a781e7f81461058c576101e3565b80633d9faf87146103be57806343c53364146103f45780638d7092e61461040957806391f5f9f31461041e576101e3565b806326a203cb116101b657806326a203cb1461031057806334e66f1e1461033a57806335d63d321461034f5780633aedef141461038e576101e3565b806308920330146101e8578063180d574c14610214578063187f3d981461025057806319aeb49014610265575b600080fd5b3480156101f457600080fd5b506102126004803603602081101561020b57600080fd5b5035610895565b005b34801561022057600080fd5b5061023e6004803603602081101561023757600080fd5b5035610951565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e61096a565b34801561027157600080fd5b5061029b6004803603606081101561028857600080fd5b5080359060208101359060400135610970565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d55781810151838201526020016102bd565b50505050905090810190601f1680156103025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031c57600080fd5b506102126004803603602081101561033357600080fd5b5035610b5a565b34801561034657600080fd5b5061023e610c16565b34801561035b57600080fd5b5061023e6004803603606081101561037257600080fd5b508035906001600160a01b036020820135169060400135610c1c565b34801561039a57600080fd5b50610212600480360360208110156103b157600080fd5b503563ffffffff16610c8b565b3480156103ca57600080fd5b50610212600480360360608110156103e157600080fd5b5080359060208101359060400135610d5e565b34801561040057600080fd5b5061023e610e57565b34801561041557600080fd5b5061023e610e5d565b610212600480360360c081101561043457600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516610e63565b34801561047057600080fd5b5061023e6004803603602081101561048757600080fd5b50356001600160a01b03166116af565b3480156104a357600080fd5b5061023e600480360360408110156104ba57600080fd5b50803590602001356001600160a01b03166116bb565b3480156104dc57600080fd5b5061023e600480360360608110156104f357600080fd5b8135919081019060408101602082013564010000000081111561051557600080fd5b82018360208201111561052757600080fd5b8035906020019184600183028401116401000000008311171561054957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506116e5915050565b34801561059857600080fd5b50610212600480360360208110156105af57600080fd5b50356001600160a01b03166117ca565b610212600480360360c08110156105d557600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516611b42565b34801561061157600080fd5b506102126004803603602081101561062857600080fd5b503561228d565b34801561063b57600080fd5b506102126004803603602081101561065257600080fd5b5035612349565b34801561066557600080fd5b5061023e612444565b34801561067a57600080fd5b5061023e61244a565b34801561068f57600080fd5b5061023e600480360360408110156106a657600080fd5b50803590602001356001600160a01b0316612456565b3480156106c857600080fd5b5061029b600480360360808110156106df57600080fd5b506001600160a01b038135811691602081013591604082013591606001351661247e565b34801561070f57600080fd5b506102126004803603602081101561072657600080fd5b5035612641565b34801561073957600080fd5b506107576004803603602081101561075057600080fd5b50356126fd565b604080516001600160a01b039092168252519081900360200190f35b34801561077f57600080fd5b5061023e6004803603602081101561079657600080fd5b5035612700565b3480156107a957600080fd5b50610212600480360360208110156107c057600080fd5b5035612733565b3480156107d357600080fd5b5061029b600480360360208110156107ea57600080fd5b503561282e565b3480156107fd57600080fd5b506102126004803603602081101561081457600080fd5b50356001600160a01b0316612985565b34801561083057600080fd5b506102126004803603602081101561084757600080fd5b5035612b61565b6102126004803603606081101561086457600080fd5b50803590602081013590604001356001600160a01b0316612c5c565b34801561088c57600080fd5b5061023e6130fb565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d602081101561090a57600080fd5b505161094c576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600c55565b6000601382600a811061096057fe5b015490505b919050565b60085490565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000808085610a7f576000548810156109b55760005488900391505b818710156109c257508581035b600019820191811015610a7a57610a7382600084815481106109e057fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528686613101565b92506109c2565b610ad1565b600054881015610a9157879150610a97565b60005491505b5060005481870190811115610aab57506000545b80821015610ad157610ac482600084815481106109e057fe5b9250816001019150610aab565b6060836040519080825280601f01601f191660200182016040528015610afe576020820181803883390190505b5090505b60001984019315610b4c57848481518110610b1957fe5b602001015160f81c60f81b818581518110610b3057fe5b60200101906001600160f81b031916908160001a905350610b02565b9450505050505b9392505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610ba557600080fd5b505afa158015610bb9573d6000803e3d6000fd5b505050506040513d6020811015610bcf57600080fd5b5051610c11576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600755565b60075490565b600081610c2b57506000610b53565b60008481526011602090815260408083206001600160a01b0387168085529083528184205488855260128452828520918552925290912054610c849190610c78908563ffffffff61333d16565b9063ffffffff61339616565b9050610b53565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b5051610d42576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600f805463ffffffff191663ffffffff92909216919091179055565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610da957600080fd5b505afa158015610dbd573d6000803e3d6000fd5b505050506040513d6020811015610dd357600080fd5b5051610e15576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b8260005b600a811015610e505781601382600a8110610e3057fe5b0155610e4683610c78848763ffffffff61333d16565b9150600101610e19565b5050505050565b600d5490565b600a5490565b333214610eb0576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610ecd6103e8610c786007548761333d90919063ffffffff16565b9050610eef81610ee3898763ffffffff6133d816565b9063ffffffff6133d816565b3414610f2c5760405162461bcd60e51b81526004018080602001828103825260538152602001806144566053913960600191505060405180910390fd5b600a548481610f3757fe5b0615610f745760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000610f7f866116af565b9050610f89614289565b60008281548110610f9657fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e083015260070154610100820152915061102c8a8a87613432565b90506000826020015115156001151514156110495750600161104c565b50805b8260200151156110ad5760085461106a90899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611157565b801561110557600c546110c790899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b60085461111990899063ffffffff61333d16565b8b10156111575760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b6111648360e00151612700565b156111ab576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a0015110156111ff576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611258576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b0316146112b8576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c0015102816112cb57fe5b048714611314576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611329908963ffffffff6133d816565b60608401526080830151611343908863ffffffff61358d16565b608084015260a083015161135d908963ffffffff61358d16565b60a084015260c0830151611377908863ffffffff61358d16565b60c0840152600080548491908690811061138d57fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561143a908c908c90899085906135cf565b868a11156114745761146f33306114578d8b63ffffffff61358d16565b6001600160a01b038a1692919063ffffffff6139d516565b61149f565b61149f33611488898d63ffffffff61358d16565b6001600160a01b038916919063ffffffff613a3516565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916114d59163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b5050845160408051338152600060208201528082018d90526001600160a01b03808c166060830152608082018d9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d602081101561163457600080fd5b505160055460408051631421854f60e31b81526001600160a01b038085166004830152915193945091169163a10c2a78918991602480830192600092919082900301818588803b15801561168757600080fd5b505af115801561169b573d6000803e3d6000fd5b5050505050505b5050505050505050505050565b6001600160a01b031690565b60008281526011602090815260408083206001600160a01b03851684529091529020545b92915050565b6000815b600a850660300160f81b84848060010195508151811061170557fe5b60200101906001600160f81b031916908160001a905350600a85049450600085116116e957825b818111156117c057600085838151811061174257fe5b602001015160f81c60f81b90508582600190039250828151811061176257fe5b602001015160f81c60f81b86848151811061177957fe5b60200101906001600160f81b031916908160001a9053508086838151811061179d57fe5b60200101906001600160f81b031916908160001a9053505081600101915061172c565b5091949350505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561181557600080fd5b505afa158015611829573d6000803e3d6000fd5b505050506040513d602081101561183f57600080fd5b5051611881576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b038316908117909155604080516347f3bf4360e11b815260206004820181905260126024830152716e6573742e76332e6f66666572507269636560701b60448301529151849392638fe77e869260648082019391829003018186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d602081101561192857600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048083018290526024830152631b995cdd60e21b6044830152915192841692638fe77e8692606480840193919291829003018186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155604080516347f3bf4360e11b81526020928101839052600e60248201526d6e6573742e76332e61626f6e757360901b6044820152905192841692638fe77e8692606480840193919291829003018186803b158015611a3e57600080fd5b505afa158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048201819052601860248301527f6e6573742e6e546f6b656e2e746f6b656e4d617070696e6700000000000000006044830152915192841692638fe77e8692606480840193919291829003018186803b158015611af357600080fd5b505afa158015611b07573d6000803e3d6000fd5b505050506040513d6020811015611b1d57600080fd5b5051600380546001600160a01b0319166001600160a01b039092169190911790555050565b333214611b8f576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000611bac6103e8610c786007548761333d90919063ffffffff16565b9050611bc281610ee3898763ffffffff61358d16565b3414611bff5760405162461bcd60e51b81526004018080602001828103825260548152602001806144026054913960600191505060405180910390fd5b600a548481611c0a57fe5b0615611c475760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000611c52866116af565b9050611c5c614289565b60008281548110611c6957fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e0830152600701546101008201529150611cff8a8a87613432565b9050600082602001511515600115151415611d1c57506001611d1f565b50805b826020015115611d8057600854611d3d90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e2a565b8015611dd857600c54611d9a90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b600854611dec90899063ffffffff61333d16565b8b1015611e2a5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e378360e00151612700565b15611e7e576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a001511015611ed2576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611f2b576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b031614611f8b576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c001510281611f9e57fe5b048714611fe7576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611ffc908963ffffffff61358d16565b60608401526080830151612016908863ffffffff6133d816565b608084015260a0830151612030908963ffffffff61358d16565b60a084015260c083015161204a908863ffffffff61358d16565b60c0840152600080548491908690811061206057fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561210d908c908c90899085906135cf565b61212233306114578a8e63ffffffff6133d816565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916121589163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b50508451604080513381526001600160a01b03808c1660208301528183018d905260006060830152608082018e9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156122d857600080fd5b505afa1580156122ec573d6000803e3d6000fd5b505050506040513d602081101561230257600080fd5b5051612344576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600b55565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561239457600080fd5b505afa1580156123a8573d6000803e3d6000fd5b505050506040513d60208110156123be57600080fd5b5051612400576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b6000811161243f5760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600855565b60005490565b600f5463ffffffff1690565b60009182526012602090815260408084206001600160a01b0393909316845291905290205490565b604080516207a1208082526207a1408201909252606091829190602082018180388339019050506000805491925090816001600160a01b038916156124c9576124c6896116af565b91505b868211156124d657508581035b6000881180156124ea575060001982019181105b156125b9576124f7614289565b6000838154811061250457fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b03808216808652600160a01b90920460ff1615159585019590955260018201548516928401929092526002810154606084015260038101546080840152600481015460a0840152600581015460c0840152600681015460e08401526007015461010083015290925090881614156125b357600019909801976125b083828787613101565b93505b506124d6565b6060836040519080825280601f01601f1916602001820160405280156125e6576020820181803883390190505b5090505b600019840193156126345784848151811061260157fe5b602001015160f81c60f81b81858151811061261857fe5b60200101906001600160f81b031916908160001a9053506125ea565b9998505050505050505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561268c57600080fd5b505afa1580156126a0573d6000803e3d6000fd5b505050506040513d60208110156126b657600080fd5b50516126f8576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600d55565b90565b600f5460009063ffffffff9081169061271d904390859061358d16565b111561272b57506001610965565b506000919050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561277e57600080fd5b505afa158015612792573d6000803e3d6000fd5b505050506040513d60208110156127a857600080fd5b50516127ea576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600081116128295760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600955565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000809050612900846000868154811061286d57fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528484613101565b90506060816040519080825280601f01601f19166020018201604052801561292f576020820181803883390190505b5090505b6000198201911561297d5782828151811061294a57fe5b602001015160f81c60f81b81838151811061296157fe5b60200101906001600160f81b031916908160001a905350612933565b949350505050565b3332146129d2576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006129dd826116af565b905060008082815481106129ed57fe5b90600052602060002090600802019050612a0a8160060154612700565b600114612a53576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b600281015415612a7f5760028101805460009091558154612a7d906001600160a01b031682613a87565b505b600381015415612b2057600381018054600091829055600183015483546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394919092169263a9059cbb926044808201936020939283900390910190829087803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b505050506040513d6020811015612b1c57600080fd5b5050505b600781015415612b5c576006810154600182015460078301548354612b5393926001600160a01b03908116929116613ad4565b50600060078201555b505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015612bac57600080fd5b505afa158015612bc0573d6000803e3d6000fd5b505050506040513d6020811015612bd657600080fd5b5051612c18576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b60008111612c575760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600a55565b333214612ca9576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6003546040805163323442c360e11b81526001600160a01b03848116600483015291516000939290921691636468858691602480820192602092909190829003018186803b158015612cfa57600080fd5b505afa158015612d0e573d6000803e3d6000fd5b505050506040513d6020811015612d2457600080fd5b505190506001600160a01b038116612d3b57600080fd5b600080612d49868686613432565b90508015612dc857600c54600954612d669163ffffffff61333d16565b861015612da45760405162461bcd60e51b81526004018080602001828103825260408152602001806145226040913960400191505060405180910390fd5b612dc16103e8610c7860065460095461333d90919063ffffffff16565b9150612de6565b612de36103e8610c786006548961333d90919063ffffffff16565b91505b612df6868363ffffffff6133d816565b341015612e345760405162461bcd60e51b815260040180806020018281038252604f8152602001806144a9604f913960600191505060405180910390fd5b6000612e56612e49888563ffffffff6133d816565b349063ffffffff61358d16565b90508015612e6857612e683382613a87565b612e7587878785876135cf565b612e906001600160a01b03861633308963ffffffff6139d516565b6005546040805163324f2f5560e11b81526001600160a01b0387811660048301529151919092169163649e5eaa91869160248082019260009290919082900301818588803b158015612ee157600080fd5b505af1158015612ef5573d6000803e3d6000fd5b50504360009081526011602090815260408083206001600160a01b038c16845290915290205415159250613095915050576000612f3185613cd5565b90506000859050806001600160a01b031663a9059cbb826001600160a01b03166328e6a33f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8057600080fd5b505afa158015612f94573d6000803e3d6000fd5b505050506040513d6020811015612faa57600080fd5b5051600d54612fc790606490610c7890889063ffffffff61333d16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561301657600080fd5b505af115801561302a573d6000803e3d6000fd5b505050506040513d602081101561304057600080fd5b5050600d5461306e9061306190606490610c7890869063ffffffff61333d16565b839063ffffffff61358d16565b4360009081526012602090815260408083206001600160a01b038c16845290915290205550505b4360009081526011602090815260408083206001600160a01b03891684529091529020546130c9908463ffffffff6133d816565b4360009081526011602090815260408083206001600160a01b0390991683529790529590952094909455505050505050565b60095490565b600061311661310f866126fd565b8484613e65565b8351600182019350600b60fa1b918591811061312e57fe5b60200101906001600160f81b031916908160001a9053508351613152908484613e65565b8351600182019350600b60fa1b918591811061316a57fe5b60200101906001600160f81b031916908160001a90535061319084604001518484613e65565b8351600182019350600b60fa1b91859181106131a857fe5b60200101906001600160f81b031916908160001a9053506131ce846060015184846116e5565b8351600182019350600b60fa1b91859181106131e657fe5b60200101906001600160f81b031916908160001a90535061320c846080015184846116e5565b8351600182019350600b60fa1b918591811061322457fe5b60200101906001600160f81b031916908160001a90535061324a8460a0015184846116e5565b8351600182019350600b60fa1b918591811061326257fe5b60200101906001600160f81b031916908160001a9053506132888460c0015184846116e5565b8351600182019350600b60fa1b91859181106132a057fe5b60200101906001600160f81b031916908160001a9053506132c68460e0015184846116e5565b8351600182019350600b60fa1b91859181106132de57fe5b60200101906001600160f81b031916908160001a90535061330584610100015184846116e5565b8351600182019350600b60fa1b918591811061331d57fe5b60200101906001600160f81b031916908160001a90535090949350505050565b60008261334c575060006116df565b8282028284828161335957fe5b0414610b535760405162461bcd60e51b81526004018080602001828103825260218152602001806143a16021913960400191505060405180910390fd5b6000610b5383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f9c565b600082820183811015610b53576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6002546040805163207ab49360e21b81526001600160a01b03848116600483015282516000948594859493909116926381ead24c9260248083019392829003018186803b15801561348257600080fd5b505afa158015613496573d6000803e3d6000fd5b505050506040513d60408110156134ac57600080fd5b50805160209091015190925090508115806134c5575080155b156134d557600092505050610b53565b60006135206134eb84606463ffffffff61333d16565b610c78613504600b5460646133d890919063ffffffff16565b6135148b8763ffffffff61333d16565b9063ffffffff61333d16565b905080861161358057600061356861353f85606463ffffffff61333d16565b610c78613558600b54606461358d90919063ffffffff16565b6135148c8863ffffffff61333d16565b905080871061357e576000945050505050610b53565b505b5060019695505050505050565b6000610b5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061403e565b6009548510156136105760405162461bcd60e51b815260040180806020018281038252602b8152602001806142ea602b913960400191505060405180910390fd5b600a54858161361b57fe5b061561366e576040805162461bcd60e51b815260206004820152601860248201527f4e6f6e20636f6d706c69616e74206173736574207370616e0000000000000000604482015290519081900360640190fd5b600a5461368290869063ffffffff61339616565b848161368a57fe5b06156136dd576040805162461bcd60e51b815260206004820152601d60248201527f4173736574207175616e74697479206973206e6f742064697669646564000000604482015290519081900360640190fd5b600084116136ea57600080fd5b6000547fb3ed50358b669287aff082dbd5407bd75efcac18c9267d946074dc90d8aae89890613718906126fd565b600f54604080516001600160a01b03938416815292871660208401528281018990526060830188905263ffffffff909116608083015260a08201849052519081900360c00190a16040805161012081018252338152831515602082019081526001600160a01b03868116938301938452606083018981526080840189815260a085018b815260c086018b81524360e0880181815261010089018b81526000805460018101825590805299516008909a027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810180549a511515600160a01b0260ff60a01b199c8b166001600160a01b03199c8d16179c909c169b909b17909a5599517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648a018054918916919099161790975593517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56588015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e566870155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e567860155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56885015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56984015592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56a90920191909155600254600f549216916317ae7a5891889188916139569163ffffffff908116906133d816565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526001600160a01b03871660648301523360848301525160a480830192600092919082900301818387803b1580156139b657600080fd5b505af11580156139ca573d6000803e3d6000fd5b505050505050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613a2f908590614098565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612b5c908490614098565b6000613a9b836001600160a01b03166126fd565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015613a2f573d6000803e3d6000fd5b60008481526011602090815260408083206001600160a01b038716808552908352818420548885526012845282852091855292528220548291613b2191610c78908763ffffffff61333d16565b6003546040805163323442c360e11b81526001600160a01b038981166004830152915193945060009391909216916364688586916024808301926020929190829003018186803b158015613b7457600080fd5b505afa158015613b88573d6000803e3d6000fd5b505050506040513d6020811015613b9e57600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0387811660048301526024820186905291519293509083169163a9059cbb916044808201926020929091908290030181600087803b158015613bf657600080fd5b505af1158015613c0a573d6000803e3d6000fd5b505050506040513d6020811015613c2057600080fd5b5051613c66576040805162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c75726560801b604482015290519081900360640190fd5b60008781526011602090815260408083206001600160a01b038a16808552908352928190205481518b8152928301939093528181019290925290517fd2107cf4448eaa7b67fe8ee34698459074c40ccffc5e060f86f4130f35aaa4ee9181900360600190a15095945050505050565b600080829050600080826001600160a01b03166392c088716040518163ffffffff1660e01b8152600401604080518083038186803b158015613d1657600080fd5b505afa158015613d2a573d6000803e3d6000fd5b505050506040513d6040811015613d4057600080fd5b5080516020909101516010549193509150600090613d6890610c78438663ffffffff61358d16565b90506000806009831115613d7f5750600e54613d91565b601383600a8110613d8c57fe5b015490505b613db1613da4438663ffffffff61358d16565b829063ffffffff61333d16565b9150856001600160a01b03166381fa5431836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613df957600080fd5b505af1158015613e0d573d6000803e3d6000fd5b505060408051438152602081018690526001600160a01b038c168183015290517fbf10eb38ae3fef6350212985b724124761ec1a488dc5481048f20c389099e09d9350908190036060019150a1509695505050505050565b60006001600160a01b038416602883015b600f8216600a811015613eb8578060300160f81b868680600101975081518110613e9c57fe5b60200101906001600160f81b031916908160001a905350613ee9565b8060570160f81b868680600101975081518110613ed157fe5b60200101906001600160f81b031916908160001a9053505b60108304925050808410613e765760271901835b81811115613f91576000868381518110613f1357fe5b602001015160f81c60f81b905086826001900392508281518110613f3357fe5b602001015160f81c60f81b878481518110613f4a57fe5b60200101906001600160f81b031916908160001a90535080878381518110613f6e57fe5b60200101906001600160f81b031916908160001a90535050816001019150613efd565b509295945050505050565b600081836140285760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fed578181015183820152602001613fd5565b50505050905090810190601f16801561401a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161403457fe5b0495945050505050565b600081848411156140905760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613fed578181015183820152602001613fd5565b505050900390565b6140aa826001600160a01b0316614250565b6140fb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106141395780518252601f19909201916020918201910161411a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461419b576040519150601f19603f3d011682016040523d82523d6000602084013e6141a0565b606091505b5091509150816141f7576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115613a2f5780806020019051602081101561421357600080fd5b5051613a2f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144f8602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061297d575050151592915050565b60405180610120016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe457468207363616c6520697320736d616c6c6572207468616e20746865206d696e696d756d207363616c655472616e73616374696f6e2073697a6520646f6573206e6f74206d656574206173736574207370616e506172616d65746572206e6565647320746f2062652067726561746572207468616e2030457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e20322074696d6573206f66207472616e73616374696f6e207363616c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f66207472616e73616374696f6e207363616c656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573207472616e73616374696f6e2068616e646c696e67206665656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f746174696f6e20657468207175616e7469747920706c7573207472616e73616374696f6e2065746820706c75736d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573204d696e696e672068616e646c696e67206665655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f6620746865206d696e696d756d207363616c65a26469706673582212201abb1bbe3f8f8756f9e4b5108a0bdcb6f162e61194794f574e54f679bf0a462064736f6c63430006000033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000006cd5698e8854fb6879d6b1c694223b389b465dea

Deployed Bytecode

0x6080604052600436106101e35760003560e01c8063b3e2767c11610102578063e0051aa911610095578063e9ec551d11610064578063e9ec551d146107f1578063f0bbe1ba14610824578063f6a4932f1461084e578063faee702214610880576101e3565b8063e0051aa91461072d578063e18da8bf14610773578063e5d69e3f1461079d578063e7572230146107c7576101e3565b8063cbc7ef09116100d1578063cbc7ef091461066e578063cd6d875614610683578063d900d676146106bc578063dea0799a14610703576101e3565b8063b3e2767c146105bf578063b43ea2d814610605578063b86f25581461062f578063c48c1a7114610659576101e3565b80633d9faf871161017a57806395334db21161014957806395334db2146104645780639abe81c814610497578063a16f460f146104d0578063a781e7f81461058c576101e3565b80633d9faf87146103be57806343c53364146103f45780638d7092e61461040957806391f5f9f31461041e576101e3565b806326a203cb116101b657806326a203cb1461031057806334e66f1e1461033a57806335d63d321461034f5780633aedef141461038e576101e3565b806308920330146101e8578063180d574c14610214578063187f3d981461025057806319aeb49014610265575b600080fd5b3480156101f457600080fd5b506102126004803603602081101561020b57600080fd5b5035610895565b005b34801561022057600080fd5b5061023e6004803603602081101561023757600080fd5b5035610951565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e61096a565b34801561027157600080fd5b5061029b6004803603606081101561028857600080fd5b5080359060208101359060400135610970565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d55781810151838201526020016102bd565b50505050905090810190601f1680156103025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031c57600080fd5b506102126004803603602081101561033357600080fd5b5035610b5a565b34801561034657600080fd5b5061023e610c16565b34801561035b57600080fd5b5061023e6004803603606081101561037257600080fd5b508035906001600160a01b036020820135169060400135610c1c565b34801561039a57600080fd5b50610212600480360360208110156103b157600080fd5b503563ffffffff16610c8b565b3480156103ca57600080fd5b50610212600480360360608110156103e157600080fd5b5080359060208101359060400135610d5e565b34801561040057600080fd5b5061023e610e57565b34801561041557600080fd5b5061023e610e5d565b610212600480360360c081101561043457600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516610e63565b34801561047057600080fd5b5061023e6004803603602081101561048757600080fd5b50356001600160a01b03166116af565b3480156104a357600080fd5b5061023e600480360360408110156104ba57600080fd5b50803590602001356001600160a01b03166116bb565b3480156104dc57600080fd5b5061023e600480360360608110156104f357600080fd5b8135919081019060408101602082013564010000000081111561051557600080fd5b82018360208201111561052757600080fd5b8035906020019184600183028401116401000000008311171561054957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506116e5915050565b34801561059857600080fd5b50610212600480360360208110156105af57600080fd5b50356001600160a01b03166117ca565b610212600480360360c08110156105d557600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516611b42565b34801561061157600080fd5b506102126004803603602081101561062857600080fd5b503561228d565b34801561063b57600080fd5b506102126004803603602081101561065257600080fd5b5035612349565b34801561066557600080fd5b5061023e612444565b34801561067a57600080fd5b5061023e61244a565b34801561068f57600080fd5b5061023e600480360360408110156106a657600080fd5b50803590602001356001600160a01b0316612456565b3480156106c857600080fd5b5061029b600480360360808110156106df57600080fd5b506001600160a01b038135811691602081013591604082013591606001351661247e565b34801561070f57600080fd5b506102126004803603602081101561072657600080fd5b5035612641565b34801561073957600080fd5b506107576004803603602081101561075057600080fd5b50356126fd565b604080516001600160a01b039092168252519081900360200190f35b34801561077f57600080fd5b5061023e6004803603602081101561079657600080fd5b5035612700565b3480156107a957600080fd5b50610212600480360360208110156107c057600080fd5b5035612733565b3480156107d357600080fd5b5061029b600480360360208110156107ea57600080fd5b503561282e565b3480156107fd57600080fd5b506102126004803603602081101561081457600080fd5b50356001600160a01b0316612985565b34801561083057600080fd5b506102126004803603602081101561084757600080fd5b5035612b61565b6102126004803603606081101561086457600080fd5b50803590602081013590604001356001600160a01b0316612c5c565b34801561088c57600080fd5b5061023e6130fb565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d602081101561090a57600080fd5b505161094c576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600c55565b6000601382600a811061096057fe5b015490505b919050565b60085490565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000808085610a7f576000548810156109b55760005488900391505b818710156109c257508581035b600019820191811015610a7a57610a7382600084815481106109e057fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528686613101565b92506109c2565b610ad1565b600054881015610a9157879150610a97565b60005491505b5060005481870190811115610aab57506000545b80821015610ad157610ac482600084815481106109e057fe5b9250816001019150610aab565b6060836040519080825280601f01601f191660200182016040528015610afe576020820181803883390190505b5090505b60001984019315610b4c57848481518110610b1957fe5b602001015160f81c60f81b818581518110610b3057fe5b60200101906001600160f81b031916908160001a905350610b02565b9450505050505b9392505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610ba557600080fd5b505afa158015610bb9573d6000803e3d6000fd5b505050506040513d6020811015610bcf57600080fd5b5051610c11576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600755565b60075490565b600081610c2b57506000610b53565b60008481526011602090815260408083206001600160a01b0387168085529083528184205488855260128452828520918552925290912054610c849190610c78908563ffffffff61333d16565b9063ffffffff61339616565b9050610b53565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b5051610d42576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600f805463ffffffff191663ffffffff92909216919091179055565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610da957600080fd5b505afa158015610dbd573d6000803e3d6000fd5b505050506040513d6020811015610dd357600080fd5b5051610e15576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b8260005b600a811015610e505781601382600a8110610e3057fe5b0155610e4683610c78848763ffffffff61333d16565b9150600101610e19565b5050505050565b600d5490565b600a5490565b333214610eb0576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610ecd6103e8610c786007548761333d90919063ffffffff16565b9050610eef81610ee3898763ffffffff6133d816565b9063ffffffff6133d816565b3414610f2c5760405162461bcd60e51b81526004018080602001828103825260538152602001806144566053913960600191505060405180910390fd5b600a548481610f3757fe5b0615610f745760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000610f7f866116af565b9050610f89614289565b60008281548110610f9657fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e083015260070154610100820152915061102c8a8a87613432565b90506000826020015115156001151514156110495750600161104c565b50805b8260200151156110ad5760085461106a90899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611157565b801561110557600c546110c790899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b60085461111990899063ffffffff61333d16565b8b10156111575760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b6111648360e00151612700565b156111ab576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a0015110156111ff576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611258576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b0316146112b8576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c0015102816112cb57fe5b048714611314576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611329908963ffffffff6133d816565b60608401526080830151611343908863ffffffff61358d16565b608084015260a083015161135d908963ffffffff61358d16565b60a084015260c0830151611377908863ffffffff61358d16565b60c0840152600080548491908690811061138d57fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561143a908c908c90899085906135cf565b868a11156114745761146f33306114578d8b63ffffffff61358d16565b6001600160a01b038a1692919063ffffffff6139d516565b61149f565b61149f33611488898d63ffffffff61358d16565b6001600160a01b038916919063ffffffff613a3516565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916114d59163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b5050845160408051338152600060208201528082018d90526001600160a01b03808c166060830152608082018d9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d602081101561163457600080fd5b505160055460408051631421854f60e31b81526001600160a01b038085166004830152915193945091169163a10c2a78918991602480830192600092919082900301818588803b15801561168757600080fd5b505af115801561169b573d6000803e3d6000fd5b5050505050505b5050505050505050505050565b6001600160a01b031690565b60008281526011602090815260408083206001600160a01b03851684529091529020545b92915050565b6000815b600a850660300160f81b84848060010195508151811061170557fe5b60200101906001600160f81b031916908160001a905350600a85049450600085116116e957825b818111156117c057600085838151811061174257fe5b602001015160f81c60f81b90508582600190039250828151811061176257fe5b602001015160f81c60f81b86848151811061177957fe5b60200101906001600160f81b031916908160001a9053508086838151811061179d57fe5b60200101906001600160f81b031916908160001a9053505081600101915061172c565b5091949350505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561181557600080fd5b505afa158015611829573d6000803e3d6000fd5b505050506040513d602081101561183f57600080fd5b5051611881576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b038316908117909155604080516347f3bf4360e11b815260206004820181905260126024830152716e6573742e76332e6f66666572507269636560701b60448301529151849392638fe77e869260648082019391829003018186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d602081101561192857600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048083018290526024830152631b995cdd60e21b6044830152915192841692638fe77e8692606480840193919291829003018186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155604080516347f3bf4360e11b81526020928101839052600e60248201526d6e6573742e76332e61626f6e757360901b6044820152905192841692638fe77e8692606480840193919291829003018186803b158015611a3e57600080fd5b505afa158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048201819052601860248301527f6e6573742e6e546f6b656e2e746f6b656e4d617070696e6700000000000000006044830152915192841692638fe77e8692606480840193919291829003018186803b158015611af357600080fd5b505afa158015611b07573d6000803e3d6000fd5b505050506040513d6020811015611b1d57600080fd5b5051600380546001600160a01b0319166001600160a01b039092169190911790555050565b333214611b8f576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000611bac6103e8610c786007548761333d90919063ffffffff16565b9050611bc281610ee3898763ffffffff61358d16565b3414611bff5760405162461bcd60e51b81526004018080602001828103825260548152602001806144026054913960600191505060405180910390fd5b600a548481611c0a57fe5b0615611c475760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000611c52866116af565b9050611c5c614289565b60008281548110611c6957fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e0830152600701546101008201529150611cff8a8a87613432565b9050600082602001511515600115151415611d1c57506001611d1f565b50805b826020015115611d8057600854611d3d90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e2a565b8015611dd857600c54611d9a90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b600854611dec90899063ffffffff61333d16565b8b1015611e2a5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e378360e00151612700565b15611e7e576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a001511015611ed2576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611f2b576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b031614611f8b576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c001510281611f9e57fe5b048714611fe7576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611ffc908963ffffffff61358d16565b60608401526080830151612016908863ffffffff6133d816565b608084015260a0830151612030908963ffffffff61358d16565b60a084015260c083015161204a908863ffffffff61358d16565b60c0840152600080548491908690811061206057fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561210d908c908c90899085906135cf565b61212233306114578a8e63ffffffff6133d816565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916121589163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b50508451604080513381526001600160a01b03808c1660208301528183018d905260006060830152608082018e9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156122d857600080fd5b505afa1580156122ec573d6000803e3d6000fd5b505050506040513d602081101561230257600080fd5b5051612344576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600b55565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561239457600080fd5b505afa1580156123a8573d6000803e3d6000fd5b505050506040513d60208110156123be57600080fd5b5051612400576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b6000811161243f5760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600855565b60005490565b600f5463ffffffff1690565b60009182526012602090815260408084206001600160a01b0393909316845291905290205490565b604080516207a1208082526207a1408201909252606091829190602082018180388339019050506000805491925090816001600160a01b038916156124c9576124c6896116af565b91505b868211156124d657508581035b6000881180156124ea575060001982019181105b156125b9576124f7614289565b6000838154811061250457fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b03808216808652600160a01b90920460ff1615159585019590955260018201548516928401929092526002810154606084015260038101546080840152600481015460a0840152600581015460c0840152600681015460e08401526007015461010083015290925090881614156125b357600019909801976125b083828787613101565b93505b506124d6565b6060836040519080825280601f01601f1916602001820160405280156125e6576020820181803883390190505b5090505b600019840193156126345784848151811061260157fe5b602001015160f81c60f81b81858151811061261857fe5b60200101906001600160f81b031916908160001a9053506125ea565b9998505050505050505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561268c57600080fd5b505afa1580156126a0573d6000803e3d6000fd5b505050506040513d60208110156126b657600080fd5b50516126f8576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600d55565b90565b600f5460009063ffffffff9081169061271d904390859061358d16565b111561272b57506001610965565b506000919050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561277e57600080fd5b505afa158015612792573d6000803e3d6000fd5b505050506040513d60208110156127a857600080fd5b50516127ea576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600081116128295760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600955565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000809050612900846000868154811061286d57fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528484613101565b90506060816040519080825280601f01601f19166020018201604052801561292f576020820181803883390190505b5090505b6000198201911561297d5782828151811061294a57fe5b602001015160f81c60f81b81838151811061296157fe5b60200101906001600160f81b031916908160001a905350612933565b949350505050565b3332146129d2576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006129dd826116af565b905060008082815481106129ed57fe5b90600052602060002090600802019050612a0a8160060154612700565b600114612a53576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b600281015415612a7f5760028101805460009091558154612a7d906001600160a01b031682613a87565b505b600381015415612b2057600381018054600091829055600183015483546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394919092169263a9059cbb926044808201936020939283900390910190829087803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b505050506040513d6020811015612b1c57600080fd5b5050505b600781015415612b5c576006810154600182015460078301548354612b5393926001600160a01b03908116929116613ad4565b50600060078201555b505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015612bac57600080fd5b505afa158015612bc0573d6000803e3d6000fd5b505050506040513d6020811015612bd657600080fd5b5051612c18576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b60008111612c575760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600a55565b333214612ca9576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6003546040805163323442c360e11b81526001600160a01b03848116600483015291516000939290921691636468858691602480820192602092909190829003018186803b158015612cfa57600080fd5b505afa158015612d0e573d6000803e3d6000fd5b505050506040513d6020811015612d2457600080fd5b505190506001600160a01b038116612d3b57600080fd5b600080612d49868686613432565b90508015612dc857600c54600954612d669163ffffffff61333d16565b861015612da45760405162461bcd60e51b81526004018080602001828103825260408152602001806145226040913960400191505060405180910390fd5b612dc16103e8610c7860065460095461333d90919063ffffffff16565b9150612de6565b612de36103e8610c786006548961333d90919063ffffffff16565b91505b612df6868363ffffffff6133d816565b341015612e345760405162461bcd60e51b815260040180806020018281038252604f8152602001806144a9604f913960600191505060405180910390fd5b6000612e56612e49888563ffffffff6133d816565b349063ffffffff61358d16565b90508015612e6857612e683382613a87565b612e7587878785876135cf565b612e906001600160a01b03861633308963ffffffff6139d516565b6005546040805163324f2f5560e11b81526001600160a01b0387811660048301529151919092169163649e5eaa91869160248082019260009290919082900301818588803b158015612ee157600080fd5b505af1158015612ef5573d6000803e3d6000fd5b50504360009081526011602090815260408083206001600160a01b038c16845290915290205415159250613095915050576000612f3185613cd5565b90506000859050806001600160a01b031663a9059cbb826001600160a01b03166328e6a33f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8057600080fd5b505afa158015612f94573d6000803e3d6000fd5b505050506040513d6020811015612faa57600080fd5b5051600d54612fc790606490610c7890889063ffffffff61333d16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561301657600080fd5b505af115801561302a573d6000803e3d6000fd5b505050506040513d602081101561304057600080fd5b5050600d5461306e9061306190606490610c7890869063ffffffff61333d16565b839063ffffffff61358d16565b4360009081526012602090815260408083206001600160a01b038c16845290915290205550505b4360009081526011602090815260408083206001600160a01b03891684529091529020546130c9908463ffffffff6133d816565b4360009081526011602090815260408083206001600160a01b0390991683529790529590952094909455505050505050565b60095490565b600061311661310f866126fd565b8484613e65565b8351600182019350600b60fa1b918591811061312e57fe5b60200101906001600160f81b031916908160001a9053508351613152908484613e65565b8351600182019350600b60fa1b918591811061316a57fe5b60200101906001600160f81b031916908160001a90535061319084604001518484613e65565b8351600182019350600b60fa1b91859181106131a857fe5b60200101906001600160f81b031916908160001a9053506131ce846060015184846116e5565b8351600182019350600b60fa1b91859181106131e657fe5b60200101906001600160f81b031916908160001a90535061320c846080015184846116e5565b8351600182019350600b60fa1b918591811061322457fe5b60200101906001600160f81b031916908160001a90535061324a8460a0015184846116e5565b8351600182019350600b60fa1b918591811061326257fe5b60200101906001600160f81b031916908160001a9053506132888460c0015184846116e5565b8351600182019350600b60fa1b91859181106132a057fe5b60200101906001600160f81b031916908160001a9053506132c68460e0015184846116e5565b8351600182019350600b60fa1b91859181106132de57fe5b60200101906001600160f81b031916908160001a90535061330584610100015184846116e5565b8351600182019350600b60fa1b918591811061331d57fe5b60200101906001600160f81b031916908160001a90535090949350505050565b60008261334c575060006116df565b8282028284828161335957fe5b0414610b535760405162461bcd60e51b81526004018080602001828103825260218152602001806143a16021913960400191505060405180910390fd5b6000610b5383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f9c565b600082820183811015610b53576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6002546040805163207ab49360e21b81526001600160a01b03848116600483015282516000948594859493909116926381ead24c9260248083019392829003018186803b15801561348257600080fd5b505afa158015613496573d6000803e3d6000fd5b505050506040513d60408110156134ac57600080fd5b50805160209091015190925090508115806134c5575080155b156134d557600092505050610b53565b60006135206134eb84606463ffffffff61333d16565b610c78613504600b5460646133d890919063ffffffff16565b6135148b8763ffffffff61333d16565b9063ffffffff61333d16565b905080861161358057600061356861353f85606463ffffffff61333d16565b610c78613558600b54606461358d90919063ffffffff16565b6135148c8863ffffffff61333d16565b905080871061357e576000945050505050610b53565b505b5060019695505050505050565b6000610b5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061403e565b6009548510156136105760405162461bcd60e51b815260040180806020018281038252602b8152602001806142ea602b913960400191505060405180910390fd5b600a54858161361b57fe5b061561366e576040805162461bcd60e51b815260206004820152601860248201527f4e6f6e20636f6d706c69616e74206173736574207370616e0000000000000000604482015290519081900360640190fd5b600a5461368290869063ffffffff61339616565b848161368a57fe5b06156136dd576040805162461bcd60e51b815260206004820152601d60248201527f4173736574207175616e74697479206973206e6f742064697669646564000000604482015290519081900360640190fd5b600084116136ea57600080fd5b6000547fb3ed50358b669287aff082dbd5407bd75efcac18c9267d946074dc90d8aae89890613718906126fd565b600f54604080516001600160a01b03938416815292871660208401528281018990526060830188905263ffffffff909116608083015260a08201849052519081900360c00190a16040805161012081018252338152831515602082019081526001600160a01b03868116938301938452606083018981526080840189815260a085018b815260c086018b81524360e0880181815261010089018b81526000805460018101825590805299516008909a027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810180549a511515600160a01b0260ff60a01b199c8b166001600160a01b03199c8d16179c909c169b909b17909a5599517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648a018054918916919099161790975593517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56588015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e566870155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e567860155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56885015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56984015592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56a90920191909155600254600f549216916317ae7a5891889188916139569163ffffffff908116906133d816565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526001600160a01b03871660648301523360848301525160a480830192600092919082900301818387803b1580156139b657600080fd5b505af11580156139ca573d6000803e3d6000fd5b505050505050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613a2f908590614098565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612b5c908490614098565b6000613a9b836001600160a01b03166126fd565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015613a2f573d6000803e3d6000fd5b60008481526011602090815260408083206001600160a01b038716808552908352818420548885526012845282852091855292528220548291613b2191610c78908763ffffffff61333d16565b6003546040805163323442c360e11b81526001600160a01b038981166004830152915193945060009391909216916364688586916024808301926020929190829003018186803b158015613b7457600080fd5b505afa158015613b88573d6000803e3d6000fd5b505050506040513d6020811015613b9e57600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0387811660048301526024820186905291519293509083169163a9059cbb916044808201926020929091908290030181600087803b158015613bf657600080fd5b505af1158015613c0a573d6000803e3d6000fd5b505050506040513d6020811015613c2057600080fd5b5051613c66576040805162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c75726560801b604482015290519081900360640190fd5b60008781526011602090815260408083206001600160a01b038a16808552908352928190205481518b8152928301939093528181019290925290517fd2107cf4448eaa7b67fe8ee34698459074c40ccffc5e060f86f4130f35aaa4ee9181900360600190a15095945050505050565b600080829050600080826001600160a01b03166392c088716040518163ffffffff1660e01b8152600401604080518083038186803b158015613d1657600080fd5b505afa158015613d2a573d6000803e3d6000fd5b505050506040513d6040811015613d4057600080fd5b5080516020909101516010549193509150600090613d6890610c78438663ffffffff61358d16565b90506000806009831115613d7f5750600e54613d91565b601383600a8110613d8c57fe5b015490505b613db1613da4438663ffffffff61358d16565b829063ffffffff61333d16565b9150856001600160a01b03166381fa5431836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613df957600080fd5b505af1158015613e0d573d6000803e3d6000fd5b505060408051438152602081018690526001600160a01b038c168183015290517fbf10eb38ae3fef6350212985b724124761ec1a488dc5481048f20c389099e09d9350908190036060019150a1509695505050505050565b60006001600160a01b038416602883015b600f8216600a811015613eb8578060300160f81b868680600101975081518110613e9c57fe5b60200101906001600160f81b031916908160001a905350613ee9565b8060570160f81b868680600101975081518110613ed157fe5b60200101906001600160f81b031916908160001a9053505b60108304925050808410613e765760271901835b81811115613f91576000868381518110613f1357fe5b602001015160f81c60f81b905086826001900392508281518110613f3357fe5b602001015160f81c60f81b878481518110613f4a57fe5b60200101906001600160f81b031916908160001a90535080878381518110613f6e57fe5b60200101906001600160f81b031916908160001a90535050816001019150613efd565b509295945050505050565b600081836140285760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fed578181015183820152602001613fd5565b50505050905090810190601f16801561401a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161403457fe5b0495945050505050565b600081848411156140905760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613fed578181015183820152602001613fd5565b505050900390565b6140aa826001600160a01b0316614250565b6140fb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106141395780518252601f19909201916020918201910161411a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461419b576040519150601f19603f3d011682016040523d82523d6000602084013e6141a0565b606091505b5091509150816141f7576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115613a2f5780806020019051602081101561421357600080fd5b5051613a2f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144f8602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061297d575050151592915050565b60405180610120016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe457468207363616c6520697320736d616c6c6572207468616e20746865206d696e696d756d207363616c655472616e73616374696f6e2073697a6520646f6573206e6f74206d656574206173736574207370616e506172616d65746572206e6565647320746f2062652067726561746572207468616e2030457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e20322074696d6573206f66207472616e73616374696f6e207363616c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f66207472616e73616374696f6e207363616c656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573207472616e73616374696f6e2068616e646c696e67206665656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f746174696f6e20657468207175616e7469747920706c7573207472616e73616374696f6e2065746820706c75736d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573204d696e696e672068616e646c696e67206665655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f6620746865206d696e696d756d207363616c65a26469706673582212201abb1bbe3f8f8756f9e4b5108a0bdcb6f162e61194794f574e54f679bf0a462064736f6c63430006000033

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

0000000000000000000000006cd5698e8854fb6879d6b1c694223b389b465dea

-----Decoded View---------------
Arg [0] : voteFactory (address): 0x6Cd5698E8854Fb6879d6B1C694223b389B465dea

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006cd5698e8854fb6879d6b1c694223b389b465dea


Deployed Bytecode Sourcemap

106:34092:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26047:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26047:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26047:108:0;;:::i;:::-;;24834:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24834:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24834:123:0;;:::i;:::-;;;;;;;;;;;;;;;;23518:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23518:97:0;;;:::i;29855:1700::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29855:1700:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29855:1700:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29855:1700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25006:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25006:86:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25006:86:0;;:::i;23373:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23373:88:0;;;:::i;24327:317::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24327:317:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24327:317:0;;;-1:-1:-1;;;;;24327:317:0;;;;;;;;;;:::i;25146:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25146:91:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25146:91:0;;;;:::i;26347:319::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26347:319:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26347:319:0;;;;;;;;;;;;:::i;24697:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24697:95:0;;;:::i;23793:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23793:91:0;;;:::i;12003:4063::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;12003:4063:0;;;;;;;;-1:-1:-1;;;;;12003:4063:0;;;;;;;;;;;;;;;;;;;;;;:::i;10008:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10008:121:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10008:121:0;-1:-1:-1;;;;;10008:121:0;;:::i;23927:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23927:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23927:154:0;;;;;;-1:-1:-1;;;;;23927:154:0;;:::i;32965:436::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32965:436:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32965:436:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;32965:436:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32965:436:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;32965:436:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32965:436:0;;-1:-1:-1;;32965:436:0;;;-1:-1:-1;32965:436:0;;-1:-1:-1;;32965:436:0:i;5736:677::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5736:677:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5736:677:0;-1:-1:-1;;;;;5736:677:0;;:::i;16504:3837::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;16504:3837:0;;;;;;;;-1:-1:-1;;;;;16504:3837:0;;;;;;;;;;;;;;;;;;;;;;:::i;25907:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25907:87:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25907:87:0;;:::i;25296:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25296:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25296:163:0;;:::i;26976:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26976:95:0;;;:::i;23239:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23239:93:0;;;:::i;24135:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24135:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24135:144:0;;;;;;-1:-1:-1;;;;;24135:144:0;;:::i;28342:1059::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28342:1059:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;28342:1059:0;;;;;;;;;;;;;;;;;;;;:::i;26209:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26209:94:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26209:94:0;;:::i;10198:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10198:103:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10198:103:0;;:::i;:::-;;;;-1:-1:-1;;;;;10198:103:0;;;;;;;;;;;;;;22776:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22776:200:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22776:200:0;;:::i;25507:155::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25507:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25507:155:0;;:::i;27227:509::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27227:509:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27227:509:0;;:::i;10407:1158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10407:1158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10407:1158:0;-1:-1:-1;;;;;10407:1158:0;;:::i;25707:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25707:157:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25707:157:0;;:::i;6598:1985::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6598:1985:0;;;;;;;;;;;-1:-1:-1;;;;;6598:1985:0;;:::i;23661:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23661:89:0;;;:::i;26047:108::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;26122:19:::1;:25:::0;26047:108::o;24834:123::-;24899:7;24926:18;24945:3;24926:23;;;;;;;;;24919:30;;24834:123;;;;:::o;23518:97::-;23594:13;;23518:97;:::o;29855:1700::-;30048:17;;;30058:6;30048:17;;;;;;;;;29936:13;;;;30048:17;;;;21:6:-1;;104:10;30048:17:0;87:34:-1;135:17;;-1:-1;;30029:36:0;-1:-1:-1;30076:13:0;;;30221:10;30217:1117;;30356:7;:14;30347:23;;30343:91;;;30395:7;:14;:23;;;;-1:-1:-1;30343:91:0;30461:1;30453:5;:9;30449:65;;;-1:-1:-1;30489:9:0;;;30449:65;-1:-1:-1;;30618:3:0;;;:9;-1:-1:-1;30611:107:0;;;30656:46;30676:1;30679:7;30687:1;30679:10;;;;;;;;;;;;;;;;;30656:46;;;;;;;;30679:10;;;;;;;;30656:46;;-1:-1:-1;;;;;30656:46:0;;;;;-1:-1:-1;;;30656:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30691:3;30696:5;30656:19;:46::i;:::-;30648:54;;30611:107;;;30217:1117;;;30851:7;:14;30842:23;;30838:133;;;30890:6;30886:10;;30838:133;;;30941:7;:14;;-1:-1:-1;30838:133:0;-1:-1:-1;31024:7:0;:14;30991:9;;;;31018:20;;31015:80;;;-1:-1:-1;31065:7:0;:14;31015:80;31207:3;31203:1;:7;31196:127;;;31239:46;31259:1;31262:7;31270:1;31262:10;;;;;;;31239:46;31231:54;;31304:3;;;;;31196:127;;;31404:16;31433:5;31423:16;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;31423:16:0;87:34:-1;135:17;;-1:-1;31423:16:0;;31404:35;;31450:69;-1:-1:-1;;31456:7:0;;;:11;31450:69;;31497:3;31501:5;31497:10;;;;;;;;;;;;;;;;31484:3;31488:5;31484:10;;;;;;;;;;;:23;-1:-1:-1;;;;;31484:23:0;;;;;;;;;31450:69;;;31543:3;-1:-1:-1;;;;;29855:1700:0;;;;;;:::o;25006:86::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25070:8:::1;:14:::0;25006:86::o;23373:88::-;23445:8;;23373:88;:::o;24327:317::-;24430:7;24454:18;24450:187;;-1:-1:-1;24496:1:0;24489:8;;24450:187;24590:27;;;;:17;:27;;;;;;;;-1:-1:-1;;;;;24590:34:0;;;;;;;;;;;;24537:22;;;:12;:22;;;;;:29;;;;;;;;;:88;;24590:34;24537:48;;24571:13;24537:48;:33;:48;:::i;:::-;:52;:88;:52;:88;:::i;:::-;24530:95;;;;25146:91;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25212:11:::1;:17:::0;;-1:-1:-1;;25212:17:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;25146:91::o;26347:319::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;26480:11;26458:19:::1;26502:157;26526:2;26522:1;:6;26502:157;;;26575:11;26551:18;26570:1;26551:21;;;;;;;;:35:::0;26615:32:::1;26640:6:::0;26615:20:::1;:11:::0;26631:3;26615:20:::1;:15;:20;:::i;:32::-;26601:46:::0;-1:-1:-1;26530:4:0::1;;26502:157;;;;26814:1;26347:319:::0;;;:::o;24697:95::-;24772:12;;24697:95;:::o;23793:91::-;23866:10;;23793:91;:::o;12003:4063::-;12207:10;12230:9;12199:41;12191:76;;;;;-1:-1:-1;;;12191:76:0;;;;;;;;;;;;-1:-1:-1;;;12191:76:0;;;;;;;;;;;;;;;12278:21;12302:37;12334:4;12302:27;12320:8;;12302:13;:17;;:27;;;;:::i;:37::-;12278:61;-1:-1:-1;12371:47:0;12278:61;12371:28;:9;12385:13;12371:28;:13;:28;:::i;:::-;:32;:47;:32;:47;:::i;:::-;12358:9;:60;12350:156;;;;-1:-1:-1;;;12350:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12541:10;;12525:13;:26;;;;;;:31;12517:85;;;;-1:-1:-1;;;12517:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12665:13;12681:24;12689:15;12681:7;:24::i;:::-;12665:40;;12716:48;;:::i;:::-;12767:7;12775:5;12767:14;;;;;;;;;;;;;;;;12716:65;;;;;;;;12767:14;;;;;;;;12716:65;;-1:-1:-1;;;;;12716:65:0;;;;;-1:-1:-1;;;12716:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12896:56:0;12913:9;12923:11;12935:16;12896;:56::i;:::-;12877:75;;12963:14;12992;:22;;;:30;;13018:4;12992:30;;;12988:135;;;-1:-1:-1;13051:4:0;12988:135;;;-1:-1:-1;13100:11:0;12988:135;13242:14;:22;;;13238:760;;;13366:13;;13348:32;;:13;;:32;:17;:32;:::i;:::-;13335:9;:45;;13327:121;;;;-1:-1:-1;;;13327:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13238:760;;;13485:9;13481:506;;;13637:19;;13619:38;;:13;;:38;:17;:38;:::i;:::-;13606:9;:51;;13598:128;;;;-1:-1:-1;;;13598:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13481:506;13889:13;;13871:32;;:13;;:32;:17;:32;:::i;:::-;13858:9;:45;;13850:121;;;;-1:-1:-1;;;13850:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14097:43;14116:14;:23;;;14097:18;:43::i;:::-;:48;14089:79;;;;;-1:-1:-1;;;14089:79:0;;;;;;;;;;;;-1:-1:-1;;;14089:79:0;;;;;;;;;;;;;;;14219:13;14187:14;:28;;;:45;;14179:82;;;;;-1:-1:-1;;;14179:82:0;;;;;;;;;;;;-1:-1:-1;;;14179:82:0;;;;;;;;;;;;;;;14314:15;14280:14;:30;;;:49;;14272:88;;;;;-1:-1:-1;;;14272:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14410:16;-1:-1:-1;;;;;14379:47:0;:14;:27;;;-1:-1:-1;;;;;14379:47:0;;14371:79;;;;;-1:-1:-1;;;14371:79:0;;;;;;;;;;;;-1:-1:-1;;;14371:79:0;;;;;;;;;;;;;;;14537:14;:28;;;14521:13;14488:14;:30;;;:46;:77;;;;;;14469:15;:96;14461:127;;;;;-1:-1:-1;;;14461:127:0;;;;;;;;;;;;-1:-1:-1;;;14461:127:0;;;;;;;;;;;;;;;14677:24;;;;:43;;14706:13;14677:43;:28;:43;:::i;:::-;14650:24;;;:70;14760:26;;;;:47;;14791:15;14760:47;:30;:47;:::i;:::-;14731:26;;;:76;14849:28;;;;:47;;14882:13;14849:47;:32;:47;:::i;:::-;14818:28;;;:78;14940:30;;;;:51;;14975:15;14940:51;:34;:51;:::i;:::-;14907:30;;;:84;15002:7;:14;;14907;;15002:7;15010:5;;15002:14;;;;;;;;;;;;;;:31;;:14;;;;;:31;;;;;;;;-1:-1:-1;;;15002:31:0;-1:-1:-1;;;;;;;;;15002:31:0;;;-1:-1:-1;;;;;;15002:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15075:67;;15087:9;;15098:11;;15111:16;;15129:9;;15075:11;:67::i;:::-;15232:15;15218:11;:29;15214:296;;;15264:110;15313:10;15334:4;15341:32;:11;15357:15;15341:32;:15;:32;:::i;:::-;-1:-1:-1;;;;;15264:40:0;;;:110;;;:40;:110;:::i;:::-;15214:296;;;15407:91;15452:10;15465:32;:15;15485:11;15465:32;:19;:32;:::i;:::-;-1:-1:-1;;;;;15407:36:0;;;:91;;:36;:91;:::i;:::-;15547:11;;15649;;15621:23;;;;-1:-1:-1;;;;;15547:11:0;;;;:23;;15571:13;;15586:15;;15603:16;;15621:40;;15649:11;;;;;15621:27;:40;:::i;:::-;15547:115;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15547:115:0;-1:-1:-1;;;;;15547:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15547:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15799:20:0;;15678:142;;;15696:10;15678:142;;15717:3;15678:142;;;;;;;;;;-1:-1:-1;;;;;15678:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15678:142:0;;;;;;;-1:-1:-1;15678:142:0;15870:17;;15866:193;;15928:13;;:49;;;-1:-1:-1;;;15928:49:0;;-1:-1:-1;;;;;15928:49:0;;;;;;;;;15904:21;;15928:13;;;;;:31;;:49;;;;;;;;;;;;;;;:13;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;15928:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15928:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15928:49:0;15992:7;;:55;;;-1:-1:-1;;;15992:55:0;;-1:-1:-1;;;;;15992:55:0;;;;;;;;;15928:49;;-1:-1:-1;15992:7:0;;;:19;;16018:13;;15992:55;;;;;:7;;:55;;;;;;;16018:13;15992:7;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;15992:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15992:55:0;;;;;15866:193;;12003:4063;;;;;;;;;;;:::o;10008:121::-;-1:-1:-1;;;;;10097:24:0;;10008:121::o;23927:154::-;24012:7;24039:27;;;:17;:27;;;;;;;;-1:-1:-1;;;;;24039:34:0;;;;;;;;;;23927:154;;;;;:::o;32965:436::-;33050:7;33082:5;33098:108;33147:2;33142;:7;33151:2;33142:11;33131:24;;33116:3;33120:7;;;;;;33116:12;;;;;;;;;;;:39;-1:-1:-1;;;;;33116:39:0;;;;;;;;-1:-1:-1;33176:2:0;33170:8;;;;33203:1;33198:2;:6;33098:108;;33243:5;33226:135;33254:1;33250;:5;33226:135;;;33277:6;33286:3;33290:1;33286:6;;;;;;;;;;;;;;;;33277:15;;33316:3;33320;;;;;;;33316:8;;;;;;;;;;;;;;;;33307:3;33311:1;33307:6;;;;;;;;;;;:17;-1:-1:-1;;;;;33307:17:0;;;;;;;;;33348:1;33339:3;33343:1;33339:6;;;;;;;;;;;:10;-1:-1:-1;;;;;33339:10:0;;;;;;;;;33226:135;33257:3;;;;;33226:135;;;-1:-1:-1;33388:5:0;;32965:436;-1:-1:-1;;;;32965:436:0:o;5736:677::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;5895:12:::1;:29:::0;;-1:-1:-1;;;;;;5895:29:0::1;-1:-1:-1::0;;;;;5895:29:0;::::1;::::0;;::::1;::::0;;;6033:49:::1;::::0;;-1:-1:-1;;;6033:49:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;;;6033:49:0;;;;;;5895:29;;;6033:27:::1;::::0;:49;;;;;;;;;;;5895:29;6033:49;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6033:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6033:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6033:49:0;5993:11:::1;:91:::0;;-1:-1:-1;;;;;;5993:91:0::1;-1:-1:-1::0;;;;;5993:91:0;;::::1;;::::0;;6120:35:::1;::::0;;-1:-1:-1;;;6120:35:0;;6033:49:::1;6120:35;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;6120:35:0;;;;;;:27;;::::1;::::0;::::1;::::0;:35;;;;;6033:49;;6120:35;;;;;;:27;:35;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6120:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6120:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6120:35:0;6101:10:::1;:55:::0;;-1:-1:-1;;;;;;6101:55:0::1;-1:-1:-1::0;;;;;6101:55:0;;::::1;;::::0;;6242:45:::1;::::0;;-1:-1:-1;;;6242:45:0;;6120:35:::1;6242:45:::0;;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;;;6242:45:0;;;;;;:27;;::::1;::::0;::::1;::::0;:45;;;;;6120:35;;6242:45;;;;;;:27;:45;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6242:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6242:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6242:45:0;6218:7:::1;:70:::0;;-1:-1:-1;;;;;;6218:70:0::1;-1:-1:-1::0;;;;;6218:70:0;;::::1;;::::0;;6348:55:::1;::::0;;-1:-1:-1;;;6348:55:0;;6242:45:::1;6348:55;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;;;;:27;;::::1;::::0;::::1;::::0;:55;;;;;6242:45;;6348:55;;;;;;:27;:55;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6348:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6348:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6348:55:0;6299:13:::1;:106:::0;;-1:-1:-1;;;;;;6299:106:0::1;-1:-1:-1::0;;;;;6299:106:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;5736:677:0:o;16504:3837::-;16708:10;16731:9;16700:41;16692:76;;;;;-1:-1:-1;;;16692:76:0;;;;;;;;;;;;-1:-1:-1;;;16692:76:0;;;;;;;;;;;;;;;16779:21;16803:37;16835:4;16803:27;16821:8;;16803:13;:17;;:27;;;;:::i;:37::-;16779:61;-1:-1:-1;16872:47:0;16779:61;16872:28;:9;16886:13;16872:28;:13;:28;:::i;:47::-;16859:9;:60;16851:157;;;;-1:-1:-1;;;16851:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17043:10;;17027:13;:26;;;;;;:31;17019:85;;;;-1:-1:-1;;;17019:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17157:13;17173:24;17181:15;17173:7;:24::i;:::-;17157:40;;17208:48;;:::i;:::-;17259:7;17267:5;17259:14;;;;;;;;;;;;;;;;17208:65;;;;;;;;17259:14;;;;;;;;17208:65;;-1:-1:-1;;;;;17208:65:0;;;;;-1:-1:-1;;;17208:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17388:56:0;17405:9;17415:11;17427:16;17388;:56::i;:::-;17369:75;;17455:14;17484;:22;;;:30;;17510:4;17484:30;;;17480:135;;;-1:-1:-1;17543:4:0;17480:135;;;-1:-1:-1;17592:11:0;17480:135;17734:14;:22;;;17730:760;;;17858:13;;17840:32;;:13;;:32;:17;:32;:::i;:::-;17827:9;:45;;17819:121;;;;-1:-1:-1;;;17819:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17730:760;;;17977:9;17973:506;;;18129:19;;18111:38;;:13;;:38;:17;:38;:::i;:::-;18098:9;:51;;18090:128;;;;-1:-1:-1;;;18090:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17973:506;18381:13;;18363:32;;:13;;:32;:17;:32;:::i;:::-;18350:9;:45;;18342:121;;;;-1:-1:-1;;;18342:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18579:43;18598:14;:23;;;18579:18;:43::i;:::-;:48;18571:79;;;;;-1:-1:-1;;;18571:79:0;;;;;;;;;;;;-1:-1:-1;;;18571:79:0;;;;;;;;;;;;;;;18701:13;18669:14;:28;;;:45;;18661:82;;;;;-1:-1:-1;;;18661:82:0;;;;;;;;;;;;-1:-1:-1;;;18661:82:0;;;;;;;;;;;;;;;18796:15;18762:14;:30;;;:49;;18754:88;;;;;-1:-1:-1;;;18754:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18892:16;-1:-1:-1;;;;;18861:47:0;:14;:27;;;-1:-1:-1;;;;;18861:47:0;;18853:79;;;;;-1:-1:-1;;;18853:79:0;;;;;;;;;;;;-1:-1:-1;;;18853:79:0;;;;;;;;;;;;;;;19019:14;:28;;;19003:13;18970:14;:30;;;:46;:77;;;;;;18951:15;:96;18943:127;;;;;-1:-1:-1;;;18943:127:0;;;;;;;;;;;;-1:-1:-1;;;18943:127:0;;;;;;;;;;;;;;;19149:24;;;;:43;;19178:13;19149:43;:28;:43;:::i;:::-;19122:24;;;:70;19232:26;;;;:47;;19263:15;19232:47;:30;:47;:::i;:::-;19203:26;;;:76;19321:28;;;;:47;;19354:13;19321:47;:32;:47;:::i;:::-;19290:28;;;:78;19412:30;;;;:51;;19447:15;19412:51;:34;:51;:::i;:::-;19379:30;;;:84;19474:7;:14;;19379;;19474:7;19482:5;;19474:14;;;;;;;;;;;;;;:31;;:14;;;;;:31;;;;;;;;-1:-1:-1;;;19474:31:0;-1:-1:-1;;;;;;;;;19474:31:0;;;-1:-1:-1;;;;;;19474:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19547:67;;19559:9;;19570:11;;19583:16;;19601:9;;19547:11;:67::i;:::-;19686:110;19735:10;19756:4;19763:32;:15;19783:11;19763:32;:19;:32;:::i;19686:110::-;19832:11;;19934;;19906:23;;;;-1:-1:-1;;;;;19832:11:0;;;;:23;;19856:13;;19871:15;;19888:16;;19906:40;;19934:11;;;;;19906:27;:40;:::i;:::-;19832:115;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19832:115:0;-1:-1:-1;;;;;19832:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19832:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20084:20:0;;19963:142;;;19981:10;19963:142;;-1:-1:-1;;;;;19963:142:0;;;;;;;;;;;;;20046:3;19963:142;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19963:142:0;;;;;;;-1:-1:-1;19963:142:0;20145:17;;20141:193;;20203:13;;:49;;;-1:-1:-1;;;20203:49:0;;-1:-1:-1;;;;;20203:49:0;;;;;;;;;20179:21;;20203:13;;;;;:31;;:49;;;;;;;;;;;;;;;:13;:49;;;5:2:-1;;;;30:1;27;20:12;25907:87:0;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25972:8:::1;:14:::0;25907:87::o;25296:163::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25379:1:::1;25373:3;:7;25365:56;;;;-1:-1:-1::0;;;25365:56:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25432:13;:19:::0;25296:163::o;26976:95::-;27022:7;27049:14;26976:95;:::o;23239:93::-;23313:11;;;;23239:93;:::o;24135:144::-;24215:7;24242:22;;;:12;:22;;;;;;;;-1:-1:-1;;;;;24242:29:0;;;;;;;;;;;;;24135:144::o;28342:1059::-;28545:17;;;28555:6;28545:17;;;;;;;;;28444:13;;;;28545:17;;;;21:6:-1;;104:10;28545:17:0;87:34:-1;135:17;;-1:-1;;28573:13:0;28661:14;;28526:36;;-1:-1:-1;28573:13:0;;-1:-1:-1;;;;;28716:19:0;;;28712:70;;28756:14;28764:5;28756:7;:14::i;:::-;28752:18;;28712:70;28800:12;28796:1;:16;28792:71;;;-1:-1:-1;28835:16:0;;;28792:71;28949:1;28941:5;:9;:22;;;;-1:-1:-1;;;28954:3:0;;;:9;-1:-1:-1;28941:22:0;28934:260;;;28980:39;;:::i;:::-;29022:7;29030:1;29022:10;;;;;;;;;;;;;;;;;28980:52;;;;;;;;29022:10;;;;;;;;28980:52;;-1:-1:-1;;;;;28980:52:0;;;;;;-1:-1:-1;;;28980:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29051:20:0;;;;29047:136;;;-1:-1:-1;;29092:7:0;;;;29126:41;29146:1;29149:5;29156:3;29161:5;29126:19;:41::i;:::-;29118:49;;29047:136;28934:260;;;;29250:16;29279:5;29269:16;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;29269:16:0;87:34:-1;135:17;;-1:-1;29269:16:0;;29250:35;;29296:69;-1:-1:-1;;29302:7:0;;;:11;29296:69;;29343:3;29347:5;29343:10;;;;;;;;;;;;;;;;29330:3;29334:5;29330:10;;;;;;;;;;;:23;-1:-1:-1;;;;;29330:23:0;;;;;;;;;29296:69;;;29389:3;28342:1059;-1:-1:-1;;;;;;;;;28342:1059:0:o;26209:94::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;26277:12:::1;:18:::0;26209:94::o;10198:103::-;10287:5;10198:103::o;22776:200::-;22902:11;;22846:7;;22902:11;;;;;22870:29;;:12;;22887:11;;22870:16;:29;:::i;:::-;:43;22866:84;;;-1:-1:-1;22937:1:0;22930:8;;22866:84;-1:-1:-1;22967:1:0;22776:200;;;:::o;25507:155::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25586:1:::1;25580:3;:7;25572:56;;;;-1:-1:-1::0;;;25572:56:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25639:9;:15:::0;25507:155::o;27227:509::-;27396:17;;;27406:6;27396:17;;;;;;;;;27286:13;;;;27396:17;;;;21:6:-1;;104:10;27396:17:0;87:34:-1;135:17;;-1:-1;27396:17:0;27377:36;;27424:13;27440:1;27424:17;;27460:64;27480:10;27492:7;27500:10;27492:19;;;;;;;;;;;;;;;;;27460:64;;;;;;;;27492:19;;;;;;;;27460:64;;-1:-1:-1;;;;;27460:64:0;;;;;-1:-1:-1;;;27460:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27513:3;27518:5;27460:19;:64::i;:::-;27452:72;;27585:16;27614:5;27604:16;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;27604:16:0;87:34:-1;135:17;;-1:-1;27604:16:0;;27585:35;;27631:69;-1:-1:-1;;27637:7:0;;;:11;27631:69;;27678:3;27682:5;27678:10;;;;;;;;;;;;;;;;27665:3;27669:5;27665:10;;;;;;;;;;;:23;-1:-1:-1;;;;;27665:23:0;;;;;;;;;27631:69;;;27724:3;27227:509;-1:-1:-1;;;;27227:509:0:o;10407:1158::-;10483:10;10506:9;10475:41;10467:76;;;;;-1:-1:-1;;;10467:76:0;;;;;;;;;;;;-1:-1:-1;;;10467:76:0;;;;;;;;;;;;;;;10554:13;10570:24;10578:15;10570:7;:24::i;:::-;10554:40;;10605:49;10657:7;10665:5;10657:14;;;;;;;;;;;;;;;;;;10605:66;;10690:43;10709:14;:23;;;10690:18;:43::i;:::-;10737:1;10690:48;10682:79;;;;;-1:-1:-1;;;10682:79:0;;;;;;;;;;;;-1:-1:-1;;;10682:79:0;;;;;;;;;;;;;;;10801:24;;;;:28;10797:198;;10863:24;;;;;10846:14;10902:28;;;10954:20;;10945:38;;-1:-1:-1;;;;;10954:20:0;10863:24;10945:8;:38::i;:::-;10797:198;;11036:26;;;;:30;11032:262;;11100:26;;;;;11083:14;11141:30;;;;-1:-1:-1;11200:27:0;;;11239:20;;11186:82;;;-1:-1:-1;;;11186:82:0;;-1:-1:-1;;;;;11239:20:0;;;11186:82;;;;;;;;;;;;11100:26;;11200:27;;;;;11186:52;;:82;;;;;;;;;;;;;;;;;11200:27;11186:82;;;5:2:-1;;;;30:1;27;20:12;5:2;11186:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11186:82:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;11032:262:0;11338:28;;;;:32;11334:224;;11394:23;;;;11419:27;;;;11448:28;;;;11478:20;;11387:112;;11394:23;-1:-1:-1;;;;;11419:27:0;;;;11448:28;11478:20;11387:6;:112::i;:::-;-1:-1:-1;11545:1:0;11514:28;;;:32;11334:224;10407:1158;;;:::o;25707:157::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25787:1:::1;25781:3;:7;25773:56;;;;-1:-1:-1::0;;;25773:56:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25840:10;:16:::0;25707:157::o;6598:1985::-;6717:10;6740:9;6709:41;6701:76;;;;;-1:-1:-1;;;6701:76:0;;;;;;;;;;;;-1:-1:-1;;;6701:76:0;;;;;;;;;;;;;;;6812:13;;:45;;;-1:-1:-1;;;6812:45:0;;-1:-1:-1;;;;;6812:45:0;;;;;;;;;6788:21;;6812:13;;;;;:31;;:45;;;;;;;;;;;;;;;:13;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;6812:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6812:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6812:45:0;;-1:-1:-1;;;;;;6876:29:0;;6868:38;;;;;;6963:17;6991:14;7008:52;7025:9;7035:11;7047:12;7008:16;:52::i;:::-;6991:69;;7075:9;7071:308;;;7136:19;;7122:9;;:34;;;:13;:34;:::i;:::-;7109:9;:47;;7101:124;;;;-1:-1:-1;;;7101:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7252:35;7282:4;7252:25;7266:10;;7252:9;;:13;;:25;;;;:::i;:35::-;7240:47;;7071:308;;;7332:35;7362:4;7332:25;7346:10;;7332:9;:13;;:25;;;;:::i;:35::-;7320:47;;7071:308;7410:24;:9;7424;7410:24;:13;:24;:::i;:::-;7397:9;:37;;7389:129;;;;-1:-1:-1;;;7389:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7529:16;7548:39;7562:24;:9;7576;7562:24;:13;:24;:::i;:::-;7548:9;;:39;:13;:39;:::i;:::-;7529:58;-1:-1:-1;7602:12:0;;7598:84;;7631:39;7648:10;7661:8;7631;:39::i;:::-;7721:70;7733:9;7744:11;7757:12;7770:9;7781;7721:11;:70::i;:::-;7864:85;-1:-1:-1;;;;;7864:36:0;;7909:10;7930:4;7937:11;7864:85;:36;:85;:::i;:::-;7960:7;;:65;;;-1:-1:-1;;;7960:65:0;;-1:-1:-1;;;;;7960:65:0;;;;;;;;;:7;;;;;:33;;8000:9;;7960:65;;;;;:7;;:65;;;;;;;;8000:9;7960:7;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;7960:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8078:12:0;8060:31;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;8060:45:0;;;;;;;;;;:50;8056:401;;-1:-1:-1;8056:401:0;;-1:-1:-1;;8056:401:0;8127:20;8150:25;8161:13;8150:10;:25::i;:::-;8127:48;;8190:18;8223:13;8190:47;;8252:6;-1:-1:-1;;;;;8252:15:0;;8268:6;-1:-1:-1;;;;;8268:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8268:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8268:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8268:20:0;8307:12;;8290:39;;8325:3;;8290:30;;:12;;:30;:16;:30;:::i;:39::-;8252:78;;;;;;;;;;;;;-1:-1:-1;;;;;8252:78:0;-1:-1:-1;;;;;8252:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8252:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8252:78:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;8422:12:0;;8388:57;;8405:39;;8440:3;;8405:30;;:12;;:30;:16;:30;:::i;:39::-;8388:12;;:57;:16;:57;:::i;:::-;8358:12;8345:26;;;;:12;:26;;;;;;;;-1:-1:-1;;;;;8345:40:0;;;;;;;;;:100;-1:-1:-1;;8056:401:0;8533:12;8515:31;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;8515:45:0;;;;;;;;;;:60;;8565:9;8515:60;:49;:60;:::i;:::-;8485:12;8467:31;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;8467:45:0;;;;;;;;;;;;:108;;;;-1:-1:-1;;;;;;6598:1985:0:o;23661:89::-;23733:9;;23661:89;:::o;31644:1195::-;31789:7;31827:47;31840:21;31850:10;31840:9;:21::i;:::-;31863:3;31868:5;31827:12;:47::i;:::-;31885:12;;31889:7;;;;-1:-1:-1;;;;31900:15:0;31885:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;31885:30:0;;;;;;;;-1:-1:-1;31957:11:0;;31944:37;;31970:3;31975:5;31944:12;:37::i;:::-;31992:12;;31996:7;;;;-1:-1:-1;;;;32007:15:0;31992:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;31992:30:0;;;;;;;;;32051:44;32064:5;:18;;;32084:3;32089:5;32051:12;:44::i;:::-;32106:12;;32110:7;;;;-1:-1:-1;;;;32121:15:0;32106:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32106:30:0;;;;;;;;;32165:38;32175:5;:15;;;32192:3;32197:5;32165:9;:38::i;:::-;32214:12;;32218:7;;;;-1:-1:-1;;;;32229:15:0;32214:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32214:30:0;;;;;;;;;32273:40;32283:5;:17;;;32302:3;32307:5;32273:9;:40::i;:::-;32324:12;;32328:7;;;;-1:-1:-1;;;;32339:15:0;32324:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32324:30:0;;;;;;;;;32382:42;32392:5;:19;;;32413:3;32418:5;32382:9;:42::i;:::-;32435:12;;32439:7;;;;-1:-1:-1;;;;32450:15:0;32435:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32435:30:0;;;;;;;;;32494:44;32504:5;:21;;;32527:3;32532:5;32494:9;:44::i;:::-;32549:12;;32553:7;;;;-1:-1:-1;;;;32564:15:0;32549:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32549:30:0;;;;;;;;;32608:37;32618:5;:14;;;32634:3;32639:5;32608:9;:37::i;:::-;32656:12;;32660:7;;;;-1:-1:-1;;;;32671:15:0;32656:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32656:30:0;;;;;;;;;32715:42;32725:5;:19;;;32746:3;32751:5;32715:9;:42::i;:::-;32768:12;;32772:7;;;;-1:-1:-1;;;;32783:15:0;32768:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32768:30:0;;;;;;;;-1:-1:-1;32826:5:0;;31644:1195;-1:-1:-1;;;;31644:1195:0:o;36871:248::-;36929:7;36953:6;36949:47;;-1:-1:-1;36983:1:0;36976:8;;36949:47;37018:5;;;37022:1;37018;:5;:1;37042:5;;;;;:10;37034:56;;;;-1:-1:-1;;;37034:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37125:132;37183:7;37210:39;37214:1;37217;37210:39;;;;;;;;;;;;;;;;;:3;:39::i;36344:181::-;36402:7;36434:5;;;36458:6;;;;36450:46;;;;;-1:-1:-1;;;36450:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21977:757;22149:11;;:45;;;-1:-1:-1;;;22149:45:0;;-1:-1:-1;;;;;22149:45:0;;;;;;;;;22081:4;;;;;;22149:11;;;;;:38;;:45;;;;;;;;;;;:11;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;22149:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22149:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22149:45:0;;;;;;;;;-1:-1:-1;22149:45:0;-1:-1:-1;22209:18:0;;;:42;;-1:-1:-1;22231:20:0;;22209:42;22205:87;;;22275:5;22268:12;;;;;;22205:87;22302:22;22327:91;22395:22;:13;22413:3;22395:22;:17;:22;:::i;:::-;22327:63;22363:26;22380:8;;22371:3;22363:16;;:26;;;;:::i;:::-;22327:31;:10;22342:15;22327:31;:14;:31;:::i;:::-;:35;:63;:35;:63;:::i;:91::-;22302:116;;22449:14;22433:12;:30;22429:276;;22480:22;22505:91;22573:22;:13;22591:3;22573:22;:17;:22;:::i;:::-;22505:63;22541:26;22558:8;;22549:3;22541:16;;:26;;;;:::i;:::-;22505:31;:10;22520:15;22505:31;:14;:31;:::i;:91::-;22480:116;;22631:14;22615:12;:30;22611:83;;22673:5;22666:12;;;;;;;;22611:83;22429:276;;-1:-1:-1;22722:4:0;;21977:757;-1:-1:-1;;;;;;21977:757:0:o;36531:136::-;36589:7;36616:43;36620:1;36623;36616:43;;;;;;;;;;;;;;;;;:3;:43::i;8785:1155::-;8975:9;;8962;:22;;8954:78;;;;-1:-1:-1;;;8954:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9112:10;;9100:9;:22;;;;;;:27;9092:64;;;;;-1:-1:-1;;;9092:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9204:10;;9190:25;;:9;;:25;:13;:25;:::i;:::-;9175:11;:41;;;;;;:46;9167:88;;;;;-1:-1:-1;;;9167:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9288:1;9274:11;:15;9266:24;;;;;;9374:7;:14;9343:113;;9364:25;;:9;:25::i;:::-;9437:11;;9343:113;;;-1:-1:-1;;;;;9343:113:0;;;;;;;;;;;;;;;;;;;;;;;;9437:11;;;;9343:113;;;;;;;;;;;;;;;;;;;9480:305;;;;;;;;9521:10;9480:305;;;;;;;;;;;-1:-1:-1;;;;;9480:305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9741:12;9480:305;;;;;;;;;;;;9467:7;27:10:-1;;39:1;23:18;;45:23;;9467:319:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9467:319:0;-1:-1:-1;;;;9467:319:0;;;-1:-1:-1;;;;;;9467:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9822:11;9884;;9822;;;:20;;9611:9;;9635:11;;9867:29;;9884:11;;;;;9867:16;:29;:::i;:::-;9822:110;;;-1:-1:-1;;;;;;9822:110:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9822:110:0;;;;;;9920:10;9822:110;;;;;;;;;;-1:-1:-1;;9822:110:0;;;;;;;-1:-1:-1;9822:110:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;9822:110:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9822:110:0;;;;8785:1155;;;;;:::o;38199:203::-;38325:68;;;-1:-1:-1;;;;;38325:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38325:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;38299:95:0;;38318:5;;38299:18;:95::i;:::-;38199:203;;;;:::o;38016:175::-;38124:58;;;-1:-1:-1;;;;;38124:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38124:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;38098:85:0;;38117:5;;38098:18;:85::i;23009:167::-;23085:20;23108:29;:14;-1:-1:-1;;;;;23108:27:0;;:29::i;:::-;23148:20;;23085:52;;-1:-1:-1;;;;;;23148:13:0;;;:20;;;;;23162:5;;23148:20;;;;23162:5;23148:13;:20;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;21303:633:0;21406:7;21561:27;;;:17;:27;;;;;;;;-1:-1:-1;;;;;21561:34:0;;;;;;;;;;;;21508:22;;;:12;:22;;;;;:29;;;;;;;;21406:7;;21508:88;;:48;;21542:13;21508:48;:33;:48;:::i;:88::-;21686:13;;:38;;;-1:-1:-1;;;21686:38:0;;-1:-1:-1;;;;;21686:38:0;;;;;;;;;21485:111;;-1:-1:-1;21645:18:0;;21686:13;;;;;:31;;:38;;;;;;;;;;;;;;:13;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21686:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21686:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21686:38:0;21745:45;;;-1:-1:-1;;;21745:45:0;;-1:-1:-1;;;;;21745:45:0;;;;;;;;;;;;;;;21686:38;;-1:-1:-1;21745:15:0;;;;;;:45;;;;;21686:38;;21745:45;;;;;;;;-1:-1:-1;21745:15:0;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;21745:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21745:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21745:45:0;21737:74;;;;;-1:-1:-1;;;21737:74:0;;;;;;;;;;;;-1:-1:-1;;;21737:74:0;;;;;;;;;;;;;;;21863:27;;;;:17;:27;;;;;;;;-1:-1:-1;;;;;21863:34:0;;;;;;;;;;;;;21837:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21916:12:0;21303:633;-1:-1:-1;;;;;21303:633:0:o;20433:780::-;20485:7;20505:23;20543:6;20505:45;;20562:19;20583:25;20612:11;-1:-1:-1;;;;;20612:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20612:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20612:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20612:28:0;;;;;;;20715:17;;20612:28;;-1:-1:-1;20612:28:0;-1:-1:-1;20651:27:0;;20681:52;;:29;:12;20612:28;20681:29;:16;:29;:::i;:52::-;20651:82;-1:-1:-1;20744:20:0;;20835:1;20813:23;;20809:174;;;-1:-1:-1;20867:18:0;;20809:174;;;20932:18;20951:19;20932:39;;;;;;;;;20918:53;;20809:174;21008:52;21024:35;:12;21041:17;21024:35;:16;:35;:::i;:::-;21008:11;;:52;:15;:52;:::i;:::-;20993:67;;21071:11;-1:-1:-1;;;;;21071:25:0;;21097:12;21071:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21071:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21126:49:0;;;21140:12;21126:49;;;;;;;;-1:-1:-1;;;;;21126:49:0;;;;;;;;;;-1:-1:-1;21126:49:0;;;;;;;-1:-1:-1;21126:49:0;-1:-1:-1;21193:12:0;20433:780;-1:-1:-1;;;;;;20433:780:0:o;33519:676::-;33610:7;-1:-1:-1;;;;;33653:13:0;;33697:2;33689:10;;33710:272;33740:7;;;33769:2;33765:6;;33762:153;;;33818:1;33821:2;33818:5;33807:18;;33792:3;33796:7;;;;;;33792:12;;;;;;;;;;;:33;-1:-1:-1;;;;;33792:33:0;;;;;;;;;33762:153;;;33892:1;33895:2;33892:5;33881:18;;33866:3;33870:7;;;;;;33866:12;;;;;;;;;;;:33;-1:-1:-1;;;;;33866:33:0;;;;;;;;;33762:153;33949:2;33943:8;;;;33710:272;33979:1;33971:5;:9;33710:272;;-1:-1:-1;;34002:7:0;34037:5;34020:135;34048:1;34044;:5;34020:135;;;34071:6;34080:3;34084:1;34080:6;;;;;;;;;;;;;;;;34071:15;;34110:3;34114;;;;;;;34110:8;;;;;;;;;;;;;;;;34101:3;34105:1;34101:6;;;;;;;;;;;:17;-1:-1:-1;;;;;34101:17:0;;;;;;;;;34142:1;34133:3;34137:1;34133:6;;;;;;;;;;;:10;-1:-1:-1;;;;;34133:10:0;;;;;;;;;34020:135;34051:3;;;;;34020:135;;;-1:-1:-1;34182:5:0;;33519:676;-1:-1:-1;;;;;33519:676:0:o;37263:189::-;37349:7;37384:12;37377:5;37369:28;;;;-1:-1:-1;;;37369:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37369:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37408:9;37424:1;37420;:5;;;;;;;37263:189;-1:-1:-1;;;;;37263:189:0:o;36673:192::-;36759:7;36795:12;36787:6;;;;36779:29;;;;-1:-1:-1;;;36779:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;36779:29:0;-1:-1:-1;;;36831:5:0;;;36673:192::o;39391:448::-;39478:27;39486:5;-1:-1:-1;;;;;39478:25:0;;:27::i;:::-;39470:71;;;;;-1:-1:-1;;;39470:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39553:12;39567:23;39602:5;-1:-1:-1;;;;;39594:19:0;39614:4;39594:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;39594:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;39552:67:0;;;;39638:7;39630:52;;;;;-1:-1:-1;;;39630:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39697:17;;:21;39693:139;;39754:10;39743:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39743:30:0;39735:85;;;;-1:-1:-1;;;39735:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40545:317;40605:4;40771:20;;40671:66;40811:23;;;;;;:42;;-1:-1:-1;;40838:15:0;;;40803:51;-1:-1:-1;;40545:317:0:o;106:34092::-;;;;;;;;;;-1:-1:-1;;;;;106:34092:0;;;;;;;;;;;;;-1:-1:-1;;;;;106:34092:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://1abb1bbe3f8f8756f9e4b5108a0bdcb6f162e61194794f574e54f679bf0a4620

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

NEST nToken oracle contract address.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.