ETH Price: $3,596.70 (+3.74%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Un Farm Now117333232021-01-26 19:42:321438 days ago1611690152IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0013233657
Un Farm Now117333062021-01-26 19:39:551438 days ago1611689995IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0128432573
Farm Now117296792021-01-26 6:20:221438 days ago1611642022IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0133690444
Add Token Reward116928042021-01-20 14:21:581444 days ago1611152518IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0103931767
Add Token Reward116928042021-01-20 14:21:581444 days ago1611152518IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0104479867
Add Token Reward116928032021-01-20 14:21:571444 days ago1611152517IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0104555567
Add Token Reward116928032021-01-20 14:21:571444 days ago1611152517IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0110752171.00000145
Add Period116927412021-01-20 14:10:001444 days ago1611151800IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0127589275
Add Period116927392021-01-20 14:09:401444 days ago1611151780IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0127589275
Add Period116927382021-01-20 14:09:291444 days ago1611151769IN
0x4c72e1E6...77eEb3B1C
0 ETH0.0138794275

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
YFDOTFarm

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-20
*/

// SPDX-License-Identifier: none

pragma solidity >=0.5.0 <0.9.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    
    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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }
    
    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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }
    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }
    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }
    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }
    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

interface IERC20 {
    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 SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

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

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

    function safeApprove(IERC20 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(IERC20 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(IERC20 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(IERC20 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");
        }
    }
}

contract YFDOTFarm is Context {
    using SafeERC20 for IERC20;
    using Address for address;
    using SafeMath for uint256;
    
    struct periodList{
        uint256 periodTime;
        uint256 cooldownTime;
        uint256 formulaParam1;
        uint256 formulaParam2;
        uint256 formulaPenalty1;
        uint256 formulaPenalty2;
    }
    
    struct userFarming{
        bool activeFarm;
        uint periodChoosed;
        address tokenWantFarm;
        uint256 amountFarmd;
        uint256 startFarm;
        uint256 claimFarm;
        uint256 endFarm;
        uint256 cooldownDate;
        uint256 claimed;
    }
    
    struct rewardDetail{
        string symboltoken;
        uint256 equalReward;
        uint256 minimalFarm;
        uint256 maximalFarm;
        uint decimaltoken;
    }
    
    mapping (uint => periodList) private period;
    mapping (address => rewardDetail) private ERC20perYFDOT;
    mapping (address => userFarming) private FarmDetail;
    mapping (address => uint256) private devBalance;
    
    address private _owner;
    address private _YFDOTtoken;
    address[] private _tokenFarmList;
    address[] private _FarmerList;
    uint[] private _periodList;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event Farm(address indexed Farmr, address indexed tokenFarmTarget, uint256 indexed amountTokenFarmd);
    event UnFarm(address indexed Farmr, address indexed tokenFarmTarget, uint256 indexed amountTokenFarmd);
    event Claim(address indexed Farmr, address indexed tokenFarmTarget, uint256 indexed amountReward);
    
    constructor(address YFDOTAddress){
        rewardDetail storage est = ERC20perYFDOT[YFDOTAddress];
        rewardDetail storage nul = ERC20perYFDOT[address(0)];
        require(YFDOTAddress.isContract() == true,"This address is not Smartcontract");
        require(IERC20(YFDOTAddress).totalSupply() != 0, "This address is not ERC20 Token");
        address msgSender = _msgSender();
        _YFDOTtoken = YFDOTAddress;
        _owner = msgSender;
        _tokenFarmList.push(address(0));
        est.symboltoken = "YFDOT";
        est.decimaltoken = 18;
        nul.symboltoken = "ETH";
        nul.minimalFarm = 10**16;
        nul.equalReward = 10**18;
        nul.maximalFarm = 5 * (10**18);
        nul.decimaltoken = 18;
        emit OwnershipTransferred(address(0), msgSender);
    }
    
    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function addTokenReward(address erc20Token, uint256 amountEqual, uint256 minFarm, uint256 maxFarm, uint decimall, string memory symboltokens) public virtual onlyOwner{
        if(erc20Token != address(0)){
            require(erc20Token.isContract() == true,"This address is not Smartcontract");
            require(IERC20(erc20Token).totalSupply() != 0, "This address is not ERC20 Token");
        }
        
        rewardDetail storage est = ERC20perYFDOT[erc20Token];
        est.equalReward = amountEqual;
        est.symboltoken = symboltokens;
        est.minimalFarm = minFarm;
        est.maximalFarm = maxFarm;
        est.decimaltoken = decimall;
        
        _tokenFarmList.push(erc20Token);
    }
    
    function editTokenReward(address erc20Token, uint256 amountEqual, uint256 minFarm, uint256 maxFarm, uint decimall, string memory symboltokens) public virtual onlyOwner{
        if(erc20Token != address(0)){
            require(erc20Token.isContract() == true,"This address is not Smartcontract");
            require(IERC20(erc20Token).totalSupply() != 0, "This address is not ERC20 Token");
        }
        
        rewardDetail storage est = ERC20perYFDOT[erc20Token];
        est.equalReward = amountEqual;
        est.symboltoken = symboltokens;
        est.minimalFarm = minFarm;
        est.maximalFarm = maxFarm;
        est.decimaltoken = decimall;
    }
    
    function addPeriod(uint256 timePeriodFarm, uint256 timeCooldownUnFarm, uint256 formula1, uint256 formula2, uint256 fpel1, uint256 fpel2) public virtual onlyOwner{
        uint newPeriod = _periodList.length;
        if(newPeriod == 0){
            newPeriod = 1;
        }else{
            newPeriod = newPeriod + 1;
        }
        
        periodList storage sys = period[newPeriod];
        sys.periodTime = timePeriodFarm;
        sys.cooldownTime = timeCooldownUnFarm;
        sys.formulaParam1 = formula1;
        sys.formulaParam2 = formula2;
        sys.formulaPenalty1 = fpel1;
        sys.formulaPenalty2 = fpel2;
        
        _periodList.push(newPeriod);
    }
    
    function editPeriod(uint periodEdit, uint256 timePeriodFarm, uint256 timeCooldownUnFarm, uint256 formula1, uint256 formula2, uint256 fpel1, uint256 fpel2) public virtual onlyOwner{
        periodList storage sys = period[periodEdit];
        sys.periodTime = timePeriodFarm;
        sys.cooldownTime = timeCooldownUnFarm;
        sys.formulaParam1 = formula1;
        sys.formulaParam2 = formula2;
        sys.formulaPenalty1 = fpel1;
        sys.formulaPenalty2 = fpel2;
    }
    
    function claimDevBalance(address target) public virtual onlyOwner{
        if(target == address(0)){
            payable(_owner).transfer(devBalance[target]);
        }else{
            IERC20(target).safeTransfer(_owner, devBalance[target]);
        }
        
        devBalance[target] = 0;
    }
    
    function claimReward() public virtual{
        address msgSender = _msgSender();
        userFarming storage usr = FarmDetail[msgSender];
        uint256 getrewardbalance = IERC20(_YFDOTtoken).balanceOf(address(this));
        uint256 getReward = getRewardClaimable(msgSender);
        uint256 today = block.timestamp;
        
        require(getrewardbalance >= getReward, "Please wait until reward pool filled, try again later.");
        require(usr.claimFarm < block.timestamp, "Please wait until wait time reached.");
        
        usr.claimed = usr.claimed.add(getReward);
        usr.claimFarm = today.add(7 days);
        IERC20(_YFDOTtoken).safeTransfer(msgSender, getReward);
        emit Claim(msgSender, _YFDOTtoken, getReward);
    }
    
    function FarmNow(address tokenTargetFarm, uint256 amountWantFarm, uint periodwant) public payable virtual{
        address msgSender = _msgSender();
        uint256 getallowance;
        if(tokenTargetFarm != address(0)){
            getallowance = IERC20(tokenTargetFarm).allowance(msgSender, address(this));
        }
        
        if(getRewardClaimable(msgSender) > 0){
            revert("Please claim your reward from previous Farming");
        }
        
        uint256 today = block.timestamp;
        userFarming storage usr = FarmDetail[msgSender];
        periodList storage sys = period[periodwant];
        rewardDetail storage est = ERC20perYFDOT[tokenTargetFarm];
        
        if(tokenTargetFarm == address(0)){
            require(msg.value >= est.minimalFarm, "Minimum Farming value required");
            require(msg.value <= est.maximalFarm, "Maximum Farming value is reached");
        }else{
            require(amountWantFarm >= est.minimalFarm, "Minimum Farming value required");
            require(amountWantFarm <= est.maximalFarm, "Maximum Farming value is reached");
            require(getallowance >= amountWantFarm, "Insufficient token approval balance, you must increase your allowance" );
        }
        
        usr.activeFarm = true;
        usr.periodChoosed = periodwant;
        usr.tokenWantFarm = tokenTargetFarm;
        usr.amountFarmd = amountWantFarm;
        usr.startFarm = today;
        usr.claimFarm = today.add(7 days);
        usr.cooldownDate = today.add(sys.cooldownTime);
        usr.endFarm = today.add(sys.periodTime);
        usr.claimed = 0;
        
        bool checkregis = false;
        for(uint i = 0; i < _FarmerList.length; i++){
            if(_FarmerList[i] == msgSender){
                checkregis = true;
            }
        }
        
        if(checkregis == false){
            _FarmerList.push(msgSender);
        }
        
        if(tokenTargetFarm != address(0)){
            IERC20(tokenTargetFarm).safeTransferFrom(msgSender, address(this), amountWantFarm);
        }
        
        emit Farm(msgSender, tokenTargetFarm, amountWantFarm);
    }
    
    function unFarmNow() public virtual{
        address msgSender = _msgSender();
        userFarming storage usr = FarmDetail[msgSender];
        periodList storage sys = period[usr.periodChoosed];
        
        require(usr.activeFarm == true, "Farm not active yet" );
        
        uint256 tokenUnFarm;
        if(block.timestamp < usr.cooldownDate){
            uint256 penfee = usr.amountFarmd.mul(sys.formulaPenalty1);
            penfee = penfee.div(sys.formulaPenalty2);
            penfee = penfee.div(100);
            tokenUnFarm = usr.amountFarmd.sub(penfee);
            devBalance[usr.tokenWantFarm] = devBalance[usr.tokenWantFarm].add(penfee);
        }else{
            tokenUnFarm = usr.amountFarmd;
        }
        
        usr.activeFarm = false;
        if(block.timestamp < usr.endFarm){
            usr.endFarm = block.timestamp;
        }
        
        if(usr.tokenWantFarm == address(0)){
            payable(msgSender).transfer(tokenUnFarm);
        }else{
            IERC20(usr.tokenWantFarm).safeTransfer(msgSender, tokenUnFarm);
        }
        
        uint256 getCLaimableRwt = getRewardClaimable(msgSender);
        
        if(getCLaimableRwt > 0){
            IERC20(_YFDOTtoken).safeTransfer(msgSender, getCLaimableRwt);
            usr.claimed = usr.claimed.add(getCLaimableRwt);
        }
        
        emit UnFarm(msgSender, usr.tokenWantFarm, usr.amountFarmd);
        emit Claim(msgSender, _YFDOTtoken, getCLaimableRwt);
    }
    
    function getDevBalance(address target) public view returns(uint256){
        return devBalance[target];
    }
    
    function getEqualReward(address erc20Token) public view returns(uint256, string memory, uint256, uint256, uint){
        rewardDetail storage est = ERC20perYFDOT[erc20Token];
        return(
            est.equalReward,
            est.symboltoken,
            est.minimalFarm,
            est.maximalFarm,
            est.decimaltoken
        );
    }
    
    function getTotalFarmer() public view returns(uint256){
        return _FarmerList.length;
    }
    
    function getActiveFarmer() view public returns(uint256){
        uint256 activeFarm;
        for(uint i = 0; i < _FarmerList.length; i++){
            userFarming memory l = FarmDetail[_FarmerList[i]];
            if(l.activeFarm == true){
                activeFarm = activeFarm + 1;
            }
        }
        return activeFarm;
    }
    
    function getTokenList() public view returns(address[] memory){
        return _tokenFarmList;
    }
    
    function getPeriodList() public view returns(uint[] memory){
        return _periodList;
    }
    
    function getPeriodDetail(uint periodwant) public view returns(uint256, uint256, uint256, uint256, uint256, uint256){
        periodList storage sys = period[periodwant];
        return(
            sys.periodTime,
            sys.cooldownTime,
            sys.formulaParam1,
            sys.formulaParam2,
            sys.formulaPenalty1,
            sys.formulaPenalty2
        );
    }
    
    function getUserInfo(address FarmrAddress) public view returns(bool, uint, address, string memory, uint256, uint256, uint256, uint256, uint256, uint256){
        userFarming storage usr = FarmDetail[FarmrAddress];
        rewardDetail storage est = ERC20perYFDOT[usr.tokenWantFarm];
        
        uint256 amountTotalFarmd;
        if(usr.activeFarm == false){
            amountTotalFarmd = 0;
        }else{
            amountTotalFarmd = usr.amountFarmd;
        }
        return(
            usr.activeFarm,
            usr.periodChoosed,
            usr.tokenWantFarm,
            est.symboltoken,
            amountTotalFarmd,
            usr.startFarm,
            usr.claimFarm.add(1 minutes),
            usr.endFarm,
            usr.cooldownDate,
            usr.claimed
        );
    }
    
    function getRewardClaimable(address FarmrAddress) public view returns(uint256){
        userFarming storage usr = FarmDetail[FarmrAddress];
        periodList storage sys = period[usr.periodChoosed];
        rewardDetail storage est = ERC20perYFDOT[usr.tokenWantFarm];
        
        uint256 rewards;
        
        if(usr.amountFarmd == 0 && usr.tokenWantFarm == address(0)){
            rewards = 0;
        }else{
            uint256 today = block.timestamp;
            uint256 diffTime;
            if(today > usr.endFarm){
                diffTime = usr.endFarm.sub(usr.startFarm);
            }else{
                diffTime = today.sub(usr.startFarm);
            }
            rewards = usr.amountFarmd.mul(diffTime);
            uint256 getTokenEqual = est.equalReward;
            rewards = rewards.mul(getTokenEqual);
            rewards = rewards.mul(sys.formulaParam1);
            rewards = rewards.div(10**est.decimaltoken);
            rewards = rewards.div(sys.formulaParam2);
            rewards = rewards.div(100);
            rewards = rewards.sub(usr.claimed);
        }
        return rewards;
    }
    
    function getRewardObtained(address FarmrAddress) public view returns(uint256){
        userFarming storage usr = FarmDetail[FarmrAddress];
        periodList storage sys = period[usr.periodChoosed];
        rewardDetail storage est = ERC20perYFDOT[usr.tokenWantFarm];
        uint256 rewards;
        
        if(usr.amountFarmd == 0 && usr.tokenWantFarm == address(0)){
            rewards = 0;
        }else{
            uint256 today = block.timestamp;
            uint256 diffTime;
            if(today > usr.endFarm){
                diffTime = usr.endFarm.sub(usr.startFarm);
            }else{
                diffTime = today.sub(usr.startFarm);
            }
            rewards = usr.amountFarmd.mul(diffTime);
            uint256 getTokenEqual = est.equalReward;
            rewards = rewards.mul(getTokenEqual);
            rewards = rewards.mul(sys.formulaParam1);
            rewards = rewards.div(10**est.decimaltoken);
            rewards = rewards.div(sys.formulaParam2);
            rewards = rewards.div(100);
        }
        return rewards;
    }
    
    function getRewardEstimator(address FarmrAddress) public view returns(uint256,uint256,uint256,uint256,uint256,uint256){
        userFarming storage usr = FarmDetail[FarmrAddress];
        periodList storage sys = period[usr.periodChoosed];
        rewardDetail storage est = ERC20perYFDOT[usr.tokenWantFarm];
        uint256 amountFarmdNow;
        
        if(usr.activeFarm == true){
            amountFarmdNow = usr.amountFarmd;
            uint256 perSec = amountFarmdNow.mul(sys.formulaParam1);
            uint256 getTokenEqual = est.equalReward;
            perSec = perSec.mul(getTokenEqual);
            perSec = perSec.div(sys.formulaParam2);
            perSec = perSec.div(100);
            perSec = perSec.div(10**est.decimaltoken);
            
            return(
                perSec,
                perSec.mul(60),
                perSec.mul(3600),
                perSec.mul(86400),
                perSec.mul(604800),
                perSec.mul(2592000)
            );
        }else{
            return(0,0,0,0,0,0);
        }
        
    }
    
    function getRewardCalculator(address tokenWantFarm, uint256 amountWantFarm, uint periodwant) public view returns(uint256){
        periodList storage sys = period[periodwant];
        rewardDetail storage est = ERC20perYFDOT[tokenWantFarm];
        
        uint256 startDate = block.timestamp;
        uint256 endDate = startDate.add(sys.periodTime);
        uint256 diffTime = endDate.sub(startDate);
        uint256 rewards = amountWantFarm.mul(diffTime);
        uint256 getTokenEqual = est.equalReward;
        rewards = rewards.mul(getTokenEqual);
        rewards = rewards.mul(sys.formulaParam1);
        rewards = rewards.div(10**est.decimaltoken);
        rewards = rewards.div(sys.formulaParam2);
        rewards = rewards.div(100);
        return rewards;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"YFDOTAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Farmr","type":"address"},{"indexed":true,"internalType":"address","name":"tokenFarmTarget","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountReward","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Farmr","type":"address"},{"indexed":true,"internalType":"address","name":"tokenFarmTarget","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountTokenFarmd","type":"uint256"}],"name":"Farm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Farmr","type":"address"},{"indexed":true,"internalType":"address","name":"tokenFarmTarget","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountTokenFarmd","type":"uint256"}],"name":"UnFarm","type":"event"},{"inputs":[{"internalType":"address","name":"tokenTargetFarm","type":"address"},{"internalType":"uint256","name":"amountWantFarm","type":"uint256"},{"internalType":"uint256","name":"periodwant","type":"uint256"}],"name":"FarmNow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timePeriodFarm","type":"uint256"},{"internalType":"uint256","name":"timeCooldownUnFarm","type":"uint256"},{"internalType":"uint256","name":"formula1","type":"uint256"},{"internalType":"uint256","name":"formula2","type":"uint256"},{"internalType":"uint256","name":"fpel1","type":"uint256"},{"internalType":"uint256","name":"fpel2","type":"uint256"}],"name":"addPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"uint256","name":"amountEqual","type":"uint256"},{"internalType":"uint256","name":"minFarm","type":"uint256"},{"internalType":"uint256","name":"maxFarm","type":"uint256"},{"internalType":"uint256","name":"decimall","type":"uint256"},{"internalType":"string","name":"symboltokens","type":"string"}],"name":"addTokenReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"claimDevBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"periodEdit","type":"uint256"},{"internalType":"uint256","name":"timePeriodFarm","type":"uint256"},{"internalType":"uint256","name":"timeCooldownUnFarm","type":"uint256"},{"internalType":"uint256","name":"formula1","type":"uint256"},{"internalType":"uint256","name":"formula2","type":"uint256"},{"internalType":"uint256","name":"fpel1","type":"uint256"},{"internalType":"uint256","name":"fpel2","type":"uint256"}],"name":"editPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"uint256","name":"amountEqual","type":"uint256"},{"internalType":"uint256","name":"minFarm","type":"uint256"},{"internalType":"uint256","name":"maxFarm","type":"uint256"},{"internalType":"uint256","name":"decimall","type":"uint256"},{"internalType":"string","name":"symboltokens","type":"string"}],"name":"editTokenReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActiveFarmer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"getDevBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Token","type":"address"}],"name":"getEqualReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"periodwant","type":"uint256"}],"name":"getPeriodDetail","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPeriodList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenWantFarm","type":"address"},{"internalType":"uint256","name":"amountWantFarm","type":"uint256"},{"internalType":"uint256","name":"periodwant","type":"uint256"}],"name":"getRewardCalculator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"FarmrAddress","type":"address"}],"name":"getRewardClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"FarmrAddress","type":"address"}],"name":"getRewardEstimator","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"FarmrAddress","type":"address"}],"name":"getRewardObtained","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFarmer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"FarmrAddress","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unFarmNow","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002c8738038062002c87833981016040819052620000349162000341565b6001600160a01b0381166000818152600160209081526040822091805290917fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49916200008a919062001a6462000291821b17901c565b1515600114620000b75760405162461bcd60e51b8152600401620000ae90620003c1565b60405180910390fd5b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015620000f157600080fd5b505afa15801562000106573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012c919062000371565b6200014b5760405162461bcd60e51b8152600401620000ae906200038a565b60006200015762000297565b600580546001600160a01b038088166001600160a01b031992831617835560048054918516918316919091179055600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180549091169055604080518082019091528181526416519113d560da1b602091909101908152919250620001ed9185916200029b565b50601260048401556040805180820190915260038082526208aa8960eb1b6020909201918252620002209184916200029b565b50662386f26fc100006002830155670de0b6b3a76400006001830155674563918244f400006003830155601260048301556040516001600160a01b038216906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505050506200043f565b3b151590565b3390565b828054620002a99062000402565b90600052602060002090601f016020900481019282620002cd576000855562000318565b82601f10620002e857805160ff191683800117855562000318565b8280016001018555821562000318579182015b8281111562000318578251825591602001919060010190620002fb565b50620003269291506200032a565b5090565b5b808211156200032657600081556001016200032b565b60006020828403121562000353578081fd5b81516001600160a01b03811681146200036a578182fd5b9392505050565b60006020828403121562000383578081fd5b5051919050565b6020808252601f908201527f546869732061646472657373206973206e6f7420455243323020546f6b656e00604082015260600190565b60208082526021908201527f546869732061646472657373206973206e6f7420536d617274636f6e747261636040820152601d60fa1b606082015260800190565b6002810460018216806200041757607f821691505b602082108114156200043957634e487b7160e01b600052602260045260246000fd5b50919050565b612838806200044f6000396000f3fe6080604052600436106101405760003560e01c80638d5bc68c116100b6578063d4259bb61161006f578063d4259bb614610365578063d92ee2fe14610396578063e48f0de6146103b8578063f2fde38b146103d8578063f3feded8146103f8578063fa65069f1461041857610140565b80638d5bc68c146102b95780638da5cb5b146102ce5780638e878729146102f0578063a3d7418c14610310578063aeaa1c9414610330578063b88a802f1461035057610140565b80636386c1c7116101085780636386c1c7146101f957806370cc190e1461022f578063715018a61461024f5780637a3f6ca91461026457806383e0c8781461028457806385dece881461029957610140565b806305f74fe81461014557806314ea1e891461017b578063273cbaa014610190578063301f77cf146101b25780635f536c8d146101e4575b600080fd5b34801561015157600080fd5b50610165610160366004611d58565b610438565b604051610172919061256b565b60405180910390f35b61018e610189366004611d72565b610457565b005b34801561019c57600080fd5b506101a56107c1565b604051610172919061200d565b3480156101be57600080fd5b506101d26101cd366004611d58565b610823565b604051610172969594939291906125aa565b3480156101f057600080fd5b50610165610964565b34801561020557600080fd5b50610219610214366004611d58565b61096a565b6040516101729a99989796959493929190612092565b34801561023b57600080fd5b506101d261024a366004611e9d565b610abc565b34801561025b57600080fd5b5061018e610af0565b34801561027057600080fd5b5061018e61027f366004611da4565b610b6f565b34801561029057600080fd5b50610165610d11565b3480156102a557600080fd5b506101656102b4366004611d58565b610e0d565b3480156102c557600080fd5b5061018e610f58565b3480156102da57600080fd5b506102e36111b3565b6040516101729190611fa2565b3480156102fc57600080fd5b5061018e61030b366004611ecd565b6111c2565b34801561031c57600080fd5b5061016561032b366004611d58565b611280565b34801561033c57600080fd5b5061018e61034b366004611f0f565b61139c565b34801561035c57600080fd5b5061018e611403565b34801561037157600080fd5b50610385610380366004611d58565b611579565b604051610172959493929190612574565b3480156103a257600080fd5b506103ab611662565b604051610172919061205a565b3480156103c457600080fd5b506101656103d3366004611d72565b6116b9565b3480156103e457600080fd5b5061018e6103f3366004611d58565b611780565b34801561040457600080fd5b5061018e610413366004611da4565b611837565b34801561042457600080fd5b5061018e610433366004611d58565b61198a565b6001600160a01b0381166000908152600360205260409020545b919050565b6000610461611a6a565b905060006001600160a01b038516156104f557604051636eb1769f60e11b81526001600160a01b0386169063dd62ed3e906104a29085903090600401611fb6565b60206040518083038186803b1580156104ba57600080fd5b505afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f29190611eb5565b90505b600061050083610e0d565b11156105275760405162461bcd60e51b815260040161051e90612134565b60405180910390fd5b6001600160a01b038083166000908152600260209081526040808320878452838352818420948a16808552600190935292204293916105ad5780600201543410156105845760405162461bcd60e51b815260040161051e9061234a565b80600301543411156105a85760405162461bcd60e51b815260040161051e90612471565b610615565b80600201548810156105d15760405162461bcd60e51b815260040161051e9061234a565b80600301548811156105f55760405162461bcd60e51b815260040161051e90612471565b878510156106155760405162461bcd60e51b815260040161051e90612225565b8254600160ff199091168117845583018790556002830180546001600160a01b0319166001600160a01b038b1617905560038301889055600483018490556106608462093a80611a6e565b60058401556001820154610675908590611a6e565b60078401558154610687908590611a6e565b6006840155600060088401819055805b6007548110156106fe57876001600160a01b0316600782815481106106cc57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156106ec57600191505b806106f6816127bb565b915050610697565b508061075057600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038a1615610774576107746001600160a01b038b1688308c611aa6565b888a6001600160a01b0316886001600160a01b03167f22357843602b631ef738ef8439659fbccae0f50c9f1a17abcedfafd2f785a0d660405160405180910390a450505050505050505050565b6060600680548060200260200160405190810160405280929190818152602001828054801561081957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107fb575b5050505050905090565b6001600160a01b0380821660009081526002602081815260408084206001808201548652858452828620948201549096168552918590528320815493948594859485948594859491939091859160ff1615151415610941575060038301546002830154600090610894908390611b04565b60018401549091506108a68282611b04565b91506108bf856003015483611b4990919063ffffffff16565b91506108cc826064611b49565b91506108e98460040154600a6108e29190612650565b8390611b49565b9150816108f781603c611b04565b61090384610e10611b04565b6109108562015180611b04565b61091d8662093a80611b04565b61092a8762278d00611b04565b9b509b509b509b509b509b5050505050505061095b565b600080600080600080995099509950995099509950505050505b91939550919395565b60075490565b6001600160a01b03808216600090815260026020818152604080842092830154909416835260019052918120825491928392839260609284928392839283928392839291839060ff166109bf575060006109c6565b5060038201545b8254600184015460028501546004860154600587015460ff909416936001600160a01b0390921691869186916109fd90603c611a6e565b89600601548a600701548b60080154868054610a1890612780565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490612780565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b505050505096509c509c509c509c509c509c509c509c509c509c505050509193959799509193959799565b6000908152602081905260409020805460018201546002830154600384015460048501546005909501549395929491939092565b610af8611a6a565b6004546001600160a01b03908116911614610b255760405162461bcd60e51b815260040161051e906120fd565b6004546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600480546001600160a01b0319169055565b610b77611a6a565b6004546001600160a01b03908116911614610ba45760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b03861615610c7357610bc5866001600160a01b0316611a64565b1515600114610be65760405162461bcd60e51b815260040161051e90612430565b856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1f57600080fd5b505afa158015610c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c579190611eb5565b610c735760405162461bcd60e51b815260040161051e90612381565b6001600160a01b038616600090815260016020818152604090922090810187905582519091610ca6918391850190611ca8565b50600281019490945550600383019190915560049091015550600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060005b600754811015610e075760006002600060078481548110610d4857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b039081168452838201949094526040928301909120825161012081018452815460ff161515808252600183810154948301949094526002830154909516938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e0840152600801546101008301529092501415610df457610df18360016125d2565b92505b5080610dff816127bb565b915050610d17565b50905090565b6001600160a01b038082166000908152600260208181526040808420600180820154865285845282862094820154909616855294909152822060038401549293928490158015610e68575060028401546001600160a01b0316155b15610e7557506000610f4f565b60068401544290600090821115610ea05760048601546006870154610e9991611b74565b9050610eb3565b6004860154610eb0908390611b74565b90505b6003860154610ec29082611b04565b6001850154909350610ed48482611b04565b9350610eed866002015485611b0490919063ffffffff16565b9350610f0a8560040154600a610f039190612650565b8590611b49565b9350610f23866003015485611b4990919063ffffffff16565b9350610f30846064611b49565b9350610f49876008015485611b7490919063ffffffff16565b93505050505b95945050505050565b6000610f62611a6a565b6001600160a01b038116600090815260026020908152604080832060018082015485529284905292208254939450919260ff16151514610fb45760405162461bcd60e51b815260040161051e9061231d565b60008260070154421015611064576000610fdf83600401548560030154611b0490919063ffffffff16565b9050610ff8836005015482611b4990919063ffffffff16565b9050611005816064611b49565b60038501549091506110179082611b74565b60028501546001600160a01b03166000908152600360205260409020549092506110419082611a6e565b60028501546001600160a01b03166000908152600360205260409020555061106b565b5060038201545b825460ff191683556006830154421015611086574260068401555b60028301546001600160a01b03166110d4576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156110ce573d6000803e3d6000fd5b506110ed565b60028301546110ed906001600160a01b03168583611ba0565b60006110f885610e0d565b9050801561112c57600554611117906001600160a01b03168683611ba0565b60088401546111269082611a6e565b60088501555b600384015460028501546040516001600160a01b03918216918816907feb825f41c5f1169295be69cb7a530de636e0a61af9e8ea0d1d68f462e424dc8990600090a460055460405182916001600160a01b0390811691908816907f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd98706890600090a45050505050565b6004546001600160a01b031690565b6111ca611a6a565b6004546001600160a01b039081169116146111f75760405162461bcd60e51b815260040161051e906120fd565b6008548061120757506001611215565b6112128160016125d2565b90505b600081815260208190526040812097885560018089019790975560028801959095556003870193909355600486019190915560059094019390935560088054928301815590527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6001600160a01b0380821660009081526002602081815260408084206001808201548652858452828620948201549096168552949091528220600384015492939284901580156112db575060028401546001600160a01b0316155b156112e857506000610f4f565b60068401544290600090821115611313576004860154600687015461130c91611b74565b9050611326565b6004860154611323908390611b74565b90505b60038601546113359082611b04565b60018501549093506113478482611b04565b9350611360866002015485611b0490919063ffffffff16565b93506113768560040154600a610f039190612650565b935061138f866003015485611b4990919063ffffffff16565b9350610f49846064611b49565b6113a4611a6a565b6004546001600160a01b039081169116146113d15760405162461bcd60e51b815260040161051e906120fd565b600096875260208790526040909620948555600185019390935560028401919091556003830155600482015560050155565b600061140d611a6a565b6001600160a01b0380821660009081526002602052604080822060055491516370a0823160e01b815294955093919216906370a0823190611452903090600401611fa2565b60206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611eb5565b905060006114af84610e0d565b905042818310156114d25760405162461bcd60e51b815260040161051e90612290565b428460050154106114f55760405162461bcd60e51b815260040161051e906124f0565b60088401546115049083611a6e565b60088501556115168162093a80611a6e565b60058086019190915554611534906001600160a01b03168684611ba0565b60055460405183916001600160a01b0390811691908816907f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd98706890600090a45050505050565b6000606060008060008060016000886001600160a01b03166001600160a01b0316815260200190815260200160002090508060010154816000018260020154836003015484600401548380546115ce90612780565b80601f01602080910402602001604051908101604052809291908181526020018280546115fa90612780565b80156116475780601f1061161c57610100808354040283529160200191611647565b820191906000526020600020905b81548152906001019060200180831161162a57829003601f168201915b50505050509350955095509550955095505091939590929450565b6060600880548060200260200160405190810160405280929190818152602001828054801561081957602002820191906000526020600020905b81548152602001906001019080831161169c575050505050905090565b6000818152602081815260408083206001600160a01b0387168452600190925282208154429084906116ec908390611a6e565b905060006116fa8284611b74565b905060006117088983611b04565b600186015490915061171a8282611b04565b9150611733876002015483611b0490919063ffffffff16565b91506117498660040154600a6108e29190612650565b9150611762876003015483611b4990919063ffffffff16565b915061176f826064611b49565b9750505050505050505b9392505050565b611788611a6a565b6004546001600160a01b039081169116146117b55760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b0381166117db5760405162461bcd60e51b815260040161051e906123f9565b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b61183f611a6a565b6004546001600160a01b0390811691161461186c5760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b0386161561193b5761188d866001600160a01b0316611a64565b15156001146118ae5760405162461bcd60e51b815260040161051e90612430565b856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e757600080fd5b505afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190611eb5565b61193b5760405162461bcd60e51b815260040161051e90612381565b6001600160a01b03861660009081526001602081815260409092209081018790558251909161196e918391850190611ca8565b5060028101949094555060038301919091556004909101555050565b611992611a6a565b6004546001600160a01b039081169116146119bf5760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b038116611a1e576004546001600160a01b03828116600090815260036020526040808220549051929093169280156108fc02929091818181858888f19350505050158015611a18573d6000803e3d6000fd5b50611a4a565b6004546001600160a01b03828116600081815260036020526040902054611a4a93919290911690611ba0565b6001600160a01b0316600090815260036020526040812055565b3b151590565b3390565b600080611a7b83856125d2565b905083811015611a9d5760405162461bcd60e51b815260040161051e90612182565b90505b92915050565b611afe846323b872dd60e01b858585604051602401611ac793929190611fd0565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611bc4565b50505050565b600082611b1357506000611aa0565b6000611b1f838561271e565b905082611b2c85836125ea565b14611a9d5760405162461bcd60e51b815260040161051e906123b8565b6000808211611b6a5760405162461bcd60e51b815260040161051e906122e6565b611a9d82846125ea565b600082821115611b965760405162461bcd60e51b815260040161051e906121ee565b611a9d828461273d565b611bbf8363a9059cbb60e01b8484604051602401611ac7929190611ff4565b505050565b611bd6826001600160a01b0316611a64565b611bf25760405162461bcd60e51b815260040161051e90612534565b600080836001600160a01b031683604051611c0d9190611f86565b6000604051808303816000865af19150503d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b509150915081611c715760405162461bcd60e51b815260040161051e906121b9565b805115611afe5780806020019051810190611c8c9190611e7d565b611afe5760405162461bcd60e51b815260040161051e906124a6565b828054611cb490612780565b90600052602060002090601f016020900481019282611cd65760008555611d1c565b82601f10611cef57805160ff1916838001178555611d1c565b82800160010185558215611d1c579182015b82811115611d1c578251825591602001919060010190611d01565b50611d28929150611d2c565b5090565b5b80821115611d285760008155600101611d2d565b80356001600160a01b038116811461045257600080fd5b600060208284031215611d69578081fd5b611a9d82611d41565b600080600060608486031215611d86578182fd5b611d8f84611d41565b95602085013595506040909401359392505050565b60008060008060008060c08789031215611dbc578182fd5b611dc587611d41565b9550602080880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff80821115611dfe578384fd5b818a0191508a601f830112611e11578384fd5b813581811115611e2357611e236127ec565b604051601f8201601f1916810185018381118282101715611e4657611e466127ec565b60405281815283820185018d1015611e5c578586fd5b81858501868301378585838301015280955050505050509295509295509295565b600060208284031215611e8e578081fd5b81518015158114611a9d578182fd5b600060208284031215611eae578081fd5b5035919050565b600060208284031215611ec6578081fd5b5051919050565b60008060008060008060c08789031215611ee5578182fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600080600080600060e0888a031215611f29578081fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008151808452611f72816020860160208601612754565b601f01601f19169290920160200192915050565b60008251611f98818460208701612754565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561204e5783516001600160a01b031683529284019291840191600101612029565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561204e57835183529284019291840191600101612076565b8a15158152602081018a90526001600160a01b0389166040820152610140606082018190526000906120c68382018b611f5a565b6080840199909952505060a081019590955260c085019390935260e084019190915261010083015261012090910152949350505050565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b6020808252602e908201527f506c6561736520636c61696d20796f7572207265776172642066726f6d20707260408201526d6576696f7573204661726d696e6760901b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526045908201527f496e73756666696369656e7420746f6b656e20617070726f76616c2062616c6160408201527f6e63652c20796f75206d75737420696e63726561736520796f757220616c6c6f60608201526477616e636560d81b608082015260a00190565b60208082526036908201527f506c65617365207761697420756e74696c2072657761726420706f6f6c206669604082015275363632b216103a393c9030b3b0b4b7103630ba32b91760511b606082015260800190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526013908201527211985c9b481b9bdd081858dd1a5d99481e595d606a1b604082015260600190565b6020808252601e908201527f4d696e696d756d204661726d696e672076616c75652072657175697265640000604082015260600190565b6020808252601f908201527f546869732061646472657373206973206e6f7420455243323020546f6b656e00604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601d908201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604082015260600190565b60208082526021908201527f546869732061646472657373206973206e6f7420536d617274636f6e747261636040820152601d60fa1b606082015260800190565b6020808252818101527f4d6178696d756d204661726d696e672076616c75652069732072656163686564604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526024908201527f506c65617365207761697420756e74696c20776169742074696d6520726561636040820152633432b21760e11b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b90815260200190565b600086825260a0602083015261258d60a0830187611f5a565b604083019590955250606081019290925260809091015292915050565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b600082198211156125e5576125e56127d6565b500190565b60008261260557634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161261c5750612647565b81870482111561262e5761262e6127d6565b8086161561263b57918102915b9490941c93800261260d565b94509492505050565b6000611a9d600019848460008261266957506001611779565b8161267657506000611779565b816001811461268c5760028114612696576126c3565b6001915050611779565b60ff8411156126a7576126a76127d6565b6001841b9150848211156126bd576126bd6127d6565b50611779565b5060208310610133831016604e8410600b84101617156126f6575081810a838111156126f1576126f16127d6565b611779565b612703848484600161260a565b808604821115612715576127156127d6565b02949350505050565b6000816000190483118215151615612738576127386127d6565b500290565b60008282101561274f5761274f6127d6565b500390565b60005b8381101561276f578181015183820152602001612757565b83811115611afe5750506000910152565b60028104600182168061279457607f821691505b602082108114156127b557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127cf576127cf6127d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220c582c031845b8ecf41c54b6d5346aab421f413b1101201f0e832c5fb1e40030864736f6c634300080000330000000000000000000000002e6539edc3b76f1e21b71d214527faba875f70f3

Deployed Bytecode

0x6080604052600436106101405760003560e01c80638d5bc68c116100b6578063d4259bb61161006f578063d4259bb614610365578063d92ee2fe14610396578063e48f0de6146103b8578063f2fde38b146103d8578063f3feded8146103f8578063fa65069f1461041857610140565b80638d5bc68c146102b95780638da5cb5b146102ce5780638e878729146102f0578063a3d7418c14610310578063aeaa1c9414610330578063b88a802f1461035057610140565b80636386c1c7116101085780636386c1c7146101f957806370cc190e1461022f578063715018a61461024f5780637a3f6ca91461026457806383e0c8781461028457806385dece881461029957610140565b806305f74fe81461014557806314ea1e891461017b578063273cbaa014610190578063301f77cf146101b25780635f536c8d146101e4575b600080fd5b34801561015157600080fd5b50610165610160366004611d58565b610438565b604051610172919061256b565b60405180910390f35b61018e610189366004611d72565b610457565b005b34801561019c57600080fd5b506101a56107c1565b604051610172919061200d565b3480156101be57600080fd5b506101d26101cd366004611d58565b610823565b604051610172969594939291906125aa565b3480156101f057600080fd5b50610165610964565b34801561020557600080fd5b50610219610214366004611d58565b61096a565b6040516101729a99989796959493929190612092565b34801561023b57600080fd5b506101d261024a366004611e9d565b610abc565b34801561025b57600080fd5b5061018e610af0565b34801561027057600080fd5b5061018e61027f366004611da4565b610b6f565b34801561029057600080fd5b50610165610d11565b3480156102a557600080fd5b506101656102b4366004611d58565b610e0d565b3480156102c557600080fd5b5061018e610f58565b3480156102da57600080fd5b506102e36111b3565b6040516101729190611fa2565b3480156102fc57600080fd5b5061018e61030b366004611ecd565b6111c2565b34801561031c57600080fd5b5061016561032b366004611d58565b611280565b34801561033c57600080fd5b5061018e61034b366004611f0f565b61139c565b34801561035c57600080fd5b5061018e611403565b34801561037157600080fd5b50610385610380366004611d58565b611579565b604051610172959493929190612574565b3480156103a257600080fd5b506103ab611662565b604051610172919061205a565b3480156103c457600080fd5b506101656103d3366004611d72565b6116b9565b3480156103e457600080fd5b5061018e6103f3366004611d58565b611780565b34801561040457600080fd5b5061018e610413366004611da4565b611837565b34801561042457600080fd5b5061018e610433366004611d58565b61198a565b6001600160a01b0381166000908152600360205260409020545b919050565b6000610461611a6a565b905060006001600160a01b038516156104f557604051636eb1769f60e11b81526001600160a01b0386169063dd62ed3e906104a29085903090600401611fb6565b60206040518083038186803b1580156104ba57600080fd5b505afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f29190611eb5565b90505b600061050083610e0d565b11156105275760405162461bcd60e51b815260040161051e90612134565b60405180910390fd5b6001600160a01b038083166000908152600260209081526040808320878452838352818420948a16808552600190935292204293916105ad5780600201543410156105845760405162461bcd60e51b815260040161051e9061234a565b80600301543411156105a85760405162461bcd60e51b815260040161051e90612471565b610615565b80600201548810156105d15760405162461bcd60e51b815260040161051e9061234a565b80600301548811156105f55760405162461bcd60e51b815260040161051e90612471565b878510156106155760405162461bcd60e51b815260040161051e90612225565b8254600160ff199091168117845583018790556002830180546001600160a01b0319166001600160a01b038b1617905560038301889055600483018490556106608462093a80611a6e565b60058401556001820154610675908590611a6e565b60078401558154610687908590611a6e565b6006840155600060088401819055805b6007548110156106fe57876001600160a01b0316600782815481106106cc57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156106ec57600191505b806106f6816127bb565b915050610697565b508061075057600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0389161790555b6001600160a01b038a1615610774576107746001600160a01b038b1688308c611aa6565b888a6001600160a01b0316886001600160a01b03167f22357843602b631ef738ef8439659fbccae0f50c9f1a17abcedfafd2f785a0d660405160405180910390a450505050505050505050565b6060600680548060200260200160405190810160405280929190818152602001828054801561081957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107fb575b5050505050905090565b6001600160a01b0380821660009081526002602081815260408084206001808201548652858452828620948201549096168552918590528320815493948594859485948594859491939091859160ff1615151415610941575060038301546002830154600090610894908390611b04565b60018401549091506108a68282611b04565b91506108bf856003015483611b4990919063ffffffff16565b91506108cc826064611b49565b91506108e98460040154600a6108e29190612650565b8390611b49565b9150816108f781603c611b04565b61090384610e10611b04565b6109108562015180611b04565b61091d8662093a80611b04565b61092a8762278d00611b04565b9b509b509b509b509b509b5050505050505061095b565b600080600080600080995099509950995099509950505050505b91939550919395565b60075490565b6001600160a01b03808216600090815260026020818152604080842092830154909416835260019052918120825491928392839260609284928392839283928392839291839060ff166109bf575060006109c6565b5060038201545b8254600184015460028501546004860154600587015460ff909416936001600160a01b0390921691869186916109fd90603c611a6e565b89600601548a600701548b60080154868054610a1890612780565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490612780565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b505050505096509c509c509c509c509c509c509c509c509c509c505050509193959799509193959799565b6000908152602081905260409020805460018201546002830154600384015460048501546005909501549395929491939092565b610af8611a6a565b6004546001600160a01b03908116911614610b255760405162461bcd60e51b815260040161051e906120fd565b6004546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600480546001600160a01b0319169055565b610b77611a6a565b6004546001600160a01b03908116911614610ba45760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b03861615610c7357610bc5866001600160a01b0316611a64565b1515600114610be65760405162461bcd60e51b815260040161051e90612430565b856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1f57600080fd5b505afa158015610c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c579190611eb5565b610c735760405162461bcd60e51b815260040161051e90612381565b6001600160a01b038616600090815260016020818152604090922090810187905582519091610ca6918391850190611ca8565b50600281019490945550600383019190915560049091015550600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060005b600754811015610e075760006002600060078481548110610d4857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b039081168452838201949094526040928301909120825161012081018452815460ff161515808252600183810154948301949094526002830154909516938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e0840152600801546101008301529092501415610df457610df18360016125d2565b92505b5080610dff816127bb565b915050610d17565b50905090565b6001600160a01b038082166000908152600260208181526040808420600180820154865285845282862094820154909616855294909152822060038401549293928490158015610e68575060028401546001600160a01b0316155b15610e7557506000610f4f565b60068401544290600090821115610ea05760048601546006870154610e9991611b74565b9050610eb3565b6004860154610eb0908390611b74565b90505b6003860154610ec29082611b04565b6001850154909350610ed48482611b04565b9350610eed866002015485611b0490919063ffffffff16565b9350610f0a8560040154600a610f039190612650565b8590611b49565b9350610f23866003015485611b4990919063ffffffff16565b9350610f30846064611b49565b9350610f49876008015485611b7490919063ffffffff16565b93505050505b95945050505050565b6000610f62611a6a565b6001600160a01b038116600090815260026020908152604080832060018082015485529284905292208254939450919260ff16151514610fb45760405162461bcd60e51b815260040161051e9061231d565b60008260070154421015611064576000610fdf83600401548560030154611b0490919063ffffffff16565b9050610ff8836005015482611b4990919063ffffffff16565b9050611005816064611b49565b60038501549091506110179082611b74565b60028501546001600160a01b03166000908152600360205260409020549092506110419082611a6e565b60028501546001600160a01b03166000908152600360205260409020555061106b565b5060038201545b825460ff191683556006830154421015611086574260068401555b60028301546001600160a01b03166110d4576040516001600160a01b0385169082156108fc029083906000818181858888f193505050501580156110ce573d6000803e3d6000fd5b506110ed565b60028301546110ed906001600160a01b03168583611ba0565b60006110f885610e0d565b9050801561112c57600554611117906001600160a01b03168683611ba0565b60088401546111269082611a6e565b60088501555b600384015460028501546040516001600160a01b03918216918816907feb825f41c5f1169295be69cb7a530de636e0a61af9e8ea0d1d68f462e424dc8990600090a460055460405182916001600160a01b0390811691908816907f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd98706890600090a45050505050565b6004546001600160a01b031690565b6111ca611a6a565b6004546001600160a01b039081169116146111f75760405162461bcd60e51b815260040161051e906120fd565b6008548061120757506001611215565b6112128160016125d2565b90505b600081815260208190526040812097885560018089019790975560028801959095556003870193909355600486019190915560059094019390935560088054928301815590527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6001600160a01b0380821660009081526002602081815260408084206001808201548652858452828620948201549096168552949091528220600384015492939284901580156112db575060028401546001600160a01b0316155b156112e857506000610f4f565b60068401544290600090821115611313576004860154600687015461130c91611b74565b9050611326565b6004860154611323908390611b74565b90505b60038601546113359082611b04565b60018501549093506113478482611b04565b9350611360866002015485611b0490919063ffffffff16565b93506113768560040154600a610f039190612650565b935061138f866003015485611b4990919063ffffffff16565b9350610f49846064611b49565b6113a4611a6a565b6004546001600160a01b039081169116146113d15760405162461bcd60e51b815260040161051e906120fd565b600096875260208790526040909620948555600185019390935560028401919091556003830155600482015560050155565b600061140d611a6a565b6001600160a01b0380821660009081526002602052604080822060055491516370a0823160e01b815294955093919216906370a0823190611452903090600401611fa2565b60206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611eb5565b905060006114af84610e0d565b905042818310156114d25760405162461bcd60e51b815260040161051e90612290565b428460050154106114f55760405162461bcd60e51b815260040161051e906124f0565b60088401546115049083611a6e565b60088501556115168162093a80611a6e565b60058086019190915554611534906001600160a01b03168684611ba0565b60055460405183916001600160a01b0390811691908816907f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd98706890600090a45050505050565b6000606060008060008060016000886001600160a01b03166001600160a01b0316815260200190815260200160002090508060010154816000018260020154836003015484600401548380546115ce90612780565b80601f01602080910402602001604051908101604052809291908181526020018280546115fa90612780565b80156116475780601f1061161c57610100808354040283529160200191611647565b820191906000526020600020905b81548152906001019060200180831161162a57829003601f168201915b50505050509350955095509550955095505091939590929450565b6060600880548060200260200160405190810160405280929190818152602001828054801561081957602002820191906000526020600020905b81548152602001906001019080831161169c575050505050905090565b6000818152602081815260408083206001600160a01b0387168452600190925282208154429084906116ec908390611a6e565b905060006116fa8284611b74565b905060006117088983611b04565b600186015490915061171a8282611b04565b9150611733876002015483611b0490919063ffffffff16565b91506117498660040154600a6108e29190612650565b9150611762876003015483611b4990919063ffffffff16565b915061176f826064611b49565b9750505050505050505b9392505050565b611788611a6a565b6004546001600160a01b039081169116146117b55760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b0381166117db5760405162461bcd60e51b815260040161051e906123f9565b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b61183f611a6a565b6004546001600160a01b0390811691161461186c5760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b0386161561193b5761188d866001600160a01b0316611a64565b15156001146118ae5760405162461bcd60e51b815260040161051e90612430565b856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e757600080fd5b505afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190611eb5565b61193b5760405162461bcd60e51b815260040161051e90612381565b6001600160a01b03861660009081526001602081815260409092209081018790558251909161196e918391850190611ca8565b5060028101949094555060038301919091556004909101555050565b611992611a6a565b6004546001600160a01b039081169116146119bf5760405162461bcd60e51b815260040161051e906120fd565b6001600160a01b038116611a1e576004546001600160a01b03828116600090815260036020526040808220549051929093169280156108fc02929091818181858888f19350505050158015611a18573d6000803e3d6000fd5b50611a4a565b6004546001600160a01b03828116600081815260036020526040902054611a4a93919290911690611ba0565b6001600160a01b0316600090815260036020526040812055565b3b151590565b3390565b600080611a7b83856125d2565b905083811015611a9d5760405162461bcd60e51b815260040161051e90612182565b90505b92915050565b611afe846323b872dd60e01b858585604051602401611ac793929190611fd0565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611bc4565b50505050565b600082611b1357506000611aa0565b6000611b1f838561271e565b905082611b2c85836125ea565b14611a9d5760405162461bcd60e51b815260040161051e906123b8565b6000808211611b6a5760405162461bcd60e51b815260040161051e906122e6565b611a9d82846125ea565b600082821115611b965760405162461bcd60e51b815260040161051e906121ee565b611a9d828461273d565b611bbf8363a9059cbb60e01b8484604051602401611ac7929190611ff4565b505050565b611bd6826001600160a01b0316611a64565b611bf25760405162461bcd60e51b815260040161051e90612534565b600080836001600160a01b031683604051611c0d9190611f86565b6000604051808303816000865af19150503d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b509150915081611c715760405162461bcd60e51b815260040161051e906121b9565b805115611afe5780806020019051810190611c8c9190611e7d565b611afe5760405162461bcd60e51b815260040161051e906124a6565b828054611cb490612780565b90600052602060002090601f016020900481019282611cd65760008555611d1c565b82601f10611cef57805160ff1916838001178555611d1c565b82800160010185558215611d1c579182015b82811115611d1c578251825591602001919060010190611d01565b50611d28929150611d2c565b5090565b5b80821115611d285760008155600101611d2d565b80356001600160a01b038116811461045257600080fd5b600060208284031215611d69578081fd5b611a9d82611d41565b600080600060608486031215611d86578182fd5b611d8f84611d41565b95602085013595506040909401359392505050565b60008060008060008060c08789031215611dbc578182fd5b611dc587611d41565b9550602080880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff80821115611dfe578384fd5b818a0191508a601f830112611e11578384fd5b813581811115611e2357611e236127ec565b604051601f8201601f1916810185018381118282101715611e4657611e466127ec565b60405281815283820185018d1015611e5c578586fd5b81858501868301378585838301015280955050505050509295509295509295565b600060208284031215611e8e578081fd5b81518015158114611a9d578182fd5b600060208284031215611eae578081fd5b5035919050565b600060208284031215611ec6578081fd5b5051919050565b60008060008060008060c08789031215611ee5578182fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600080600080600060e0888a031215611f29578081fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008151808452611f72816020860160208601612754565b601f01601f19169290920160200192915050565b60008251611f98818460208701612754565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561204e5783516001600160a01b031683529284019291840191600101612029565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561204e57835183529284019291840191600101612076565b8a15158152602081018a90526001600160a01b0389166040820152610140606082018190526000906120c68382018b611f5a565b6080840199909952505060a081019590955260c085019390935260e084019190915261010083015261012090910152949350505050565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b6020808252602e908201527f506c6561736520636c61696d20796f7572207265776172642066726f6d20707260408201526d6576696f7573204661726d696e6760901b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526045908201527f496e73756666696369656e7420746f6b656e20617070726f76616c2062616c6160408201527f6e63652c20796f75206d75737420696e63726561736520796f757220616c6c6f60608201526477616e636560d81b608082015260a00190565b60208082526036908201527f506c65617365207761697420756e74696c2072657761726420706f6f6c206669604082015275363632b216103a393c9030b3b0b4b7103630ba32b91760511b606082015260800190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b60208082526013908201527211985c9b481b9bdd081858dd1a5d99481e595d606a1b604082015260600190565b6020808252601e908201527f4d696e696d756d204661726d696e672076616c75652072657175697265640000604082015260600190565b6020808252601f908201527f546869732061646472657373206973206e6f7420455243323020546f6b656e00604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601d908201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604082015260600190565b60208082526021908201527f546869732061646472657373206973206e6f7420536d617274636f6e747261636040820152601d60fa1b606082015260800190565b6020808252818101527f4d6178696d756d204661726d696e672076616c75652069732072656163686564604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526024908201527f506c65617365207761697420756e74696c20776169742074696d6520726561636040820152633432b21760e11b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b90815260200190565b600086825260a0602083015261258d60a0830187611f5a565b604083019590955250606081019290925260809091015292915050565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b600082198211156125e5576125e56127d6565b500190565b60008261260557634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161261c5750612647565b81870482111561262e5761262e6127d6565b8086161561263b57918102915b9490941c93800261260d565b94509492505050565b6000611a9d600019848460008261266957506001611779565b8161267657506000611779565b816001811461268c5760028114612696576126c3565b6001915050611779565b60ff8411156126a7576126a76127d6565b6001841b9150848211156126bd576126bd6127d6565b50611779565b5060208310610133831016604e8410600b84101617156126f6575081810a838111156126f1576126f16127d6565b611779565b612703848484600161260a565b808604821115612715576127156127d6565b02949350505050565b6000816000190483118215151615612738576127386127d6565b500290565b60008282101561274f5761274f6127d6565b500390565b60005b8381101561276f578181015183820152602001612757565b83811115611afe5750506000910152565b60028104600182168061279457607f821691505b602082108114156127b557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127cf576127cf6127d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220c582c031845b8ecf41c54b6d5346aab421f413b1101201f0e832c5fb1e40030864736f6c63430008000033

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

0000000000000000000000002e6539edc3b76f1e21b71d214527faba875f70f3

-----Decoded View---------------
Arg [0] : YFDOTAddress (address): 0x2e6539edc3b76f1E21B71d214527FAbA875F70F3

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002e6539edc3b76f1e21b71d214527faba875f70f3


Deployed Bytecode Sourcemap

9528:17153:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20088:111;;;;;;;;;;-1:-1:-1;20088:111:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16357:2191;;;;;;:::i;:::-;;:::i;:::-;;21056:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24789:1090::-;;;;;;;;;;-1:-1:-1;24789:1090:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;20584:98::-;;;;;;;;;;;;;:::i;21686:821::-;;;;;;;;;;-1:-1:-1;21686:821:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;21277:397::-;;;;;;;;;;-1:-1:-1;21277:397:0;;;;;:::i;:::-;;:::i;12225:148::-;;;;;;;;;;;;;:::i;12632:727::-;;;;;;;;;;-1:-1:-1;12632:727:0;;;;;:::i;:::-;;:::i;20694:350::-;;;;;;;;;;;;;:::i;22519:1153::-;;;;;;;;;;-1:-1:-1;22519:1153:0;;;;;:::i;:::-;;:::i;18560:1516::-;;;;;;;;;;;;;:::i;12020:79::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14059:694::-;;;;;;;;;;-1:-1:-1;14059:694:0;;;;;:::i;:::-;;:::i;23684:1093::-;;;;;;;;;;-1:-1:-1;23684:1093:0;;;;;:::i;:::-;;:::i;14765:485::-;;;;;;;;;;-1:-1:-1;14765:485:0;;;;;:::i;:::-;;:::i;15581:764::-;;;;;;;;;;;;;:::i;20211:361::-;;;;;;;;;;-1:-1:-1;20211:361:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;21169:96::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25891:787::-;;;;;;;;;;-1:-1:-1;25891:787:0;;;;;:::i;:::-;;:::i;12385:235::-;;;;;;;;;;-1:-1:-1;12385:235:0;;;;;:::i;:::-;;:::i;13371:676::-;;;;;;;;;;-1:-1:-1;13371:676:0;;;;;:::i;:::-;;:::i;15262:307::-;;;;;;;;;;-1:-1:-1;15262:307:0;;;;;:::i;:::-;;:::i;20088:111::-;-1:-1:-1;;;;;20173:18:0;;20147:7;20173:18;;;:10;:18;;;;;;20088:111;;;;:::o;16357:2191::-;16473:17;16493:12;:10;:12::i;:::-;16473:32;-1:-1:-1;16516:20:0;-1:-1:-1;;;;;16550:29:0;;;16547:134;;16610:59;;-1:-1:-1;;;16610:59:0;;-1:-1:-1;;;;;16610:33:0;;;;;:59;;16644:9;;16663:4;;16610:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16595:74;;16547:134;16736:1;16704:29;16723:9;16704:18;:29::i;:::-;:33;16701:120;;;16753:56;;-1:-1:-1;;;16753:56:0;;;;;;;:::i;:::-;;;;;;;;16701:120;-1:-1:-1;;;;;16909:21:0;;;16841:13;16909:21;;;:10;:21;;;;;;;;16966:18;;;;;;;;;17022:30;;;;;;:13;:30;;;;;16857:15;;16966:18;17073:547;;17142:3;:15;;;17129:9;:28;;17121:71;;;;-1:-1:-1;;;17121:71:0;;;;;;;:::i;:::-;17228:3;:15;;;17215:9;:28;;17207:73;;;;-1:-1:-1;;;17207:73:0;;;;;;;:::i;:::-;17073:547;;;17337:3;:15;;;17319:14;:33;;17311:76;;;;-1:-1:-1;;;17311:76:0;;;;;;;:::i;:::-;17428:3;:15;;;17410:14;:33;;17402:78;;;;-1:-1:-1;;;17402:78:0;;;;;;;:::i;:::-;17519:14;17503:12;:30;;17495:113;;;;-1:-1:-1;;;17495:113:0;;;;;;;:::i;:::-;17640:21;;17657:4;-1:-1:-1;;17640:21:0;;;;;;;17672:17;;:30;;;17713:17;;;:35;;-1:-1:-1;;;;;;17713:35:0;-1:-1:-1;;;;;17713:35:0;;;;;17759:15;;;:32;;;17802:13;;;:21;;;17850:17;17802:21;17860:6;17850:9;:17::i;:::-;17834:13;;;:33;17907:16;;;;17897:27;;:5;;:9;:27::i;:::-;17878:16;;;:46;17959:14;;17949:25;;:5;;:9;:25::i;:::-;17935:11;;;:39;17999:1;17985:11;;;:15;;;17999:1;18055:153;18075:11;:18;18071:22;;18055:153;;;18135:9;-1:-1:-1;;;;;18117:27:0;:11;18129:1;18117:14;;;;;;-1:-1:-1;;;18117:14:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18117:14:0;:27;18114:83;;;18177:4;18164:17;;18114:83;18095:3;;;;:::i;:::-;;;;18055:153;;;-1:-1:-1;18231:19:0;18228:77;;18266:11;:27;;;;;;;-1:-1:-1;18266:27:0;;;;;;;;-1:-1:-1;;;;;;18266:27:0;-1:-1:-1;;;;;18266:27:0;;;;;18228:77;-1:-1:-1;;;;;18328:29:0;;;18325:142;;18373:82;-1:-1:-1;;;;;18373:40:0;;18414:9;18433:4;18440:14;18373:40;:82::i;:::-;18525:14;18508:15;-1:-1:-1;;;;;18492:48:0;18497:9;-1:-1:-1;;;;;18492:48:0;;;;;;;;;;;16357:2191;;;;;;;;;;:::o;21056:101::-;21100:16;21135:14;21128:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21128:21:0;;;;;;;;;;;;;;;;;;;;;;;21056:101;:::o;24789:1090::-;-1:-1:-1;;;;;24944:24:0;;;24859:7;24944:24;;;:10;:24;;;;;;;;25011:17;;;;;25004:25;;;;;;;;25081:17;;;;;;;25067:32;;;;;;;;25156:14;;24859:7;;;;;;;;;;;;24944:24;;25067:32;;24859:7;;25156:14;;:22;;;25153:709;;;-1:-1:-1;25211:15:0;;;;25277:17;;;;25241:14;;25258:37;;25211:15;;25258:18;:37::i;:::-;25334:15;;;;25241:54;;-1:-1:-1;25373:25:0;25241:54;25334:15;25373:10;:25::i;:::-;25364:34;;25422:29;25433:3;:17;;;25422:6;:10;;:29;;;;:::i;:::-;25413:38;-1:-1:-1;25475:15:0;25413:38;25486:3;25475:10;:15::i;:::-;25466:24;;25514:32;25529:3;:16;;;25525:2;:20;;;;:::i;:::-;25514:6;;:10;:32::i;:::-;25505:41;-1:-1:-1;25505:41:0;25625:14;25505:41;25636:2;25625:10;:14::i;:::-;25658:16;:6;25669:4;25658:10;:16::i;:::-;25693:17;:6;25704:5;25693:10;:17::i;:::-;25729:18;:6;25740;25729:10;:18::i;:::-;25766:19;:6;25777:7;25766:10;:19::i;:::-;25575:225;;;;;;;;;;;;;;;;;;;;25153:709;25838:1;25840;25842;25844;25846;25848;25831:19;;;;;;;;;;;;;;;;24789:1090;;;;;;;;:::o;20584:98::-;20656:11;:18;20584:98;:::o;21686:821::-;-1:-1:-1;;;;;21875:24:0;;;21749:4;21875:24;;;:10;:24;;;;;;;;21951:17;;;;;;;21937:32;;:13;:32;;;;;22028:14;;21749:4;;;;;;21770:13;;21749:4;;;;;;;;;;;;21875:24;21749:4;;22028:14;;22025:139;;-1:-1:-1;22086:1:0;22025:139;;;-1:-1:-1;22137:15:0;;;;22025:139;22195:14;;;22224:17;;;22256;;;;22349:13;;;;22377;;;;22195:14;;;;;-1:-1:-1;;;;;22256:17:0;;;;22288:3;;22318:16;;22377:28;;22395:9;22377:17;:28::i;:::-;22420:3;:11;;;22446:3;:16;;;22477:3;:11;;;22174:325;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21686:821;;;;;;;;;;;:::o;21277:397::-;21339:7;21428:18;;;;;;;;;;21478:14;;21507:16;;;;21538:17;;;;21570;;;;21602:19;;;;21636;;;;;21478:14;;21507:16;;21538:17;;21570;;21277:397::o;12225:148::-;12157:12;:10;:12::i;:::-;12147:6;;-1:-1:-1;;;;;12147:6:0;;;:22;;;12139:58;;;;-1:-1:-1;;;12139:58:0;;;;;;;:::i;:::-;12316:6:::1;::::0;12295:40:::1;::::0;12332:1:::1;::::0;-1:-1:-1;;;;;12316:6:0::1;::::0;12295:40:::1;::::0;12332:1;;12295:40:::1;12346:6;:19:::0;;-1:-1:-1;;;;;;12346:19:0::1;::::0;;12225:148::o;12632:727::-;12157:12;:10;:12::i;:::-;12147:6;;-1:-1:-1;;;;;12147:6:0;;;:22;;;12139:58;;;;-1:-1:-1;;;12139:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12812:24:0;::::1;::::0;12809:227:::1;;12860:23;:10;-1:-1:-1::0;;;;;12860:21:0::1;;:23::i;:::-;:31;;12887:4;12860:31;12852:76;;;;-1:-1:-1::0;;;12852:76:0::1;;;;;;;:::i;:::-;12958:10;-1:-1:-1::0;;;;;12951:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12943:81;;;;-1:-1:-1::0;;;12943:81:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13083:25:0;::::1;13056:24;13083:25:::0;;;:13:::1;:25;::::0;;;;;;;13119:15;;::::1;:29:::0;;;13159:30;;13083:25;;13159:30:::1;::::0;13083:25;;13159:30;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13200:15:0::1;::::0;::::1;:25:::0;;;;-1:-1:-1;13236:15:0::1;::::0;::::1;:25:::0;;;;13272:16:::1;::::0;;::::1;:27:::0;-1:-1:-1;13320:14:0::1;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;13320:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;13320:31:0::1;-1:-1:-1::0;;;;;13320:31:0;;;::::1;::::0;;;::::1;::::0;;12632:727::o;20694:350::-;20741:7;20760:18;20793:6;20789:220;20809:11;:18;20805:22;;20789:220;;;20848:20;20871:10;:26;20882:11;20894:1;20882:14;;;;;;-1:-1:-1;;;20882:14:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20882:14:0;;;20871:26;;;;;;;;;;;;;;;;20848:49;;;;;;;;;;;;;;;;20882:14;20848:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20882:14;20848:49;;;;;-1:-1:-1;20915:20:0;20912:86;;;20968:14;:10;20981:1;20968:14;:::i;:::-;20955:27;;20912:86;-1:-1:-1;20829:3:0;;;;:::i;:::-;;;;20789:220;;;-1:-1:-1;21026:10:0;-1:-1:-1;20694:350:0;:::o;22519:1153::-;-1:-1:-1;;;;;22634:24:0;;;22589:7;22634:24;;;:10;:24;;;;;;;;22701:17;;;;;22694:25;;;;;;;;22771:17;;;;;;;22757:32;;;;;;;;22849:15;;;;22589:7;;22634:24;22589:7;;22849:20;:55;;;;-1:-1:-1;22873:17:0;;;;-1:-1:-1;;;;;22873:17:0;:31;22849:55;22846:794;;;-1:-1:-1;22930:1:0;22846:794;;;23050:11;;;;22978:15;;22962:13;;23042:19;;23039:173;;;23108:13;;;;23092:11;;;;:30;;:15;:30::i;:::-;23081:41;;23039:173;;;23182:13;;;;23172:24;;:5;;:9;:24::i;:::-;23161:35;;23039:173;23236:15;;;;:29;;23256:8;23236:19;:29::i;:::-;23304:15;;;;23226:39;;-1:-1:-1;23344:26:0;23226:39;23304:15;23344:11;:26::i;:::-;23334:36;;23395:30;23407:3;:17;;;23395:7;:11;;:30;;;;:::i;:::-;23385:40;;23450:33;23466:3;:16;;;23462:2;:20;;;;:::i;:::-;23450:7;;:11;:33::i;:::-;23440:43;;23508:30;23520:3;:17;;;23508:7;:11;;:30;;;;:::i;:::-;23498:40;-1:-1:-1;23563:16:0;23498:40;23575:3;23563:11;:16::i;:::-;23553:26;;23604:24;23616:3;:11;;;23604:7;:11;;:24;;;;:::i;:::-;23594:34;;22846:794;;;;23657:7;22519:1153;-1:-1:-1;;;;;22519:1153:0:o;18560:1516::-;18606:17;18626:12;:10;:12::i;:::-;-1:-1:-1;;;;;18675:21:0;;18649:23;18675:21;;;:10;:21;;;;;;;;18739:17;;;;;18732:25;;;;;;;;18786:14;;18606:32;;-1:-1:-1;18675:21:0;;18786:14;;:22;;;18778:55;;;;-1:-1:-1;;;18778:55:0;;;;;;;:::i;:::-;18854:19;18905:3;:16;;;18887:15;:34;18884:420;;;18937:14;18954:40;18974:3;:19;;;18954:3;:15;;;:19;;:40;;;;:::i;:::-;18937:57;;19018:31;19029:3;:19;;;19018:6;:10;;:31;;;;:::i;:::-;19009:40;-1:-1:-1;19073:15:0;19009:40;19084:3;19073:10;:15::i;:::-;19117;;;;19064:24;;-1:-1:-1;19117:27:0;;19064:24;19117:19;:27::i;:::-;19202:17;;;;-1:-1:-1;;;;;19202:17:0;19191:29;;;;:10;:29;;;;;;19103:41;;-1:-1:-1;19191:41:0;;19225:6;19191:33;:41::i;:::-;19170:17;;;;-1:-1:-1;;;;;19170:17:0;19159:29;;;;:10;:29;;;;;:73;-1:-1:-1;18884:420:0;;;-1:-1:-1;19277:15:0;;;;18884:420;19324:22;;-1:-1:-1;;19324:22:0;;;19378:11;;;;19360:15;:29;19357:89;;;19419:15;19405:11;;;:29;19357:89;19469:17;;;;-1:-1:-1;;;;;19469:17:0;19466:195;;19516:40;;-1:-1:-1;;;;;19516:27:0;;;:40;;;;;19544:11;;19516:40;;;;19544:11;19516:27;:40;;;;;;;;;;;;;;;;;;;;;19466:195;;;19594:17;;;;19587:62;;-1:-1:-1;;;;;19594:17:0;19626:9;19637:11;19587:38;:62::i;:::-;19681:23;19707:29;19726:9;19707:18;:29::i;:::-;19681:55;-1:-1:-1;19760:19:0;;19757:171;;19802:11;;19795:60;;-1:-1:-1;;;;;19802:11:0;19828:9;19839:15;19795:32;:60::i;:::-;19884:11;;;;:32;;19900:15;19884;:32::i;:::-;19870:11;;;:46;19757:171;19990:15;;;;19971:17;;;;19953:53;;-1:-1:-1;;;;;19971:17:0;;;;19953:53;;;;;19971:17;;19953:53;20039:11;;20022:46;;20052:15;;-1:-1:-1;;;;;20039:11:0;;;;20022:46;;;;;;20039:11;;20022:46;18560:1516;;;;;:::o;12020:79::-;12085:6;;-1:-1:-1;;;;;12085:6:0;12020:79;:::o;14059:694::-;12157:12;:10;:12::i;:::-;12147:6;;-1:-1:-1;;;;;12147:6:0;;;:22;;;12139:58;;;;-1:-1:-1;;;12139:58:0;;;;;;;:::i;:::-;14248:11:::1;:18:::0;14280:14;14277:114:::1;;-1:-1:-1::0;14322:1:0::1;14277:114;;;14366:13;:9:::0;14378:1:::1;14366:13;:::i;:::-;14354:25;;14277:114;14411:22;14436:17:::0;;;::::1;::::0;;;;;;14464:31;;;14506:16:::1;::::0;;::::1;:37:::0;;;;14554:17:::1;::::0;::::1;:28:::0;;;;14593:17:::1;::::0;::::1;:28:::0;;;;14632:19:::1;::::0;::::1;:27:::0;;;;14670:19:::1;::::0;;::::1;:27:::0;;;;14718:11:::1;:27:::0;;;;::::1;::::0;;;;;::::1;::::0;14059:694::o;23684:1093::-;-1:-1:-1;;;;;23798:24:0;;;23753:7;23798:24;;;:10;:24;;;;;;;;23865:17;;;;;23858:25;;;;;;;;23935:17;;;;;;;23921:32;;;;;;;;24003:15;;;;23753:7;;23798:24;23753:7;;24003:20;:55;;;;-1:-1:-1;24027:17:0;;;;-1:-1:-1;;;;;24027:17:0;:31;24003:55;24000:745;;;-1:-1:-1;24084:1:0;24000:745;;;24204:11;;;;24132:15;;24116:13;;24196:19;;24193:173;;;24262:13;;;;24246:11;;;;:30;;:15;:30::i;:::-;24235:41;;24193:173;;;24336:13;;;;24326:24;;:5;;:9;:24::i;:::-;24315:35;;24193:173;24390:15;;;;:29;;24410:8;24390:19;:29::i;:::-;24458:15;;;;24380:39;;-1:-1:-1;24498:26:0;24380:39;24458:15;24498:11;:26::i;:::-;24488:36;;24549:30;24561:3;:17;;;24549:7;:11;;:30;;;;:::i;:::-;24539:40;;24604:33;24620:3;:16;;;24616:2;:20;;;;:::i;24604:33::-;24594:43;;24662:30;24674:3;:17;;;24662:7;:11;;:30;;;;:::i;:::-;24652:40;-1:-1:-1;24717:16:0;24652:40;24729:3;24717:11;:16::i;14765:485::-;12157:12;:10;:12::i;:::-;12147:6;;-1:-1:-1;;;;;12147:6:0;;;:22;;;12139:58;;;;-1:-1:-1;;;12139:58:0;;;;;;;:::i;:::-;14955:22:::1;14980:18:::0;;;::::1;::::0;;;;;;;15009:31;;;15051:16:::1;::::0;::::1;:37:::0;;;;15099:17:::1;::::0;::::1;:28:::0;;;;15138:17:::1;::::0;::::1;:28:::0;15177:19:::1;::::0;::::1;:27:::0;15215:19:::1;;:27:::0;14765:485::o;15581:764::-;15629:17;15649:12;:10;:12::i;:::-;-1:-1:-1;;;;;15698:21:0;;;15672:23;15698:21;;;:10;:21;;;;;;15764:11;;15757:44;;-1:-1:-1;;;15757:44:0;;15629:32;;-1:-1:-1;15698:21:0;15672:23;;15764:11;;15757:29;;:44;;15795:4;;15757:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15730:71;;15812:17;15832:29;15851:9;15832:18;:29::i;:::-;15812:49;-1:-1:-1;15888:15:0;15932:29;;;;15924:96;;;;-1:-1:-1;;;15924:96:0;;;;;;;:::i;:::-;16055:15;16039:3;:13;;;:31;16031:80;;;;-1:-1:-1;;;16031:80:0;;;;;;;:::i;:::-;16146:11;;;;:26;;16162:9;16146:15;:26::i;:::-;16132:11;;;:40;16199:17;:5;16209:6;16199:9;:17::i;:::-;16183:13;;;;:33;;;;16234:11;16227:54;;-1:-1:-1;;;;;16234:11:0;16260:9;16271;16227:32;:54::i;:::-;16314:11;;16297:40;;16327:9;;-1:-1:-1;;;;;16314:11:0;;;;16297:40;;;;;;16314:11;;16297:40;15581:764;;;;;:::o;20211:361::-;20275:7;20284:13;20299:7;20308;20317:4;20333:24;20360:13;:25;20374:10;-1:-1:-1;;;;;20360:25:0;-1:-1:-1;;;;;20360:25:0;;;;;;;;;;;;20333:52;;20417:3;:15;;;20447:3;:15;;20477:3;:15;;;20507:3;:15;;;20537:3;:16;;;20396:168;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20211:361;;;;;;;:::o;21169:96::-;21214:13;21246:11;21239:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21169:96;:::o;25891:787::-;26004:7;26048:18;;;;;;;;;;;-1:-1:-1;;;;;26104:28:0;;;;:13;:28;;;;;26231:14;;26173:15;;26004:7;;26217:29;;26173:15;;26217:13;:29::i;:::-;26199:47;-1:-1:-1;26257:16:0;26276:22;26199:47;26288:9;26276:11;:22::i;:::-;26257:41;-1:-1:-1;26309:15:0;26327:28;:14;26257:41;26327:18;:28::i;:::-;26390:15;;;;26309:46;;-1:-1:-1;26426:26:0;26309:46;26390:15;26426:11;:26::i;:::-;26416:36;;26473:30;26485:3;:17;;;26473:7;:11;;:30;;;;:::i;:::-;26463:40;;26524:33;26540:3;:16;;;26536:2;:20;;;;:::i;26524:33::-;26514:43;;26578:30;26590:3;:17;;;26578:7;:11;;:30;;;;:::i;:::-;26568:40;-1:-1:-1;26629:16:0;26568:40;26641:3;26629:11;:16::i;:::-;26619:26;-1:-1:-1;;;;;;;;25891:787:0;;;;;;:::o;12385:235::-;12157:12;:10;:12::i;:::-;12147:6;;-1:-1:-1;;;;;12147:6:0;;;:22;;;12139:58;;;;-1:-1:-1;;;12139:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12474:22:0;::::1;12466:64;;;;-1:-1:-1::0;;;12466:64:0::1;;;;;;;:::i;:::-;12567:6;::::0;12546:38:::1;::::0;-1:-1:-1;;;;;12546:38:0;;::::1;::::0;12567:6:::1;::::0;12546:38:::1;::::0;12567:6:::1;::::0;12546:38:::1;12595:6;:17:::0;;-1:-1:-1;;;;;;12595:17:0::1;-1:-1:-1::0;;;;;12595:17:0;;;::::1;::::0;;;::::1;::::0;;12385:235::o;13371:676::-;12157:12;:10;:12::i;:::-;12147:6;;-1:-1:-1;;;;;12147:6:0;;;:22;;;12139:58;;;;-1:-1:-1;;;12139:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13552:24:0;::::1;::::0;13549:227:::1;;13600:23;:10;-1:-1:-1::0;;;;;13600:21:0::1;;:23::i;:::-;:31;;13627:4;13600:31;13592:76;;;;-1:-1:-1::0;;;13592:76:0::1;;;;;;;:::i;:::-;13698:10;-1:-1:-1::0;;;;;13691:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13683:81;;;;-1:-1:-1::0;;;13683:81:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13823:25:0;::::1;13796:24;13823:25:::0;;;:13:::1;:25;::::0;;;;;;;13859:15;;::::1;:29:::0;;;13899:30;;13823:25;;13899:30:::1;::::0;13823:25;;13899:30;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13940:15:0::1;::::0;::::1;:25:::0;;;;-1:-1:-1;13976:15:0::1;::::0;::::1;:25:::0;;;;14012:16:::1;::::0;;::::1;:27:::0;-1:-1:-1;;13371:676:0:o;15262:307::-;12157:12;:10;:12::i;:::-;12147:6;;-1:-1:-1;;;;;12147:6:0;;;:22;;;12139:58;;;;-1:-1:-1;;;12139:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15341:20:0;::::1;15338:181;;15385:6;::::0;-1:-1:-1;;;;;15402:18:0;;::::1;15385:6;15402:18:::0;;;:10:::1;:18;::::0;;;;;;15377:44;;15385:6;;;::::1;::::0;15377:44;::::1;;;::::0;15402:18;;15377:44;15385:6;15377:44;15402:18;15385:6;15377:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15338:181;;;15480:6;::::0;-1:-1:-1;;;;;15488:18:0;;::::1;15480:6;15488:18:::0;;;:10:::1;:18;::::0;;;;;15452:55:::1;::::0;15488:18;;15480:6;;::::1;::::0;15452:27:::1;:55::i;:::-;-1:-1:-1::0;;;;;15539:18:0::1;15560:1;15539:18:::0;;;:10:::1;:18;::::0;;;;:22;15262:307::o;473:422::-;840:20;879:8;;;473:422::o;104:98::-;184:10;104:98;:::o;5473:179::-;5531:7;;5563:5;5567:1;5563;:5;:::i;:::-;5551:17;;5592:1;5587;:6;;5579:46;;;;-1:-1:-1;;;5579:46:0;;;;;;;:::i;:::-;5643:1;-1:-1:-1;5473:179:0;;;;;:::o;7872:204::-;7973:95;7992:5;8022:27;;;8051:4;8057:2;8061:5;7999:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7999:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;7999:68:0;-1:-1:-1;;;;;;7999:68:0;;;;;;;;;;7973:18;:95::i;:::-;7872:204;;;;:::o;5834:220::-;5892:7;5916:6;5912:20;;-1:-1:-1;5931:1:0;5924:8;;5912:20;5943:9;5955:5;5959:1;5955;:5;:::i;:::-;5943:17;-1:-1:-1;5988:1:0;5979:5;5983:1;5943:17;5979:5;:::i;:::-;:10;5971:56;;;;-1:-1:-1;;;5971:56:0;;;;;;;:::i;6066:153::-;6124:7;6156:1;6152;:5;6144:44;;;;-1:-1:-1;;;6144:44:0;;;;;;;:::i;:::-;6206:5;6210:1;6206;:5;:::i;5664:158::-;5722:7;5755:1;5750;:6;;5742:49;;;;-1:-1:-1;;;5742:49:0;;;;;;;:::i;:::-;5809:5;5813:1;5809;:5;:::i;7688:176::-;7771:85;7790:5;7820:23;;;7845:2;7849:5;7797:58;;;;;;;;;:::i;7771:85::-;7688:176;;;:::o;9070:451::-;9158:27;9166:5;-1:-1:-1;;;;;9158:25:0;;:27::i;:::-;9150:71;;;;-1:-1:-1;;;9150:71:0;;;;;;;:::i;:::-;9233:12;9247:23;9282:5;-1:-1:-1;;;;;9274:19:0;9294:4;9274:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9232:67;;;;9318:7;9310:52;;;;-1:-1:-1;;;9310:52:0;;;;;;;:::i;:::-;9379:17;;:21;9375:139;;9436:10;9425:30;;;;;;;;;;;;:::i;:::-;9417:85;;;;-1:-1:-1;;;9417:85:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:175:1;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;397:334::-;;;;543:2;531:9;522:7;518:23;514:32;511:2;;;564:6;556;549:22;511:2;592:31;613:9;592:31;:::i;:::-;582:41;670:2;655:18;;642:32;;-1:-1:-1;721:2:1;706:18;;;693:32;;501:230;-1:-1:-1;;;501:230:1:o;736:1309::-;;;;;;;943:3;931:9;922:7;918:23;914:33;911:2;;;965:6;957;950:22;911:2;993:31;1014:9;993:31;:::i;:::-;983:41;;1043:2;1092;1081:9;1077:18;1064:32;1054:42;;1143:2;1132:9;1128:18;1115:32;1105:42;;1194:2;1183:9;1179:18;1166:32;1156:42;;1245:3;1234:9;1230:19;1217:33;1207:43;;1301:3;1290:9;1286:19;1273:33;1325:18;1366:2;1358:6;1355:14;1352:2;;;1387:6;1379;1372:22;1352:2;1430:6;1419:9;1415:22;1405:32;;1475:7;1468:4;1464:2;1460:13;1456:27;1446:2;;1502:6;1494;1487:22;1446:2;1543;1530:16;1565:2;1561;1558:10;1555:2;;;1571:18;;:::i;:::-;1620:2;1614:9;1689:2;1670:13;;-1:-1:-1;;1666:27:1;1654:40;;1650:49;;1714:18;;;1734:22;;;1711:46;1708:2;;;1760:18;;:::i;:::-;1796:2;1789:22;1820:18;;;1857:11;;;1853:20;;1850:33;-1:-1:-1;1847:2:1;;;1901:6;1893;1886:22;1847:2;1962;1957;1953;1949:11;1944:2;1936:6;1932:15;1919:46;2007:6;2002:2;1997;1989:6;1985:15;1981:24;1974:40;2033:6;2023:16;;;;;;;901:1144;;;;;;;;:::o;2050:297::-;;2170:2;2158:9;2149:7;2145:23;2141:32;2138:2;;;2191:6;2183;2176:22;2138:2;2228:9;2222:16;2281:5;2274:13;2267:21;2260:5;2257:32;2247:2;;2308:6;2300;2293:22;2352:190;;2464:2;2452:9;2443:7;2439:23;2435:32;2432:2;;;2485:6;2477;2470:22;2432:2;-1:-1:-1;2513:23:1;;2422:120;-1:-1:-1;2422:120:1:o;2547:194::-;;2670:2;2658:9;2649:7;2645:23;2641:32;2638:2;;;2691:6;2683;2676:22;2638:2;-1:-1:-1;2719:16:1;;2628:113;-1:-1:-1;2628:113:1:o;2746:533::-;;;;;;;2943:3;2931:9;2922:7;2918:23;2914:33;2911:2;;;2965:6;2957;2950:22;2911:2;-1:-1:-1;;2993:23:1;;;3063:2;3048:18;;3035:32;;-1:-1:-1;3114:2:1;3099:18;;3086:32;;3165:2;3150:18;;3137:32;;-1:-1:-1;3216:3:1;3201:19;;3188:33;;-1:-1:-1;3268:3:1;3253:19;3240:33;;-1:-1:-1;2901:378:1;-1:-1:-1;2901:378:1:o;3284:602::-;;;;;;;;3498:3;3486:9;3477:7;3473:23;3469:33;3466:2;;;3520:6;3512;3505:22;3466:2;-1:-1:-1;;3548:23:1;;;3618:2;3603:18;;3590:32;;-1:-1:-1;3669:2:1;3654:18;;3641:32;;3720:2;3705:18;;3692:32;;-1:-1:-1;3771:3:1;3756:19;;3743:33;;-1:-1:-1;3823:3:1;3808:19;;3795:33;;-1:-1:-1;3875:3:1;3860:19;3847:33;;-1:-1:-1;3456:430:1;-1:-1:-1;3456:430:1:o;3891:260::-;;3973:5;3967:12;4000:6;3995:3;3988:19;4016:63;4072:6;4065:4;4060:3;4056:14;4049:4;4042:5;4038:16;4016:63;:::i;:::-;4133:2;4112:15;-1:-1:-1;;4108:29:1;4099:39;;;;4140:4;4095:50;;3943:208;-1:-1:-1;;3943:208:1:o;4156:274::-;;4323:6;4317:13;4339:53;4385:6;4380:3;4373:4;4365:6;4361:17;4339:53;:::i;:::-;4408:16;;;;;4293:137;-1:-1:-1;;4293:137:1:o;4435:203::-;-1:-1:-1;;;;;4599:32:1;;;;4581:51;;4569:2;4554:18;;4536:102::o;4643:304::-;-1:-1:-1;;;;;4873:15:1;;;4855:34;;4925:15;;4920:2;4905:18;;4898:43;4805:2;4790:18;;4772:175::o;4952:375::-;-1:-1:-1;;;;;5210:15:1;;;5192:34;;5262:15;;;;5257:2;5242:18;;5235:43;5309:2;5294:18;;5287:34;;;;5142:2;5127:18;;5109:218::o;5332:274::-;-1:-1:-1;;;;;5524:32:1;;;;5506:51;;5588:2;5573:18;;5566:34;5494:2;5479:18;;5461:145::o;5611:661::-;5782:2;5834:21;;;5904:13;;5807:18;;;5926:22;;;5611:661;;5782:2;6005:15;;;;5979:2;5964:18;;;5611:661;6051:195;6065:6;6062:1;6059:13;6051:195;;;6130:13;;-1:-1:-1;;;;;6126:39:1;6114:52;;6221:15;;;;6186:12;;;;6162:1;6080:9;6051:195;;;-1:-1:-1;6263:3:1;;5762:510;-1:-1:-1;;;;;;5762:510:1:o;6277:635::-;6448:2;6500:21;;;6570:13;;6473:18;;;6592:22;;;6277:635;;6448:2;6671:15;;;;6645:2;6630:18;;;6277:635;6717:169;6731:6;6728:1;6725:13;6717:169;;;6792:13;;6780:26;;6861:15;;;;6826:12;;;;6753:1;6746:9;6717:169;;6917:925;7341:14;;7334:22;7316:41;;7388:2;7373:18;;7366:34;;;-1:-1:-1;;;;;7436:32:1;;7431:2;7416:18;;7409:60;7304:3;7500:2;7485:18;;7478:30;;;6917:925;;7525:47;7553:18;;;7545:6;7525:47;:::i;:::-;7603:3;7588:19;;7581:35;;;;-1:-1:-1;;7647:3:1;7632:19;;7625:35;;;;7691:3;7676:19;;7669:35;;;;7735:3;7720:19;;7713:35;;;;7779:3;7764:19;;7757:35;7823:3;7808:19;;;7801:35;7517:55;7284:558;-1:-1:-1;;;;7284:558:1:o;7847:347::-;8049:2;8031:21;;;8088:2;8068:18;;;8061:30;8127:25;8122:2;8107:18;;8100:53;8185:2;8170:18;;8021:173::o;8199:410::-;8401:2;8383:21;;;8440:2;8420:18;;;8413:30;8479:34;8474:2;8459:18;;8452:62;-1:-1:-1;;;8545:2:1;8530:18;;8523:44;8599:3;8584:19;;8373:236::o;8614:351::-;8816:2;8798:21;;;8855:2;8835:18;;;8828:30;8894:29;8889:2;8874:18;;8867:57;8956:2;8941:18;;8788:177::o;8970:356::-;9172:2;9154:21;;;9191:18;;;9184:30;9250:34;9245:2;9230:18;;9223:62;9317:2;9302:18;;9144:182::o;9331:354::-;9533:2;9515:21;;;9572:2;9552:18;;;9545:30;9611:32;9606:2;9591:18;;9584:60;9676:2;9661:18;;9505:180::o;9690:473::-;9892:2;9874:21;;;9931:2;9911:18;;;9904:30;9970:34;9965:2;9950:18;;9943:62;10041:34;10036:2;10021:18;;10014:62;-1:-1:-1;;;10107:3:1;10092:19;;10085:36;10153:3;10138:19;;9864:299::o;10168:418::-;10370:2;10352:21;;;10409:2;10389:18;;;10382:30;10448:34;10443:2;10428:18;;10421:62;-1:-1:-1;;;10514:2:1;10499:18;;10492:52;10576:3;10561:19;;10342:244::o;10591:350::-;10793:2;10775:21;;;10832:2;10812:18;;;10805:30;10871:28;10866:2;10851:18;;10844:56;10932:2;10917:18;;10765:176::o;10946:343::-;11148:2;11130:21;;;11187:2;11167:18;;;11160:30;-1:-1:-1;;;11221:2:1;11206:18;;11199:49;11280:2;11265:18;;11120:169::o;11294:354::-;11496:2;11478:21;;;11535:2;11515:18;;;11508:30;11574:32;11569:2;11554:18;;11547:60;11639:2;11624:18;;11468:180::o;11653:355::-;11855:2;11837:21;;;11894:2;11874:18;;;11867:30;11933:33;11928:2;11913:18;;11906:61;11999:2;11984:18;;11827:181::o;12013:397::-;12215:2;12197:21;;;12254:2;12234:18;;;12227:30;12293:34;12288:2;12273:18;;12266:62;-1:-1:-1;;;12359:2:1;12344:18;;12337:31;12400:3;12385:19;;12187:223::o;12415:353::-;12617:2;12599:21;;;12656:2;12636:18;;;12629:30;12695:31;12690:2;12675:18;;12668:59;12759:2;12744:18;;12589:179::o;12773:397::-;12975:2;12957:21;;;13014:2;12994:18;;;12987:30;13053:34;13048:2;13033:18;;13026:62;-1:-1:-1;;;13119:2:1;13104:18;;13097:31;13160:3;13145:19;;12947:223::o;13175:356::-;13377:2;13359:21;;;13396:18;;;13389:30;13455:34;13450:2;13435:18;;13428:62;13522:2;13507:18;;13349:182::o;13536:406::-;13738:2;13720:21;;;13777:2;13757:18;;;13750:30;13816:34;13811:2;13796:18;;13789:62;-1:-1:-1;;;13882:2:1;13867:18;;13860:40;13932:3;13917:19;;13710:232::o;13947:400::-;14149:2;14131:21;;;14188:2;14168:18;;;14161:30;14227:34;14222:2;14207:18;;14200:62;-1:-1:-1;;;14293:2:1;14278:18;;14271:34;14337:3;14322:19;;14121:226::o;14352:355::-;14554:2;14536:21;;;14593:2;14573:18;;;14566:30;14632:33;14627:2;14612:18;;14605:61;14698:2;14683:18;;14526:181::o;14712:177::-;14858:25;;;14846:2;14831:18;;14813:76::o;14894:509::-;;15155:6;15144:9;15137:25;15198:3;15193:2;15182:9;15178:18;15171:31;15219:48;15262:3;15251:9;15247:19;15239:6;15219:48;:::i;:::-;15298:2;15283:18;;15276:34;;;;-1:-1:-1;15341:2:1;15326:18;;15319:34;;;;15384:3;15369:19;;;15362:35;15211:56;15127:276;-1:-1:-1;;15127:276:1:o;15408:535::-;15695:25;;;15751:2;15736:18;;15729:34;;;;15794:2;15779:18;;15772:34;;;;15837:2;15822:18;;15815:34;15880:3;15865:19;;15858:35;15924:3;15909:19;;15902:35;15682:3;15667:19;;15649:294::o;15948:128::-;;16019:1;16015:6;16012:1;16009:13;16006:2;;;16025:18;;:::i;:::-;-1:-1:-1;16061:9:1;;15996:80::o;16081:217::-;;16147:1;16137:2;;-1:-1:-1;;;16172:31:1;;16226:4;16223:1;16216:15;16254:4;16179:1;16244:15;16137:2;-1:-1:-1;16283:9:1;;16127:171::o;16303:453::-;16399:6;16422:5;16436:314;16485:1;16522:2;16512:8;16509:16;16499:2;;16529:5;;;16499:2;16570:4;16565:3;16561:14;16555:4;16552:24;16549:2;;;16579:18;;:::i;:::-;16629:2;16619:8;16615:17;16612:2;;;16644:16;;;;16612:2;16723:17;;;;;16683:15;;16436:314;;;16380:376;;;;;;;:::o;16761:139::-;;16850:44;-1:-1:-1;;16877:8:1;16871:4;16905:922;16989:8;16979:2;;-1:-1:-1;17030:1:1;17044:5;;16979:2;17078:4;17068:2;;-1:-1:-1;17115:1:1;17129:5;;17068:2;17160:4;17178:1;17173:59;;;;17246:1;17241:183;;;;17153:271;;17173:59;17203:1;17194:10;;17217:5;;;17241:183;17278:3;17268:8;17265:17;17262:2;;;17285:18;;:::i;:::-;17341:1;17331:8;17327:16;17318:25;;17369:3;17362:5;17359:14;17356:2;;;17376:18;;:::i;:::-;17409:5;;;17153:271;;17508:2;17498:8;17495:16;17489:3;17483:4;17480:13;17476:36;17470:2;17460:8;17457:16;17452:2;17446:4;17443:12;17439:35;17436:77;17433:2;;;-1:-1:-1;17545:19:1;;;17580:14;;;17577:2;;;17597:18;;:::i;:::-;17630:5;;17433:2;17677:42;17715:3;17705:8;17699:4;17696:1;17677:42;:::i;:::-;17752:6;17747:3;17743:16;17734:7;17731:29;17728:2;;;17763:18;;:::i;:::-;17801:20;;16969:858;-1:-1:-1;;;;16969:858:1:o;17832:168::-;;17938:1;17934;17930:6;17926:14;17923:1;17920:21;17915:1;17908:9;17901:17;17897:45;17894:2;;;17945:18;;:::i;:::-;-1:-1:-1;17985:9:1;;17884:116::o;18005:125::-;;18073:1;18070;18067:8;18064:2;;;18078:18;;:::i;:::-;-1:-1:-1;18115:9:1;;18054:76::o;18135:258::-;18207:1;18217:113;18231:6;18228:1;18225:13;18217:113;;;18307:11;;;18301:18;18288:11;;;18281:39;18253:2;18246:10;18217:113;;;18348:6;18345:1;18342:13;18339:2;;;-1:-1:-1;;18383:1:1;18365:16;;18358:27;18188:205::o;18398:380::-;18483:1;18473:12;;18530:1;18520:12;;;18541:2;;18595:4;18587:6;18583:17;18573:27;;18541:2;18648;18640:6;18637:14;18617:18;18614:38;18611:2;;;18694:10;18689:3;18685:20;18682:1;18675:31;18729:4;18726:1;18719:15;18757:4;18754:1;18747:15;18611:2;;18453:325;;;:::o;18783:135::-;;-1:-1:-1;;18843:17:1;;18840:2;;;18863:18;;:::i;:::-;-1:-1:-1;18910:1:1;18899:13;;18830:88::o;18923:127::-;18984:10;18979:3;18975:20;18972:1;18965:31;19015:4;19012:1;19005:15;19039:4;19036:1;19029:15;19055:127;19116:10;19111:3;19107:20;19104:1;19097:31;19147:4;19144:1;19137:15;19171:4;19168:1;19161:15

Swarm Source

ipfs://c582c031845b8ecf41c54b6d5346aab421f413b1101201f0e832c5fb1e400308

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.