APE Price: $0.99 (+3.77%)

Contract

0x277CFB3393CA3d60B6E5732B8490861c38EDc469

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo0.299999999561322525 APE

APE Value

$0.30 (@ $0.99/APE)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Rewards73915882024-12-31 16:55:4230 days ago1735664142IN
0x277CFB33...c38EDc469
0 APE0.0033895625.42069
Claim Rewards73915242024-12-31 16:53:1630 days ago1735663996IN
0x277CFB33...c38EDc469
0 APE0.0033895625.42069
Stake73914302024-12-31 16:49:3130 days ago1735663771IN
0x277CFB33...c38EDc469
0 APE0.0024682425.42069
Unstake73914082024-12-31 16:48:5030 days ago1735663730IN
0x277CFB33...c38EDc469
0 APE0.0041916925.42069
Claim Rewards72372602024-12-27 2:18:3635 days ago1735265916IN
0x277CFB33...c38EDc469
0 APE0.0033895625.42069
Claim Rewards72369312024-12-27 1:59:5635 days ago1735264796IN
0x277CFB33...c38EDc469
0 APE0.0033895625.42069
Claim Rewards72364732024-12-27 1:38:2735 days ago1735263507IN
0x277CFB33...c38EDc469
0 APE0.0033895625.42069
Claim Rewards69265382024-12-20 17:22:4641 days ago1734715366IN
0x277CFB33...c38EDc469
0 APE0.0033895625.42069
Claim Rewards69259602024-12-20 17:04:2241 days ago1734714262IN
0x277CFB33...c38EDc469
0 APE0.0033895625.42069
Transfer69251102024-12-20 16:49:3941 days ago1734713379IN
0x277CFB33...c38EDc469
0.3 APE0.0005355825.42069
Stake69248712024-12-20 16:45:0941 days ago1734713109IN
0x277CFB33...c38EDc469
0 APE0.0033376325.42069

Latest 8 internal transactions

Parent Transaction Hash Block From To
73915882024-12-31 16:55:4230 days ago1735664142
0x277CFB33...c38EDc469
0 APE
73915242024-12-31 16:53:1630 days ago1735663996
0x277CFB33...c38EDc469
0 APE
73914082024-12-31 16:48:5030 days ago1735663730
0x277CFB33...c38EDc469
0 APE
72372602024-12-27 2:18:3635 days ago1735265916
0x277CFB33...c38EDc469
0 APE
72369312024-12-27 1:59:5635 days ago1735264796
0x277CFB33...c38EDc469
0 APE
72364732024-12-27 1:38:2735 days ago1735263507
0x277CFB33...c38EDc469
0 APE
69265382024-12-20 17:22:4641 days ago1734715366
0x277CFB33...c38EDc469
0 APE
69259602024-12-20 17:04:2241 days ago1734714262
0x277CFB33...c38EDc469
0 APE

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LPStaking

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at apescan.io on 2024-12-20
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// IERC20 Interface
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);
}

// Ownable Contract
abstract contract Ownable {
    address private _owner;

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

    constructor() {
        _transferOwnership(msg.sender);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

    constructor() {
        _status = _NOT_ENTERED;
    }

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

// Pausable Contract
abstract contract Pausable {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor() {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

/**
 * @title LPStaking Contract
 * @notice This contract handles staking of LP tokens with dual rewards and anti-abuse features
 */
contract LPStaking is Ownable, ReentrancyGuard, Pausable {
    // ============ Events ============
    event Staked(address indexed user, uint256 amount);
    event Unstaked(address indexed user, uint256 amount);
    event RewardsClaimed(address indexed user, uint256 amount, uint256 secondaryAmount);
    event MinimumStakeAmountUpdated(uint256 oldAmount, uint256 newAmount);
    event LockPeriodUpdated(uint256 oldPeriod, uint256 newPeriod);
    event DynamicRewardRateUpdated(uint256 oldRate, uint256 newRate);
    event BonusMultiplierUpdated(uint256 oldMultiplier, uint256 newMultiplier);
    event BlacklistStatusUpdated(address indexed user, bool status);
    event EmergencyWithdraw(address indexed user, uint256 amount);
    event TimeTierUpdated(uint256 tierId, uint256 oldPeriod, uint256 newPeriod);
    event MaxRewardRateUpdated(uint256 oldRate, uint256 newRate);
    event MaxBonusMultiplierUpdated(uint256 oldMultiplier, uint256 newMultiplier);
    event TierThresholdUpdated(uint256 tierId, uint256 oldAmount, uint256 newAmount);

    // ============ Constants ============
    uint256 public MAX_REWARD_RATE = 10000; // 100%
    uint256 public MAX_BONUS_MULTIPLIER = 1000; // 10x
    uint256 public TIER1_THRESHOLD = 1000e18;    // 1,000 tokens
    uint256 public TIER2_THRESHOLD = 10000e18;   // 10,000 tokens
    uint256 public TIER3_THRESHOLD = 100000e18;  // 100,000 tokens
    uint256 public TIME_TIER1 = 7 days;    // 1 week
    uint256 public TIME_TIER2 = 14 days;   // 2 weeks
    uint256 public TIME_TIER3 = 30 days;   // 1 month

    // ============ Token Configuration ============
    IERC20 public dexLPToken;
    IERC20 public HACCoinReward;

    // ============ Reward Configuration ============
    uint256 public baseRewardRate; // Base reward rate
    uint256 public dynamicRewardRate; // Additional dynamic reward during high-traffic periods
    uint256 public bonusMultiplier; // Bonus multiplier for early or large contributions

    // ============ Staking Configuration ============
    uint256 public minimumStakeAmount;
    uint256 public lockPeriod;

    // ============ User Data ============
    mapping(address => uint256) public stakedAmount;
    mapping(address => uint256) public stakingStartTime;
    mapping(address => uint256) public lastClaimTime;
    mapping(address => bool) public blacklisted;

    // ============ Constructor ============
    constructor(
        address _dexLPTokenAddress,      // <-- dex LP token address
        address _HACCoinContractAddress,  // <-- HACCoin token address
        uint256 _baseRewardRate,
        uint256 _bonusMultiplier,
        uint256 _minimumStakeAmount,
        uint256 _lockPeriod
    ) {
        require(_dexLPTokenAddress != address(0), "Zero address not allowed");
        require(_HACCoinContractAddress != address(0), "Zero address not allowed");
        require(_baseRewardRate <= MAX_REWARD_RATE, "Rate too high");
        dexLPToken = IERC20(_dexLPTokenAddress);
        HACCoinReward = IERC20(_HACCoinContractAddress);
        baseRewardRate = _baseRewardRate;
        bonusMultiplier = _bonusMultiplier;
        minimumStakeAmount = _minimumStakeAmount;
        lockPeriod = _lockPeriod;
    }

    // ============ Modifiers ============
    modifier notBlacklisted() {
        require(!blacklisted[msg.sender], "Account is blacklisted");
        _;
    }

    // ============ Core Staking Functions ============
    function stake(uint256 amount) external nonReentrant whenNotPaused notBlacklisted {
        require(amount >= minimumStakeAmount, "Below minimum stake amount");
        require(amount > 0, "Cannot stake 0");

        // Transfer LP tokens to this contract
        dexLPToken.transferFrom(msg.sender, address(this), amount);

        // If they already have staked tokens, update their rewards checkpoint
        if (stakedAmount[msg.sender] > 0) {
            lastClaimTime[msg.sender] = block.timestamp;
        } else {
            // For first-time stakers, set initial claim time
            lastClaimTime[msg.sender] = block.timestamp;
        }

        // Update staking amount and time
        stakedAmount[msg.sender] += amount;
        stakingStartTime[msg.sender] = block.timestamp;

        emit Staked(msg.sender, amount);
    }

    function unstake(uint256 amount) external nonReentrant whenNotPaused notBlacklisted {
        require(block.timestamp >= stakingStartTime[msg.sender] + lockPeriod, "Still in lock period");
        require(stakedAmount[msg.sender] >= amount, "Insufficient staked balance");

        // Calculate and distribute pending rewards before unstaking
        uint256 pendingReward = calculateReward(msg.sender);
        if (pendingReward > 0) {
            distributeRewards(msg.sender, pendingReward);
            lastClaimTime[msg.sender] = block.timestamp;
        }

        // Update staking amount and transfer tokens back
        stakedAmount[msg.sender] -= amount;
        require(dexLPToken.transfer(msg.sender, amount), "Transfer failed");

        emit Unstaked(msg.sender, amount);
    }

    function claimRewards() external nonReentrant whenNotPaused notBlacklisted {
        uint256 pendingReward = calculateReward(msg.sender);
        require(pendingReward > 0, "No rewards to claim");
        
        // Update last claim time before distribution
        lastClaimTime[msg.sender] = block.timestamp;
        
        // Calculate and distribute rewards
        uint256 secondaryReward = pendingReward / 10;
        distributeRewards(msg.sender, pendingReward);
        
        emit RewardsClaimed(msg.sender, pendingReward, secondaryReward);
    }

    // ============ View Functions ============
    function calculateReward(address user) public view returns (uint256) {
        if (stakedAmount[user] == 0) return 0;
        
        uint256 duration = block.timestamp - lastClaimTime[user];
        uint256 dynamicRate = baseRewardRate + dynamicRewardRate;
        uint256 amountMultiplier = getAmountMultiplier(stakedAmount[user]);
        uint256 totalStakingDuration = block.timestamp - stakingStartTime[user];
        uint256 timeMultiplier = getTimeMultiplier(totalStakingDuration);
        
        uint256 reward = (stakedAmount[user] * dynamicRate * duration) / 1e18;
        reward = reward * amountMultiplier * timeMultiplier / 10000;
        reward = reward * bonusMultiplier / 100;
        
        return reward;
    }

    function getTotalStaked() external view returns (uint256) {
        return dexLPToken.balanceOf(address(this));
    }

    function getUserStakeInfo(address user) external view returns (
        uint256 staked,
        uint256 startTime,
        uint256 pendingRewards,
        bool isBlacklisted
    ) {
        return (
            stakedAmount[user],
            stakingStartTime[user],
            calculateReward(user),
            blacklisted[user]
        );
    }

    function getLPTokenAllowance(address user) external view returns (uint256) {
        return dexLPToken.allowance(user, address(this));
    }

    // ============ Internal Functions ============
    function distributeRewards(address user, uint256 rewardAmount) public {
        require(HACCoinReward.balanceOf(address(this)) >= rewardAmount, "Insufficient rewards");
        uint256 secondaryReward = rewardAmount / 10;
        require(address(this).balance >= secondaryReward, "Insufficient secondary rewards");
        
        require(HACCoinReward.transfer(user, rewardAmount), "Reward transfer failed");
        (bool success, ) = payable(user).call{value: secondaryReward}("");
        require(success, "Native token transfer failed");
    }

    // ============ Admin Functions ============
    // Pause/Unpause
    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }

    // Rate Management
    function setDynamicRewardRate(uint256 rate) external onlyOwner {
        require(rate <= MAX_REWARD_RATE, "Rate too high");
        uint256 oldRate = dynamicRewardRate;
        dynamicRewardRate = rate;
        emit DynamicRewardRateUpdated(oldRate, rate);
    }

    function setBonusMultiplier(uint256 multiplier) external onlyOwner {
        require(multiplier > 0 && multiplier <= MAX_BONUS_MULTIPLIER, "Invalid multiplier");
        uint256 oldMultiplier = bonusMultiplier;
        bonusMultiplier = multiplier;
        emit BonusMultiplierUpdated(oldMultiplier, multiplier);
    }

    // Configuration Management
    function setMinimumStakeAmount(uint256 amount) external onlyOwner {
        uint256 oldAmount = minimumStakeAmount;
        minimumStakeAmount = amount;
        emit MinimumStakeAmountUpdated(oldAmount, amount);
    }

    function setLockPeriod(uint256 period) external onlyOwner {
        uint256 oldPeriod = lockPeriod;
        lockPeriod = period;
        emit LockPeriodUpdated(oldPeriod, period);
    }

    // Access Control
    function setBlacklist(address user, bool status) external onlyOwner {
        require(user != address(0), "Invalid address");
        blacklisted[user] = status;
        emit BlacklistStatusUpdated(user, status);
    }

    function batchSetBlacklist(address[] calldata users, bool status) external onlyOwner {
        for(uint256 i = 0; i < users.length; i++) {
            require(users[i] != address(0), "Invalid address");
            blacklisted[users[i]] = status;
            emit BlacklistStatusUpdated(users[i], status);
        }
    }

    // ============ Emergency Functions ============
    function emergencyWithdraw() external nonReentrant {
        uint256 amount = stakedAmount[msg.sender];
        require(amount > 0, "No staked tokens");
        
        stakedAmount[msg.sender] = 0;
        stakingStartTime[msg.sender] = 0;
        dexLPToken.transfer(msg.sender, amount);
        
        emit EmergencyWithdraw(msg.sender, amount);
    }

    function emergencyRewardWithdraw() external onlyOwner {
        uint256 rewardBalance = HACCoinReward.balanceOf(address(this));
        uint256 nativeBalance = address(this).balance;
        
        if (rewardBalance > 0) {
            HACCoinReward.transfer(owner(), rewardBalance);
        }
        if (nativeBalance > 0) {
            (bool success, ) = payable(owner()).call{value: nativeBalance}("");
            require(success, "Native token transfer failed");
        }
    }

    function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner {
        require(tokenAddress != address(dexLPToken), "Cannot recover staking token");
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }

    function getRewardBalances() external view returns (uint256 newTokenBalance, uint256 nativeBalance) {
        return (
            HACCoinReward.balanceOf(address(this)),
            address(this).balance
        );
    }

    // ============ Helper Functions ============
    function getAmountMultiplier(uint256 amount) public view returns (uint256) {
        if (amount >= TIER3_THRESHOLD) {
            return 150;    // 1.5x multiplier
        } else if (amount >= TIER2_THRESHOLD) {
            return 125;    // 1.25x multiplier
        } else if (amount >= TIER1_THRESHOLD) {
            return 110;    // 1.1x multiplier
        }
        return 100;       // 1x multiplier (base)
    }

    function getTimeMultiplier(uint256 duration) public view returns (uint256) {
        if (duration >= TIME_TIER3) {
            return 150;    // 1.5x multiplier
        } else if (duration >= TIME_TIER2) {
            return 125;    // 1.25x multiplier
        } else if (duration >= TIME_TIER1) {
            return 110;    // 1.1x multiplier
        }
        return 100;       // 1x multiplier (base)
    }

    function getUserMultipliers(address user) external view returns (
        uint256 amountMultiplier,
        uint256 timeMultiplier,
        uint256 totalMultiplier
    ) {
        uint256 duration = block.timestamp - stakingStartTime[user];
        amountMultiplier = getAmountMultiplier(stakedAmount[user]);
        timeMultiplier = getTimeMultiplier(duration);
        totalMultiplier = (amountMultiplier * timeMultiplier * bonusMultiplier) / 1000; // Final multiplier in basis points
        return (amountMultiplier, timeMultiplier, totalMultiplier);
    }

    // ============ Time Tier Functions ============
    function setTimeTier1(uint256 newPeriod) external onlyOwner {
        require(newPeriod < TIME_TIER2, "TIME_TIER1 must be less than TIME_TIER2");
        require(newPeriod > 0, "Period cannot be zero");
        uint256 oldPeriod = TIME_TIER1;
        TIME_TIER1 = newPeriod;
        emit TimeTierUpdated(1, oldPeriod, newPeriod);
    }

    function setTimeTier2(uint256 newPeriod) external onlyOwner {
        require(newPeriod > TIME_TIER1, "TIME_TIER2 must be greater than TIME_TIER1");
        require(newPeriod < TIME_TIER3, "TIME_TIER2 must be less than TIME_TIER3");
        uint256 oldPeriod = TIME_TIER2;
        TIME_TIER2 = newPeriod;
        emit TimeTierUpdated(2, oldPeriod, newPeriod);
    }

    function setTimeTier3(uint256 newPeriod) external onlyOwner {
        require(newPeriod > TIME_TIER2, "TIME_TIER3 must be greater than TIME_TIER2");
        uint256 oldPeriod = TIME_TIER3;
        TIME_TIER3 = newPeriod;
        emit TimeTierUpdated(3, oldPeriod, newPeriod);
    }

    function getTimeTiers() external view returns (uint256, uint256, uint256) {
        return (TIME_TIER1, TIME_TIER2, TIME_TIER3);
    }

    // ============ Setter Functions ============
    function setMaxRewardRate(uint256 newRate) external onlyOwner {
        uint256 oldRate = MAX_REWARD_RATE;
        MAX_REWARD_RATE = newRate;
        emit MaxRewardRateUpdated(oldRate, newRate);
    }

    function setMaxBonusMultiplier(uint256 newMultiplier) external onlyOwner {
        uint256 oldMultiplier = MAX_BONUS_MULTIPLIER;
        MAX_BONUS_MULTIPLIER = newMultiplier;
        emit MaxBonusMultiplierUpdated(oldMultiplier, newMultiplier);
    }

    function setTierThreshold(uint256 tierId, uint256 newAmount) external onlyOwner {
        require(tierId >= 1 && tierId <= 3, "Invalid tier");
        uint256 oldAmount;
        
        if (tierId == 1) {
            oldAmount = TIER1_THRESHOLD;
            require(newAmount < TIER2_THRESHOLD, "Must be less than TIER2");
            TIER1_THRESHOLD = newAmount;
        } else if (tierId == 2) {
            oldAmount = TIER2_THRESHOLD;
            require(newAmount > TIER1_THRESHOLD && newAmount < TIER3_THRESHOLD, "Must be between TIER1 and TIER3");
            TIER2_THRESHOLD = newAmount;
        } else {
            oldAmount = TIER3_THRESHOLD;
            require(newAmount > TIER2_THRESHOLD, "Must be greater than TIER2");
            TIER3_THRESHOLD = newAmount;
        }
        
        emit TierThresholdUpdated(tierId, oldAmount, newAmount);
    }

    struct RewardBreakdown {
        uint256 accumulatedRewards;      // Total pending rewards
        uint256 rewardsPerDay;           // Current rate of HACCoin rewards per day
        uint256 secondaryRewards;        // Accumulated TOPIA rewards
        uint256 timeMultiplier;          // Current time multiplier (e.g., 110 = 1.1x)
        uint256 amountMultiplier;        // Current amount multiplier
        uint256 effectiveAPR;            // Effective APR based on current multipliers
        uint256 stakeDuration;           // How long they've been staking
        uint256 nextMultiplierThreshold; // Time until next multiplier tier
    }

    function getDetailedRewards(address user) external view returns (RewardBreakdown memory) {
        RewardBreakdown memory breakdown;
        
        if (stakedAmount[user] == 0) return breakdown;

        // Calculate base numbers
        uint256 totalStakingDuration = block.timestamp - stakingStartTime[user];
        uint256 dynamicRate = baseRewardRate + dynamicRewardRate;
        
        // Get multipliers
        breakdown.timeMultiplier = getTimeMultiplier(totalStakingDuration);
        breakdown.amountMultiplier = getAmountMultiplier(stakedAmount[user]);
        
        // Calculate accumulated rewards
        breakdown.accumulatedRewards = calculateReward(user);
        breakdown.secondaryRewards = breakdown.accumulatedRewards / 10; // TOPIA rewards
        
        // Calculate daily rate
        uint256 dailyBase = (stakedAmount[user] * dynamicRate * 86400) / 1e18; // 86400 seconds in a day
        breakdown.rewardsPerDay = dailyBase * breakdown.timeMultiplier * breakdown.amountMultiplier * bonusMultiplier / 1000000;
        
        // Calculate effective APR
        breakdown.effectiveAPR = (breakdown.rewardsPerDay * 365 * 100) / stakedAmount[user];
        
        // Staking duration info
        breakdown.stakeDuration = totalStakingDuration;
        
        // Calculate time until next multiplier
        if (totalStakingDuration < TIME_TIER1) {
            breakdown.nextMultiplierThreshold = TIME_TIER1 - totalStakingDuration;
        } else if (totalStakingDuration < TIME_TIER2) {
            breakdown.nextMultiplierThreshold = TIME_TIER2 - totalStakingDuration;
        } else if (totalStakingDuration < TIME_TIER3) {
            breakdown.nextMultiplierThreshold = TIME_TIER3 - totalStakingDuration;
        } else {
            breakdown.nextMultiplierThreshold = 0; // Max tier reached
        }
        return breakdown;
    }

    // Add receive() function to accept native tokens
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dexLPTokenAddress","type":"address"},{"internalType":"address","name":"_HACCoinContractAddress","type":"address"},{"internalType":"uint256","name":"_baseRewardRate","type":"uint256"},{"internalType":"uint256","name":"_bonusMultiplier","type":"uint256"},{"internalType":"uint256","name":"_minimumStakeAmount","type":"uint256"},{"internalType":"uint256","name":"_lockPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"BonusMultiplierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"DynamicRewardRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"LockPeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"MaxBonusMultiplierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"MaxRewardRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MinimumStakeAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondaryAmount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tierId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"TierThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tierId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"TimeTierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"HACCoinReward","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REWARD_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIER1_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIER2_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIER3_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_TIER1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_TIER2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_TIER3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"batchSetBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexLPToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"distributeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dynamicRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getAmountMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getDetailedRewards","outputs":[{"components":[{"internalType":"uint256","name":"accumulatedRewards","type":"uint256"},{"internalType":"uint256","name":"rewardsPerDay","type":"uint256"},{"internalType":"uint256","name":"secondaryRewards","type":"uint256"},{"internalType":"uint256","name":"timeMultiplier","type":"uint256"},{"internalType":"uint256","name":"amountMultiplier","type":"uint256"},{"internalType":"uint256","name":"effectiveAPR","type":"uint256"},{"internalType":"uint256","name":"stakeDuration","type":"uint256"},{"internalType":"uint256","name":"nextMultiplierThreshold","type":"uint256"}],"internalType":"struct LPStaking.RewardBreakdown","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getLPTokenAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardBalances","outputs":[{"internalType":"uint256","name":"newTokenBalance","type":"uint256"},{"internalType":"uint256","name":"nativeBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"getTimeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeTiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserMultipliers","outputs":[{"internalType":"uint256","name":"amountMultiplier","type":"uint256"},{"internalType":"uint256","name":"timeMultiplier","type":"uint256"},{"internalType":"uint256","name":"totalMultiplier","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStakeInfo","outputs":[{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setDynamicRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"period","type":"uint256"}],"name":"setLockPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setMaxBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setMaxRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinimumStakeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tierId","type":"uint256"},{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setTierThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setTimeTier1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setTimeTier2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setTimeTier3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526127106003556103e8600455683635c9adc5dea0000060055569021e19e0c9bab240000060065569152d02c7e14af680000060075562093a806008556212750060095562278d00600a553480156200005a575f80fd5b506040516200303f3803806200303f8339810160408190526200007d9162000241565b6200008833620001d6565b600180556002805460ff191690556001600160a01b038616620000f25760405162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f776564000000000000000060448201526064015b60405180910390fd5b6001600160a01b0385166200014a5760405162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f77656400000000000000006044820152606401620000e9565b6003548411156200018e5760405162461bcd60e51b815260206004820152600d60248201526c0a4c2e8ca40e8dede40d0d2ced609b1b6044820152606401620000e9565b600b80546001600160a01b039788166001600160a01b031991821617909155600c805496909716951694909417909455600d91909155600f556010919091556011556200029a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200023c575f80fd5b919050565b5f805f805f8060c0878903121562000257575f80fd5b620002628762000225565b9550620002726020880162000225565b945060408701519350606087015192506080870151915060a087015190509295509295509295565b612d9780620002a85f395ff3fe60806040526004361061032a575f3560e01c80638980f11f116101a3578063b82cd166116100f2578063db2e21bc11610092578063f2c628021161006d578063f2c628021461090b578063f2fde38b1461098a578063f9931855146109a9578063fd58e63a146109d4575f80fd5b8063db2e21bc146108b4578063dbac26e9146108c8578063ef794f8b146108f6575f80fd5b8063c32d3ae2116100cd578063c32d3ae214610815578063d123273014610856578063d437c6be14610881578063d82e396214610895575f80fd5b8063b82cd166146107bd578063b83e44bf146107dc578063bea1762c146107f6575f80fd5b8063a69871931161015d578063af9c53da11610138578063af9c53da1461073f578063afbf34401461075e578063b6d4efd014610773578063b77cf9c614610792575f80fd5b8063a6987193146106ec578063a8031a1d1461070b578063a8b973a11461072a575f80fd5b80638980f11f146106495780638da5cb5b14610668578063902fe1431461068457806391a35abe146106995780639568786c146106ae578063a694fc3a146106cd575f80fd5b8063642ce3551161027957806378bc861b116102195780637de84f2b116101f45780637de84f2b146105e25780638456cb5914610601578063845a266a146106155780638683e80314610634575f80fd5b806378bc861b146105855780637bfc5211146105ae5780637c356217146105c3575f80fd5b8063715018a611610254578063715018a61461051e578063718dc3c314610532578063779972da146105475780637835840514610566575f80fd5b8063642ce355146104d5578063665f2770146104ea5780636b036f4514610509575f80fd5b80632e17de78116102e45780633fd8b02f116102bf5780633fd8b02f1461044e57806342dfac721461046357806355f4993b146104785780635c975abb146104b2575f80fd5b80632e17de7814610407578063372500ab146104265780633f4ba83a1461043a575f80fd5b8063086d2c87146103355780630917e7761461035d5780630d29fcd4146103715780630f96fd7914610392578063153b0d1e146103b15780631572772a146103d0575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b5061034a60065481565b6040519081526020015b60405180910390f35b348015610368575f80fd5b5061034a6109f3565b34801561037c575f80fd5b5061039061038b366004612a72565b610a62565b005b34801561039d575f80fd5b506103906103ac366004612a89565b610ae9565b3480156103bc575f80fd5b506103906103cb366004612ad1565b610ceb565b3480156103db575f80fd5b50600b546103ef906001600160a01b031681565b6040516001600160a01b039091168152602001610354565b348015610412575f80fd5b50610390610421366004612a72565b610dc9565b348015610431575f80fd5b50610390611047565b348015610445575f80fd5b50610390611177565b348015610459575f80fd5b5061034a60115481565b34801561046e575f80fd5b5061034a60075481565b348015610483575f80fd5b50610497610492366004612b06565b6111b9565b60408051938452602084019290925290820152606001610354565b3480156104bd575f80fd5b5060025460ff165b6040519015158152602001610354565b3480156104e0575f80fd5b5061034a60055481565b3480156104f5575f80fd5b5061034a610504366004612a72565b611241565b348015610514575f80fd5b5061034a60105481565b348015610529575f80fd5b5061039061127d565b34801561053d575f80fd5b5061034a60035481565b348015610552575f80fd5b50610390610561366004612a72565b6112be565b348015610571575f80fd5b50610390610580366004612a72565b611334565b348015610590575f80fd5b5061059961145b565b60408051928352602083019190915201610354565b3480156105b9575f80fd5b5061034a600e5481565b3480156105ce575f80fd5b506103906105dd366004612a72565b6114d1565b3480156105ed575f80fd5b506103906105fc366004612a72565b611547565b34801561060c575f80fd5b5061039061162a565b348015610620575f80fd5b5061034a61062f366004612b06565b61166a565b34801561063f575f80fd5b5061034a60085481565b348015610654575f80fd5b50610390610663366004612b26565b6116e2565b348015610673575f80fd5b505f546001600160a01b03166103ef565b34801561068f575f80fd5b5061034a60095481565b3480156106a4575f80fd5b5061034a600a5481565b3480156106b9575f80fd5b5061034a6106c8366004612a72565b61180b565b3480156106d8575f80fd5b506103906106e7366004612a72565b61183f565b3480156106f7575f80fd5b50610390610706366004612a72565b611a7a565b348015610716575f80fd5b50610390610725366004612b26565b611aef565b348015610735575f80fd5b5061034a600f5481565b34801561074a575f80fd5b50610390610759366004612b4e565b611d5a565b348015610769575f80fd5b5061034a600d5481565b34801561077e575f80fd5b5061039061078d366004612a72565b611edb565b34801561079d575f80fd5b5061034a6107ac366004612b06565b60146020525f908152604090205481565b3480156107c8575f80fd5b50600c546103ef906001600160a01b031681565b3480156107e7575f80fd5b50600854600954600a54610497565b348015610801575f80fd5b50610390610810366004612a72565b611f93565b348015610820575f80fd5b5061083461082f366004612b06565b6120d7565b6040805194855260208501939093529183015215156060820152608001610354565b348015610861575f80fd5b5061034a610870366004612b06565b60136020525f908152604090205481565b34801561088c575f80fd5b50610390612136565b3480156108a0575f80fd5b5061034a6108af366004612b06565b61231d565b3480156108bf575f80fd5b50610390612461565b3480156108d3575f80fd5b506104c56108e2366004612b06565b60156020525f908152604090205460ff1681565b348015610901575f80fd5b5061034a60045481565b348015610916575f80fd5b5061092a610925366004612b06565b61259b565b60405161035491905f61010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b348015610995575f80fd5b506103906109a4366004612b06565b61278c565b3480156109b4575f80fd5b5061034a6109c3366004612b06565b60126020525f908152604090205481565b3480156109df575f80fd5b506103906109ee366004612a72565b612835565b600b546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5d9190612bcd565b905090565b33610a745f546001600160a01b031690565b6001600160a01b031614610aa35760405162461bcd60e51b8152600401610a9a90612be4565b60405180910390fd5b601080549082905560408051828152602081018490527fe3117c3cc31e2d5d67afc8b5c366cd87a436cd3aaf93a169500733f4ebfb96ad91015b60405180910390a15050565b33610afb5f546001600160a01b031690565b6001600160a01b031614610b215760405162461bcd60e51b8152600401610a9a90612be4565b60018210158015610b33575060038211155b610b6e5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b6044820152606401610a9a565b5f82600103610bd657506005546006548210610bcc5760405162461bcd60e51b815260206004820152601760248201527f4d757374206265206c657373207468616e2054494552320000000000000000006044820152606401610a9a565b6005829055610ca5565b82600203610c4a575060065460055482118015610bf4575060075482105b610c405760405162461bcd60e51b815260206004820152601f60248201527f4d757374206265206265747765656e20544945523120616e64205449455233006044820152606401610a9a565b6006829055610ca5565b506007546006548211610c9f5760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652067726561746572207468616e2054494552320000000000006044820152606401610a9a565b60078290555b60408051848152602081018390529081018390527f9f9a58d32a7e2024ded31922b3892bb40501685aba4e64426c7f7aa764e794f89060600160405180910390a1505050565b33610cfd5f546001600160a01b031690565b6001600160a01b031614610d235760405162461bcd60e51b8152600401610a9a90612be4565b6001600160a01b038216610d6b5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a9a565b6001600160a01b0382165f81815260156020908152604091829020805460ff191685151590811790915591519182527f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb6910160405180910390a25050565b600260015403610deb5760405162461bcd60e51b8152600401610a9a90612c19565b6002600155610dfc60025460ff1690565b15610e195760405162461bcd60e51b8152600401610a9a90612c50565b335f9081526015602052604090205460ff1615610e485760405162461bcd60e51b8152600401610a9a90612c7a565b601154335f90815260136020526040902054610e649190612cbe565b421015610eaa5760405162461bcd60e51b815260206004820152601460248201527314dd1a5b1b081a5b881b1bd8dac81c195c9a5bd960621b6044820152606401610a9a565b335f90815260126020526040902054811115610f085760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74207374616b65642062616c616e636500000000006044820152606401610a9a565b5f610f123361231d565b90508015610f3657610f243382611aef565b335f9081526014602052604090204290555b335f9081526012602052604081208054849290610f54908490612cd1565b9091555050600b5460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015610fa7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcb9190612ce4565b6110095760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610a9a565b60405182815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75906020015b60405180910390a2505060018055565b6002600154036110695760405162461bcd60e51b8152600401610a9a90612c19565b600260015561107a60025460ff1690565b156110975760405162461bcd60e51b8152600401610a9a90612c50565b335f9081526015602052604090205460ff16156110c65760405162461bcd60e51b8152600401610a9a90612c7a565b5f6110d03361231d565b90505f81116111175760405162461bcd60e51b81526020600482015260136024820152724e6f207265776172647320746f20636c61696d60681b6044820152606401610a9a565b335f908152601460205260408120429055611133600a83612cff565b905061113f3383611aef565b604080518381526020810183905233917fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3259101611037565b336111895f546001600160a01b031690565b6001600160a01b0316146111af5760405162461bcd60e51b8152600401610a9a90612be4565b6111b76128fd565b565b6001600160a01b0381165f908152601360205260408120548190819081906111e19042612cd1565b6001600160a01b0386165f9081526012602052604090205490915061120590611241565b93506112108161180b565b92506103e8600f5484866112249190612d1e565b61122e9190612d1e565b6112389190612cff565b93959294505050565b5f600754821061125357506096919050565b60065482106112645750607d919050565b60055482106112755750606e919050565b506064919050565b3361128f5f546001600160a01b031690565b6001600160a01b0316146112b55760405162461bcd60e51b8152600401610a9a90612be4565b6111b75f612986565b336112d05f546001600160a01b031690565b6001600160a01b0316146112f65760405162461bcd60e51b8152600401610a9a90612be4565b601180549082905560408051828152602081018490527f5dd7b309b7bc5010d9c96159ee535a428121d6803cb847792402fffccaf1569a9101610add565b336113465f546001600160a01b031690565b6001600160a01b03161461136c5760405162461bcd60e51b8152600401610a9a90612be4565b60095481106113cd5760405162461bcd60e51b815260206004820152602760248201527f54494d455f5449455231206d757374206265206c657373207468616e2054494d60448201526622afaa24a2a91960c91b6064820152608401610a9a565b5f81116114145760405162461bcd60e51b8152602060048201526015602482015274506572696f642063616e6e6f74206265207a65726f60581b6044820152606401610a9a565b60088054908290556040805160018152602081018390529081018390527ffe4ba9a86d6d2f0684b5cee72f870d46b6a0bc4644db9e335c21b1f122dcfc5590606001610add565b600c546040516370a0823160e01b81523060048201525f9182916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c99190612bcd565b924792509050565b336114e35f546001600160a01b031690565b6001600160a01b0316146115095760405162461bcd60e51b8152600401610a9a90612be4565b600480549082905560408051828152602081018490527fbbaf4b5558cdbccdab95b91283441d5a715fbed963dcd0dc58e6f1a3040e46b89101610add565b336115595f546001600160a01b031690565b6001600160a01b03161461157f5760405162461bcd60e51b8152600401610a9a90612be4565b60095481116115e35760405162461bcd60e51b815260206004820152602a60248201527f54494d455f5449455233206d7573742062652067726561746572207468616e206044820152692a24a6a2afaa24a2a91960b11b6064820152608401610a9a565b600a8054908290556040805160038152602081018390529081018390527ffe4ba9a86d6d2f0684b5cee72f870d46b6a0bc4644db9e335c21b1f122dcfc5590606001610add565b3361163c5f546001600160a01b031690565b6001600160a01b0316146116625760405162461bcd60e51b8152600401610a9a90612be4565b6111b76129d5565b600b54604051636eb1769f60e11b81526001600160a01b0383811660048301523060248301525f92169063dd62ed3e90604401602060405180830381865afa1580156116b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116dc9190612bcd565b92915050565b336116f45f546001600160a01b031690565b6001600160a01b03161461171a5760405162461bcd60e51b8152600401610a9a90612be4565b600b546001600160a01b03908116908316036117785760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207265636f766572207374616b696e6720746f6b656e000000006044820152606401610a9a565b816001600160a01b031663a9059cbb6117985f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af11580156117e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118069190612ce4565b505050565b5f600a54821061181d57506096919050565b600954821061182e5750607d919050565b60085482106112755750606e919050565b6002600154036118615760405162461bcd60e51b8152600401610a9a90612c19565b600260015561187260025460ff1690565b1561188f5760405162461bcd60e51b8152600401610a9a90612c50565b335f9081526015602052604090205460ff16156118be5760405162461bcd60e51b8152600401610a9a90612c7a565b6010548110156119105760405162461bcd60e51b815260206004820152601a60248201527f42656c6f77206d696e696d756d207374616b6520616d6f756e740000000000006044820152606401610a9a565b5f81116119505760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610a9a565b600b546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af11580156119a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c89190612ce4565b50335f90815260126020526040902054156119f357335f908152601460205260409020429055611a05565b335f9081526014602052604090204290555b335f9081526012602052604081208054839290611a23908490612cbe565b9091555050335f8181526013602052604090819020429055517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90611a6b9084815260200190565b60405180910390a25060018055565b33611a8c5f546001600160a01b031690565b6001600160a01b031614611ab25760405162461bcd60e51b8152600401610a9a90612be4565b600380549082905560408051828152602081018490527ee3c220c012f68ff9fde8453dcf56fd8b157916de1ebdc1b6800cf8063df5f39101610add565b600c546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611b35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b599190612bcd565b1015611b9e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207265776172647360601b6044820152606401610a9a565b5f611baa600a83612cff565b905080471015611bfc5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e74207365636f6e64617279207265776172647300006044820152606401610a9a565b600c5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303815f875af1158015611c4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c709190612ce4565b611cb55760405162461bcd60e51b815260206004820152601660248201527514995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401610a9a565b5f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611cfe576040519150601f19603f3d011682016040523d82523d5f602084013e611d03565b606091505b5050905080611d545760405162461bcd60e51b815260206004820152601c60248201527f4e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610a9a565b50505050565b33611d6c5f546001600160a01b031690565b6001600160a01b031614611d925760405162461bcd60e51b8152600401610a9a90612be4565b5f5b82811015611d54575f848483818110611daf57611daf612d35565b9050602002016020810190611dc49190612b06565b6001600160a01b031603611e0c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a9a565b8160155f868685818110611e2257611e22612d35565b9050602002016020810190611e379190612b06565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055838382818110611e7057611e70612d35565b9050602002016020810190611e859190612b06565b6001600160a01b03167f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb683604051611ec1911515815260200190565b60405180910390a280611ed381612d49565b915050611d94565b33611eed5f546001600160a01b031690565b6001600160a01b031614611f135760405162461bcd60e51b8152600401610a9a90612be4565b600354811115611f555760405162461bcd60e51b815260206004820152600d60248201526c0a4c2e8ca40e8dede40d0d2ced609b1b6044820152606401610a9a565b600e80549082905560408051828152602081018490527ff2f4736aeb3f199720710c084e757a576694b916ef62336bd137d9730d19226f9101610add565b33611fa55f546001600160a01b031690565b6001600160a01b031614611fcb5760405162461bcd60e51b8152600401610a9a90612be4565b600854811161202f5760405162461bcd60e51b815260206004820152602a60248201527f54494d455f5449455232206d7573742062652067726561746572207468616e2060448201526954494d455f544945523160b01b6064820152608401610a9a565b600a5481106120905760405162461bcd60e51b815260206004820152602760248201527f54494d455f5449455232206d757374206265206c657373207468616e2054494d604482015266455f544945523360c81b6064820152608401610a9a565b60098054908290556040805160028152602081018390529081018390527ffe4ba9a86d6d2f0684b5cee72f870d46b6a0bc4644db9e335c21b1f122dcfc5590606001610add565b6001600160a01b0381165f9081526012602090815260408083205460139092528220548291829182919061210a8761231d565b6001600160a01b0388165f90815260156020526040902054929650909450925060ff1690509193509193565b336121485f546001600160a01b031690565b6001600160a01b03161461216e5760405162461bcd60e51b8152600401610a9a90612be4565b600c546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156121b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d89190612bcd565b905047811561227357600c546001600160a01b031663a9059cbb6122035f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af115801561224d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122719190612ce4565b505b8015612319575f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146122c3576040519150601f19603f3d011682016040523d82523d5f602084013e6122c8565b606091505b50509050806118065760405162461bcd60e51b815260206004820152601c60248201527f4e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610a9a565b5050565b6001600160a01b0381165f90815260126020526040812054810361234257505f919050565b6001600160a01b0382165f908152601460205260408120546123649042612cd1565b90505f600e54600d546123779190612cbe565b6001600160a01b0385165f908152601260205260408120549192509061239c90611241565b6001600160a01b0386165f90815260136020526040812054919250906123c29042612cd1565b90505f6123ce8261180b565b6001600160a01b0388165f9081526012602052604081205491925090670de0b6b3a7640000908790612401908890612d1e565b61240b9190612d1e565b6124159190612cff565b9050612710826124258684612d1e565b61242f9190612d1e565b6124399190612cff565b90506064600f548261244b9190612d1e565b6124559190612cff565b98975050505050505050565b6002600154036124835760405162461bcd60e51b8152600401610a9a90612c19565b6002600155335f90815260126020526040902054806124d75760405162461bcd60e51b815260206004820152601060248201526f4e6f207374616b656420746f6b656e7360801b6044820152606401610a9a565b335f818152601260209081526040808320839055601390915280822091909155600b54905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015612544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125689190612ce4565b5060405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd969590602001611a6b565b6125a3612a35565b6125ab612a35565b6001600160a01b0383165f9081526012602052604081205490036125cf5792915050565b6001600160a01b0383165f908152601360205260408120546125f19042612cd1565b90505f600e54600d546126049190612cbe565b905061260f8261180b565b60608401526001600160a01b0385165f9081526012602052604090205461263590611241565b60808401526126438561231d565b80845261265290600a90612cff565b6040808501919091526001600160a01b0386165f908152601260205290812054670de0b6b3a764000090612687908490612d1e565b6126949062015180612d1e565b61269e9190612cff565b9050620f4240600f5485608001518660600151846126bc9190612d1e565b6126c69190612d1e565b6126d09190612d1e565b6126da9190612cff565b60208086019182526001600160a01b0388165f9081526012909152604090205490516127089061016d612d1e565b612713906064612d1e565b61271d9190612cff565b60a085015260c0840183905260085483101561274b57826008546127419190612cd1565b60e0850152612782565b60095483101561276357826009546127419190612cd1565b600a5483101561277b5782600a546127419190612cd1565b5f60e08501525b5091949350505050565b3361279e5f546001600160a01b031690565b6001600160a01b0316146127c45760405162461bcd60e51b8152600401610a9a90612be4565b6001600160a01b0381166128295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9a565b61283281612986565b50565b336128475f546001600160a01b031690565b6001600160a01b03161461286d5760405162461bcd60e51b8152600401610a9a90612be4565b5f8111801561287e57506004548111155b6128bf5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21036bab63a34b83634b2b960711b6044820152606401610a9a565b600f80549082905560408051828152602081018490527f9186bba392492a86d11772f6a96c676e03501c72017ff3a3c6fa302db18adcfd9101610add565b60025460ff166129465760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a9a565b6002805460ff191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff16156129f85760405162461bcd60e51b8152600401610a9a90612c50565b6002805460ff191660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161297c565b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215612a82575f80fd5b5035919050565b5f8060408385031215612a9a575f80fd5b50508035926020909101359150565b80356001600160a01b0381168114612abf575f80fd5b919050565b8015158114612832575f80fd5b5f8060408385031215612ae2575f80fd5b612aeb83612aa9565b91506020830135612afb81612ac4565b809150509250929050565b5f60208284031215612b16575f80fd5b612b1f82612aa9565b9392505050565b5f8060408385031215612b37575f80fd5b612b4083612aa9565b946020939093013593505050565b5f805f60408486031215612b60575f80fd5b833567ffffffffffffffff80821115612b77575f80fd5b818601915086601f830112612b8a575f80fd5b813581811115612b98575f80fd5b8760208260051b8501011115612bac575f80fd5b60209283019550935050840135612bc281612ac4565b809150509250925092565b5f60208284031215612bdd575f80fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601690820152751058d8dbdd5b9d081a5cc8189b1858dadb1a5cdd195960521b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116dc576116dc612caa565b818103818111156116dc576116dc612caa565b5f60208284031215612cf4575f80fd5b8151612b1f81612ac4565b5f82612d1957634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176116dc576116dc612caa565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612d5a57612d5a612caa565b506001019056fea2646970667358221220ba21a4829fce366c0bed96713925b97ce9755765c1bf0c6d0669141c6e4bae2f64736f6c63430008140033000000000000000000000000640b9ca29ae2caf5f07f416b5e8302805b8e07d7000000000000000000000000cbe687ed3af5e9493888119cd419f25668eafd54000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000093a80

Deployed Bytecode

0x60806040526004361061032a575f3560e01c80638980f11f116101a3578063b82cd166116100f2578063db2e21bc11610092578063f2c628021161006d578063f2c628021461090b578063f2fde38b1461098a578063f9931855146109a9578063fd58e63a146109d4575f80fd5b8063db2e21bc146108b4578063dbac26e9146108c8578063ef794f8b146108f6575f80fd5b8063c32d3ae2116100cd578063c32d3ae214610815578063d123273014610856578063d437c6be14610881578063d82e396214610895575f80fd5b8063b82cd166146107bd578063b83e44bf146107dc578063bea1762c146107f6575f80fd5b8063a69871931161015d578063af9c53da11610138578063af9c53da1461073f578063afbf34401461075e578063b6d4efd014610773578063b77cf9c614610792575f80fd5b8063a6987193146106ec578063a8031a1d1461070b578063a8b973a11461072a575f80fd5b80638980f11f146106495780638da5cb5b14610668578063902fe1431461068457806391a35abe146106995780639568786c146106ae578063a694fc3a146106cd575f80fd5b8063642ce3551161027957806378bc861b116102195780637de84f2b116101f45780637de84f2b146105e25780638456cb5914610601578063845a266a146106155780638683e80314610634575f80fd5b806378bc861b146105855780637bfc5211146105ae5780637c356217146105c3575f80fd5b8063715018a611610254578063715018a61461051e578063718dc3c314610532578063779972da146105475780637835840514610566575f80fd5b8063642ce355146104d5578063665f2770146104ea5780636b036f4514610509575f80fd5b80632e17de78116102e45780633fd8b02f116102bf5780633fd8b02f1461044e57806342dfac721461046357806355f4993b146104785780635c975abb146104b2575f80fd5b80632e17de7814610407578063372500ab146104265780633f4ba83a1461043a575f80fd5b8063086d2c87146103355780630917e7761461035d5780630d29fcd4146103715780630f96fd7914610392578063153b0d1e146103b15780631572772a146103d0575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b5061034a60065481565b6040519081526020015b60405180910390f35b348015610368575f80fd5b5061034a6109f3565b34801561037c575f80fd5b5061039061038b366004612a72565b610a62565b005b34801561039d575f80fd5b506103906103ac366004612a89565b610ae9565b3480156103bc575f80fd5b506103906103cb366004612ad1565b610ceb565b3480156103db575f80fd5b50600b546103ef906001600160a01b031681565b6040516001600160a01b039091168152602001610354565b348015610412575f80fd5b50610390610421366004612a72565b610dc9565b348015610431575f80fd5b50610390611047565b348015610445575f80fd5b50610390611177565b348015610459575f80fd5b5061034a60115481565b34801561046e575f80fd5b5061034a60075481565b348015610483575f80fd5b50610497610492366004612b06565b6111b9565b60408051938452602084019290925290820152606001610354565b3480156104bd575f80fd5b5060025460ff165b6040519015158152602001610354565b3480156104e0575f80fd5b5061034a60055481565b3480156104f5575f80fd5b5061034a610504366004612a72565b611241565b348015610514575f80fd5b5061034a60105481565b348015610529575f80fd5b5061039061127d565b34801561053d575f80fd5b5061034a60035481565b348015610552575f80fd5b50610390610561366004612a72565b6112be565b348015610571575f80fd5b50610390610580366004612a72565b611334565b348015610590575f80fd5b5061059961145b565b60408051928352602083019190915201610354565b3480156105b9575f80fd5b5061034a600e5481565b3480156105ce575f80fd5b506103906105dd366004612a72565b6114d1565b3480156105ed575f80fd5b506103906105fc366004612a72565b611547565b34801561060c575f80fd5b5061039061162a565b348015610620575f80fd5b5061034a61062f366004612b06565b61166a565b34801561063f575f80fd5b5061034a60085481565b348015610654575f80fd5b50610390610663366004612b26565b6116e2565b348015610673575f80fd5b505f546001600160a01b03166103ef565b34801561068f575f80fd5b5061034a60095481565b3480156106a4575f80fd5b5061034a600a5481565b3480156106b9575f80fd5b5061034a6106c8366004612a72565b61180b565b3480156106d8575f80fd5b506103906106e7366004612a72565b61183f565b3480156106f7575f80fd5b50610390610706366004612a72565b611a7a565b348015610716575f80fd5b50610390610725366004612b26565b611aef565b348015610735575f80fd5b5061034a600f5481565b34801561074a575f80fd5b50610390610759366004612b4e565b611d5a565b348015610769575f80fd5b5061034a600d5481565b34801561077e575f80fd5b5061039061078d366004612a72565b611edb565b34801561079d575f80fd5b5061034a6107ac366004612b06565b60146020525f908152604090205481565b3480156107c8575f80fd5b50600c546103ef906001600160a01b031681565b3480156107e7575f80fd5b50600854600954600a54610497565b348015610801575f80fd5b50610390610810366004612a72565b611f93565b348015610820575f80fd5b5061083461082f366004612b06565b6120d7565b6040805194855260208501939093529183015215156060820152608001610354565b348015610861575f80fd5b5061034a610870366004612b06565b60136020525f908152604090205481565b34801561088c575f80fd5b50610390612136565b3480156108a0575f80fd5b5061034a6108af366004612b06565b61231d565b3480156108bf575f80fd5b50610390612461565b3480156108d3575f80fd5b506104c56108e2366004612b06565b60156020525f908152604090205460ff1681565b348015610901575f80fd5b5061034a60045481565b348015610916575f80fd5b5061092a610925366004612b06565b61259b565b60405161035491905f61010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b348015610995575f80fd5b506103906109a4366004612b06565b61278c565b3480156109b4575f80fd5b5061034a6109c3366004612b06565b60126020525f908152604090205481565b3480156109df575f80fd5b506103906109ee366004612a72565b612835565b600b546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5d9190612bcd565b905090565b33610a745f546001600160a01b031690565b6001600160a01b031614610aa35760405162461bcd60e51b8152600401610a9a90612be4565b60405180910390fd5b601080549082905560408051828152602081018490527fe3117c3cc31e2d5d67afc8b5c366cd87a436cd3aaf93a169500733f4ebfb96ad91015b60405180910390a15050565b33610afb5f546001600160a01b031690565b6001600160a01b031614610b215760405162461bcd60e51b8152600401610a9a90612be4565b60018210158015610b33575060038211155b610b6e5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b6044820152606401610a9a565b5f82600103610bd657506005546006548210610bcc5760405162461bcd60e51b815260206004820152601760248201527f4d757374206265206c657373207468616e2054494552320000000000000000006044820152606401610a9a565b6005829055610ca5565b82600203610c4a575060065460055482118015610bf4575060075482105b610c405760405162461bcd60e51b815260206004820152601f60248201527f4d757374206265206265747765656e20544945523120616e64205449455233006044820152606401610a9a565b6006829055610ca5565b506007546006548211610c9f5760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652067726561746572207468616e2054494552320000000000006044820152606401610a9a565b60078290555b60408051848152602081018390529081018390527f9f9a58d32a7e2024ded31922b3892bb40501685aba4e64426c7f7aa764e794f89060600160405180910390a1505050565b33610cfd5f546001600160a01b031690565b6001600160a01b031614610d235760405162461bcd60e51b8152600401610a9a90612be4565b6001600160a01b038216610d6b5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a9a565b6001600160a01b0382165f81815260156020908152604091829020805460ff191685151590811790915591519182527f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb6910160405180910390a25050565b600260015403610deb5760405162461bcd60e51b8152600401610a9a90612c19565b6002600155610dfc60025460ff1690565b15610e195760405162461bcd60e51b8152600401610a9a90612c50565b335f9081526015602052604090205460ff1615610e485760405162461bcd60e51b8152600401610a9a90612c7a565b601154335f90815260136020526040902054610e649190612cbe565b421015610eaa5760405162461bcd60e51b815260206004820152601460248201527314dd1a5b1b081a5b881b1bd8dac81c195c9a5bd960621b6044820152606401610a9a565b335f90815260126020526040902054811115610f085760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74207374616b65642062616c616e636500000000006044820152606401610a9a565b5f610f123361231d565b90508015610f3657610f243382611aef565b335f9081526014602052604090204290555b335f9081526012602052604081208054849290610f54908490612cd1565b9091555050600b5460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015610fa7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcb9190612ce4565b6110095760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610a9a565b60405182815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75906020015b60405180910390a2505060018055565b6002600154036110695760405162461bcd60e51b8152600401610a9a90612c19565b600260015561107a60025460ff1690565b156110975760405162461bcd60e51b8152600401610a9a90612c50565b335f9081526015602052604090205460ff16156110c65760405162461bcd60e51b8152600401610a9a90612c7a565b5f6110d03361231d565b90505f81116111175760405162461bcd60e51b81526020600482015260136024820152724e6f207265776172647320746f20636c61696d60681b6044820152606401610a9a565b335f908152601460205260408120429055611133600a83612cff565b905061113f3383611aef565b604080518381526020810183905233917fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3259101611037565b336111895f546001600160a01b031690565b6001600160a01b0316146111af5760405162461bcd60e51b8152600401610a9a90612be4565b6111b76128fd565b565b6001600160a01b0381165f908152601360205260408120548190819081906111e19042612cd1565b6001600160a01b0386165f9081526012602052604090205490915061120590611241565b93506112108161180b565b92506103e8600f5484866112249190612d1e565b61122e9190612d1e565b6112389190612cff565b93959294505050565b5f600754821061125357506096919050565b60065482106112645750607d919050565b60055482106112755750606e919050565b506064919050565b3361128f5f546001600160a01b031690565b6001600160a01b0316146112b55760405162461bcd60e51b8152600401610a9a90612be4565b6111b75f612986565b336112d05f546001600160a01b031690565b6001600160a01b0316146112f65760405162461bcd60e51b8152600401610a9a90612be4565b601180549082905560408051828152602081018490527f5dd7b309b7bc5010d9c96159ee535a428121d6803cb847792402fffccaf1569a9101610add565b336113465f546001600160a01b031690565b6001600160a01b03161461136c5760405162461bcd60e51b8152600401610a9a90612be4565b60095481106113cd5760405162461bcd60e51b815260206004820152602760248201527f54494d455f5449455231206d757374206265206c657373207468616e2054494d60448201526622afaa24a2a91960c91b6064820152608401610a9a565b5f81116114145760405162461bcd60e51b8152602060048201526015602482015274506572696f642063616e6e6f74206265207a65726f60581b6044820152606401610a9a565b60088054908290556040805160018152602081018390529081018390527ffe4ba9a86d6d2f0684b5cee72f870d46b6a0bc4644db9e335c21b1f122dcfc5590606001610add565b600c546040516370a0823160e01b81523060048201525f9182916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c99190612bcd565b924792509050565b336114e35f546001600160a01b031690565b6001600160a01b0316146115095760405162461bcd60e51b8152600401610a9a90612be4565b600480549082905560408051828152602081018490527fbbaf4b5558cdbccdab95b91283441d5a715fbed963dcd0dc58e6f1a3040e46b89101610add565b336115595f546001600160a01b031690565b6001600160a01b03161461157f5760405162461bcd60e51b8152600401610a9a90612be4565b60095481116115e35760405162461bcd60e51b815260206004820152602a60248201527f54494d455f5449455233206d7573742062652067726561746572207468616e206044820152692a24a6a2afaa24a2a91960b11b6064820152608401610a9a565b600a8054908290556040805160038152602081018390529081018390527ffe4ba9a86d6d2f0684b5cee72f870d46b6a0bc4644db9e335c21b1f122dcfc5590606001610add565b3361163c5f546001600160a01b031690565b6001600160a01b0316146116625760405162461bcd60e51b8152600401610a9a90612be4565b6111b76129d5565b600b54604051636eb1769f60e11b81526001600160a01b0383811660048301523060248301525f92169063dd62ed3e90604401602060405180830381865afa1580156116b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116dc9190612bcd565b92915050565b336116f45f546001600160a01b031690565b6001600160a01b03161461171a5760405162461bcd60e51b8152600401610a9a90612be4565b600b546001600160a01b03908116908316036117785760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207265636f766572207374616b696e6720746f6b656e000000006044820152606401610a9a565b816001600160a01b031663a9059cbb6117985f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af11580156117e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118069190612ce4565b505050565b5f600a54821061181d57506096919050565b600954821061182e5750607d919050565b60085482106112755750606e919050565b6002600154036118615760405162461bcd60e51b8152600401610a9a90612c19565b600260015561187260025460ff1690565b1561188f5760405162461bcd60e51b8152600401610a9a90612c50565b335f9081526015602052604090205460ff16156118be5760405162461bcd60e51b8152600401610a9a90612c7a565b6010548110156119105760405162461bcd60e51b815260206004820152601a60248201527f42656c6f77206d696e696d756d207374616b6520616d6f756e740000000000006044820152606401610a9a565b5f81116119505760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610a9a565b600b546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af11580156119a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c89190612ce4565b50335f90815260126020526040902054156119f357335f908152601460205260409020429055611a05565b335f9081526014602052604090204290555b335f9081526012602052604081208054839290611a23908490612cbe565b9091555050335f8181526013602052604090819020429055517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90611a6b9084815260200190565b60405180910390a25060018055565b33611a8c5f546001600160a01b031690565b6001600160a01b031614611ab25760405162461bcd60e51b8152600401610a9a90612be4565b600380549082905560408051828152602081018490527ee3c220c012f68ff9fde8453dcf56fd8b157916de1ebdc1b6800cf8063df5f39101610add565b600c546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611b35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b599190612bcd565b1015611b9e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207265776172647360601b6044820152606401610a9a565b5f611baa600a83612cff565b905080471015611bfc5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e74207365636f6e64617279207265776172647300006044820152606401610a9a565b600c5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303815f875af1158015611c4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c709190612ce4565b611cb55760405162461bcd60e51b815260206004820152601660248201527514995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401610a9a565b5f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611cfe576040519150601f19603f3d011682016040523d82523d5f602084013e611d03565b606091505b5050905080611d545760405162461bcd60e51b815260206004820152601c60248201527f4e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610a9a565b50505050565b33611d6c5f546001600160a01b031690565b6001600160a01b031614611d925760405162461bcd60e51b8152600401610a9a90612be4565b5f5b82811015611d54575f848483818110611daf57611daf612d35565b9050602002016020810190611dc49190612b06565b6001600160a01b031603611e0c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a9a565b8160155f868685818110611e2257611e22612d35565b9050602002016020810190611e379190612b06565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055838382818110611e7057611e70612d35565b9050602002016020810190611e859190612b06565b6001600160a01b03167f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb683604051611ec1911515815260200190565b60405180910390a280611ed381612d49565b915050611d94565b33611eed5f546001600160a01b031690565b6001600160a01b031614611f135760405162461bcd60e51b8152600401610a9a90612be4565b600354811115611f555760405162461bcd60e51b815260206004820152600d60248201526c0a4c2e8ca40e8dede40d0d2ced609b1b6044820152606401610a9a565b600e80549082905560408051828152602081018490527ff2f4736aeb3f199720710c084e757a576694b916ef62336bd137d9730d19226f9101610add565b33611fa55f546001600160a01b031690565b6001600160a01b031614611fcb5760405162461bcd60e51b8152600401610a9a90612be4565b600854811161202f5760405162461bcd60e51b815260206004820152602a60248201527f54494d455f5449455232206d7573742062652067726561746572207468616e2060448201526954494d455f544945523160b01b6064820152608401610a9a565b600a5481106120905760405162461bcd60e51b815260206004820152602760248201527f54494d455f5449455232206d757374206265206c657373207468616e2054494d604482015266455f544945523360c81b6064820152608401610a9a565b60098054908290556040805160028152602081018390529081018390527ffe4ba9a86d6d2f0684b5cee72f870d46b6a0bc4644db9e335c21b1f122dcfc5590606001610add565b6001600160a01b0381165f9081526012602090815260408083205460139092528220548291829182919061210a8761231d565b6001600160a01b0388165f90815260156020526040902054929650909450925060ff1690509193509193565b336121485f546001600160a01b031690565b6001600160a01b03161461216e5760405162461bcd60e51b8152600401610a9a90612be4565b600c546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156121b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d89190612bcd565b905047811561227357600c546001600160a01b031663a9059cbb6122035f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af115801561224d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122719190612ce4565b505b8015612319575f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146122c3576040519150601f19603f3d011682016040523d82523d5f602084013e6122c8565b606091505b50509050806118065760405162461bcd60e51b815260206004820152601c60248201527f4e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610a9a565b5050565b6001600160a01b0381165f90815260126020526040812054810361234257505f919050565b6001600160a01b0382165f908152601460205260408120546123649042612cd1565b90505f600e54600d546123779190612cbe565b6001600160a01b0385165f908152601260205260408120549192509061239c90611241565b6001600160a01b0386165f90815260136020526040812054919250906123c29042612cd1565b90505f6123ce8261180b565b6001600160a01b0388165f9081526012602052604081205491925090670de0b6b3a7640000908790612401908890612d1e565b61240b9190612d1e565b6124159190612cff565b9050612710826124258684612d1e565b61242f9190612d1e565b6124399190612cff565b90506064600f548261244b9190612d1e565b6124559190612cff565b98975050505050505050565b6002600154036124835760405162461bcd60e51b8152600401610a9a90612c19565b6002600155335f90815260126020526040902054806124d75760405162461bcd60e51b815260206004820152601060248201526f4e6f207374616b656420746f6b656e7360801b6044820152606401610a9a565b335f818152601260209081526040808320839055601390915280822091909155600b54905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015612544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125689190612ce4565b5060405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd969590602001611a6b565b6125a3612a35565b6125ab612a35565b6001600160a01b0383165f9081526012602052604081205490036125cf5792915050565b6001600160a01b0383165f908152601360205260408120546125f19042612cd1565b90505f600e54600d546126049190612cbe565b905061260f8261180b565b60608401526001600160a01b0385165f9081526012602052604090205461263590611241565b60808401526126438561231d565b80845261265290600a90612cff565b6040808501919091526001600160a01b0386165f908152601260205290812054670de0b6b3a764000090612687908490612d1e565b6126949062015180612d1e565b61269e9190612cff565b9050620f4240600f5485608001518660600151846126bc9190612d1e565b6126c69190612d1e565b6126d09190612d1e565b6126da9190612cff565b60208086019182526001600160a01b0388165f9081526012909152604090205490516127089061016d612d1e565b612713906064612d1e565b61271d9190612cff565b60a085015260c0840183905260085483101561274b57826008546127419190612cd1565b60e0850152612782565b60095483101561276357826009546127419190612cd1565b600a5483101561277b5782600a546127419190612cd1565b5f60e08501525b5091949350505050565b3361279e5f546001600160a01b031690565b6001600160a01b0316146127c45760405162461bcd60e51b8152600401610a9a90612be4565b6001600160a01b0381166128295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9a565b61283281612986565b50565b336128475f546001600160a01b031690565b6001600160a01b03161461286d5760405162461bcd60e51b8152600401610a9a90612be4565b5f8111801561287e57506004548111155b6128bf5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21036bab63a34b83634b2b960711b6044820152606401610a9a565b600f80549082905560408051828152602081018490527f9186bba392492a86d11772f6a96c676e03501c72017ff3a3c6fa302db18adcfd9101610add565b60025460ff166129465760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a9a565b6002805460ff191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff16156129f85760405162461bcd60e51b8152600401610a9a90612c50565b6002805460ff191660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161297c565b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215612a82575f80fd5b5035919050565b5f8060408385031215612a9a575f80fd5b50508035926020909101359150565b80356001600160a01b0381168114612abf575f80fd5b919050565b8015158114612832575f80fd5b5f8060408385031215612ae2575f80fd5b612aeb83612aa9565b91506020830135612afb81612ac4565b809150509250929050565b5f60208284031215612b16575f80fd5b612b1f82612aa9565b9392505050565b5f8060408385031215612b37575f80fd5b612b4083612aa9565b946020939093013593505050565b5f805f60408486031215612b60575f80fd5b833567ffffffffffffffff80821115612b77575f80fd5b818601915086601f830112612b8a575f80fd5b813581811115612b98575f80fd5b8760208260051b8501011115612bac575f80fd5b60209283019550935050840135612bc281612ac4565b809150509250925092565b5f60208284031215612bdd575f80fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601690820152751058d8dbdd5b9d081a5cc8189b1858dadb1a5cdd195960521b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116dc576116dc612caa565b818103818111156116dc576116dc612caa565b5f60208284031215612cf4575f80fd5b8151612b1f81612ac4565b5f82612d1957634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176116dc576116dc612caa565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612d5a57612d5a612caa565b506001019056fea2646970667358221220ba21a4829fce366c0bed96713925b97ce9755765c1bf0c6d0669141c6e4bae2f64736f6c63430008140033

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

000000000000000000000000640b9ca29ae2caf5f07f416b5e8302805b8e07d7000000000000000000000000cbe687ed3af5e9493888119cd419f25668eafd54000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000093a80

-----Decoded View---------------
Arg [0] : _dexLPTokenAddress (address): 0x640b9cA29Ae2cAF5f07F416B5e8302805B8E07d7
Arg [1] : _HACCoinContractAddress (address): 0xcbe687Ed3AF5E9493888119cD419F25668eAFd54
Arg [2] : _baseRewardRate (uint256): 100
Arg [3] : _bonusMultiplier (uint256): 100
Arg [4] : _minimumStakeAmount (uint256): 1000000000000000000
Arg [5] : _lockPeriod (uint256): 604800

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000640b9ca29ae2caf5f07f416b5e8302805b8e07d7
Arg [1] : 000000000000000000000000cbe687ed3af5e9493888119cd419f25668eafd54
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000093a80


Deployed Bytecode Sourcemap

3090:17942:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;4376:41:0;;;;;;;;9662:119;;;;;;;;;;;;;:::i;11806:221::-;;;;;;;;;;-1:-1:-1;11806:221:0;;;;;:::i;:::-;;:::i;:::-;;17470:884;;;;;;;;;;-1:-1:-1;17470:884:0;;;;;:::i;:::-;;:::i;12255:222::-;;;;;;;;;;-1:-1:-1;12255:222:0;;;;;:::i;:::-;;:::i;4731:24::-;;;;;;;;;;-1:-1:-1;4731:24:0;;;;-1:-1:-1;;;;;4731:24:0;;;;;;-1:-1:-1;;;;;1432:32:1;;;1414:51;;1402:2;1387:18;4731:24:0;1255:216:1;7462:807:0;;;;;;;;;;-1:-1:-1;7462:807:0;;;;;:::i;:::-;;:::i;8277:573::-;;;;;;;;;;;;;:::i;11068:67::-;;;;;;;;;;;;;:::i;5193:25::-;;;;;;;;;;;;;;;;4443:42;;;;;;;;;;;;;;;;15147:570;;;;;;;;;;-1:-1:-1;15147:570:0;;;;;:::i;:::-;;:::i;:::-;;;;1869:25:1;;;1925:2;1910:18;;1903:34;;;;1953:18;;;1946:34;1857:2;1842:18;15147:570:0;1667:319:1;2406:86:0;;;;;;;;;;-1:-1:-1;2477:7:0;;;;2406:86;;;2156:14:1;;2149:22;2131:41;;2119:2;2104:18;2406:86:0;1991:187:1;4310:40:0;;;;;;;;;;;;;;;;14286:427;;;;;;;;;;-1:-1:-1;14286:427:0;;;;;:::i;:::-;;:::i;5153:33::-;;;;;;;;;;;;;;;;1227:103;;;;;;;;;;;;;:::i;4201:38::-;;;;;;;;;;;;;;;;12035:189;;;;;;;;;;-1:-1:-1;12035:189:0;;;;;:::i;:::-;;:::i;15779:341::-;;;;;;;;;;-1:-1:-1;15779:341:0;;;;;:::i;:::-;;:::i;14001:226::-;;;;;;;;;;;;;:::i;:::-;;;;2357:25:1;;;2413:2;2398:18;;2391:34;;;;2330:18;14001:226:0;2183:248:1;4909:32:0;;;;;;;;;;;;;;;;17208:254;;;;;;;;;;-1:-1:-1;17208:254:0;;;;;:::i;:::-;;:::i;16507:286::-;;;;;;;;;;-1:-1:-1;16507:286:0;;;;;:::i;:::-;;:::i;10997:63::-;;;;;;;;;;;;;:::i;10157:142::-;;;;;;;;;;-1:-1:-1;10157:142:0;;;;;:::i;:::-;;:::i;4511:34::-;;;;;;;;;;;;;;;;13752:241;;;;;;;;;;-1:-1:-1;13752:241:0;;;;;:::i;:::-;;:::i;1006:87::-;;;;;;;;;;-1:-1:-1;1052:7:0;1079:6;-1:-1:-1;;;;;1079:6:0;1006:87;;4565:35;;;;;;;;;;;;;;;;4620;;;;;;;;;;;;;;;;14721:418;;;;;;;;;;-1:-1:-1;14721:418:0;;;;;:::i;:::-;;:::i;6593:861::-;;;;;;;;;;-1:-1:-1;6593:861:0;;;;;:::i;:::-;;:::i;16996:204::-;;;;;;;;;;-1:-1:-1;16996:204:0;;;;;:::i;:::-;;:::i;10360:557::-;;;;;;;;;;-1:-1:-1;10360:557:0;;;;;:::i;:::-;;:::i;5005:30::-;;;;;;;;;;;;;;;;12485:327;;;;;;;;;;-1:-1:-1;12485:327:0;;;;;:::i;:::-;;:::i;4853:29::-;;;;;;;;;;;;;;;;11167:267;;;;;;;;;;-1:-1:-1;11167:267:0;;;;;:::i;:::-;;:::i;5383:48::-;;;;;;;;;;-1:-1:-1;5383:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;4762:27;;;;;;;;;;-1:-1:-1;4762:27:0;;;;-1:-1:-1;;;;;4762:27:0;;;16801:136;;;;;;;;;;-1:-1:-1;16894:10:0;;16906;;16918;;16801:136;;16128:371;;;;;;;;;;-1:-1:-1;16128:371:0;;;;;:::i;:::-;;:::i;9789:360::-;;;;;;;;;;-1:-1:-1;9789:360:0;;;;;:::i;:::-;;:::i;:::-;;;;3883:25:1;;;3939:2;3924:18;;3917:34;;;;3967:18;;;3960:34;4037:14;4030:22;4025:2;4010:18;;4003:50;3870:3;3855:19;9789:360:0;3658:401:1;5325:51:0;;;;;;;;;;-1:-1:-1;5325:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;13248:496;;;;;;;;;;;;;:::i;8907:747::-;;;;;;;;;;-1:-1:-1;8907:747:0;;;;;:::i;:::-;;:::i;12874:366::-;;;;;;;;;;;;;:::i;5438:43::-;;;;;;;;;;-1:-1:-1;5438:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4254:42;;;;;;;;;;;;;;;;19023:1914;;;;;;;;;;-1:-1:-1;19023:1914:0;;;;;:::i;:::-;;:::i;:::-;;;;;;4222:4:1;4264:3;4253:9;4249:19;4241:27;;4301:6;4295:13;4284:9;4277:32;4365:4;4357:6;4353:17;4347:24;4340:4;4329:9;4325:20;4318:54;4428:4;4420:6;4416:17;4410:24;4403:4;4392:9;4388:20;4381:54;4491:4;4483:6;4479:17;4473:24;4466:4;4455:9;4451:20;4444:54;4554:4;4546:6;4542:17;4536:24;4529:4;4518:9;4514:20;4507:54;4617:4;4609:6;4605:17;4599:24;4592:4;4581:9;4577:20;4570:54;4680:4;4672:6;4668:17;4662:24;4655:4;4644:9;4640:20;4633:54;4743:4;4735:6;4731:17;4725:24;4718:4;4707:9;4703:20;4696:54;4064:692;;;;;1338:201:0;;;;;;;;;;-1:-1:-1;1338:201:0;;;;;:::i;:::-;;:::i;5271:47::-;;;;;;;;;;-1:-1:-1;5271:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;11442:323;;;;;;;;;;-1:-1:-1;11442:323:0;;;;;:::i;:::-;;:::i;9662:119::-;9738:10;;:35;;-1:-1:-1;;;9738:35:0;;9767:4;9738:35;;;1414:51:1;9711:7:0;;-1:-1:-1;;;;;9738:10:0;;:20;;1387:18:1;;9738:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9731:42;;9662:119;:::o;11806:221::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;;;;;;;;;11903:18:::1;::::0;;11932:27;;;;11975:44:::1;::::0;;2357:25:1;;;2413:2;2398:18;;2391:34;;;11975:44:0::1;::::0;2330:18:1;11975:44:0::1;;;;;;;;11872:155;11806:221:::0;:::o;17470:884::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;17579:1:::1;17569:6;:11;;:26;;;;;17594:1;17584:6;:11;;17569:26;17561:51;;;::::0;-1:-1:-1;;;17561:51:0;;5513:2:1;17561:51:0::1;::::0;::::1;5495:21:1::0;5552:2;5532:18;;;5525:30;-1:-1:-1;;;5571:18:1;;;5564:42;5623:18;;17561:51:0::1;5311:336:1::0;17561:51:0::1;17623:17;17665:6;17675:1;17665:11:::0;17661:610:::1;;-1:-1:-1::0;17705:15:0::1;::::0;17755::::1;::::0;17743:27;::::1;17735:63;;;::::0;-1:-1:-1;;;17735:63:0;;5854:2:1;17735:63:0::1;::::0;::::1;5836:21:1::0;5893:2;5873:18;;;5866:30;5932:25;5912:18;;;5905:53;5975:18;;17735:63:0::1;5652:347:1::0;17735:63:0::1;17813:15;:27:::0;;;17661:610:::1;;;17862:6;17872:1;17862:11:::0;17858:413:::1;;-1:-1:-1::0;17902:15:0::1;::::0;17952::::1;::::0;17940:27;::::1;:58:::0;::::1;;;;17983:15;;17971:9;:27;17940:58;17932:102;;;::::0;-1:-1:-1;;;17932:102:0;;6206:2:1;17932:102:0::1;::::0;::::1;6188:21:1::0;6245:2;6225:18;;;6218:30;6284:33;6264:18;;;6257:61;6335:18;;17932:102:0::1;6004:355:1::0;17932:102:0::1;18049:15;:27:::0;;;17858:413:::1;;;-1:-1:-1::0;18121:15:0::1;::::0;18171::::1;::::0;18159:27;::::1;18151:66;;;::::0;-1:-1:-1;;;18151:66:0;;6566:2:1;18151:66:0::1;::::0;::::1;6548:21:1::0;6605:2;6585:18;;;6578:30;6644:28;6624:18;;;6617:56;6690:18;;18151:66:0::1;6364:350:1::0;18151:66:0::1;18232:15;:27:::0;;;17858:413:::1;18296:50;::::0;;1869:25:1;;;1925:2;1910:18;;1903:34;;;1953:18;;;1946:34;;;18296:50:0::1;::::0;1857:2:1;1842:18;18296:50:0::1;;;;;;;17550:804;17470:884:::0;;:::o;12255:222::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12342:18:0;::::1;12334:46;;;::::0;-1:-1:-1;;;12334:46:0;;6921:2:1;12334:46:0::1;::::0;::::1;6903:21:1::0;6960:2;6940:18;;;6933:30;-1:-1:-1;;;6979:18:1;;;6972:45;7034:18;;12334:46:0::1;6719:339:1::0;12334:46:0::1;-1:-1:-1::0;;;;;12391:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;;;;:26;;-1:-1:-1;;12391:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;12433:36;;2131:41:1;;;12433:36:0::1;::::0;2104:18:1;12433:36:0::1;;;;;;;12255:222:::0;;:::o;7462:807::-;1899:1;2045:7;;:19;2037:63;;;;-1:-1:-1;;;2037:63:0;;;;;;;:::i;:::-;1899:1;2111:7;:18;2545:8:::1;2477:7:::0;;;;;2406:86;2545:8:::1;2544:9;2536:38;;;;-1:-1:-1::0;;;2536:38:0::1;;;;;;;:::i;:::-;6470:10:::2;6458:23;::::0;;;:11:::2;:23;::::0;;;;;::::2;;6457:24;6449:59;;;;-1:-1:-1::0;;;6449:59:0::2;;;;;;;:::i;:::-;7615:10:::3;::::0;7601::::3;7584:28;::::0;;;:16:::3;:28;::::0;;;;;:41:::3;::::0;7615:10;7584:41:::3;:::i;:::-;7565:15;:60;;7557:93;;;::::0;-1:-1:-1;;;7557:93:0;;8583:2:1;7557:93:0::3;::::0;::::3;8565:21:1::0;8622:2;8602:18;;;8595:30;-1:-1:-1;;;8641:18:1;;;8634:50;8701:18;;7557:93:0::3;8381:344:1::0;7557:93:0::3;7682:10;7669:24;::::0;;;:12:::3;:24;::::0;;;;;:34;-1:-1:-1;7669:34:0::3;7661:74;;;::::0;-1:-1:-1;;;7661:74:0;;8932:2:1;7661:74:0::3;::::0;::::3;8914:21:1::0;8971:2;8951:18;;;8944:30;9010:29;8990:18;;;8983:57;9057:18;;7661:74:0::3;8730:351:1::0;7661:74:0::3;7818:21;7842:27;7858:10;7842:15;:27::i;:::-;7818:51:::0;-1:-1:-1;7884:17:0;;7880:152:::3;;7918:44;7936:10;7948:13;7918:17;:44::i;:::-;7991:10;7977:25;::::0;;;:13:::3;:25;::::0;;;;8005:15:::3;7977:43:::0;;7880:152:::3;8116:10;8103:24;::::0;;;:12:::3;:24;::::0;;;;:34;;8131:6;;8103:24;:34:::3;::::0;8131:6;;8103:34:::3;:::i;:::-;::::0;;;-1:-1:-1;;8156:10:0::3;::::0;:39:::3;::::0;-1:-1:-1;;;8156:39:0;;8176:10:::3;8156:39;::::0;::::3;9393:51:1::0;9460:18;;;9453:34;;;-1:-1:-1;;;;;8156:10:0;;::::3;::::0;:19:::3;::::0;9366:18:1;;8156:39:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8148:67;;;::::0;-1:-1:-1;;;8148:67:0;;9950:2:1;8148:67:0::3;::::0;::::3;9932:21:1::0;9989:2;9969:18;;;9962:30;-1:-1:-1;;;10008:18:1;;;10001:45;10063:18;;8148:67:0::3;9748:339:1::0;8148:67:0::3;8233:28;::::0;160:25:1;;;8242:10:0::3;::::0;8233:28:::3;::::0;148:2:1;133:18;8233:28:0::3;;;;;;;;-1:-1:-1::0;;1855:1:0;2152:22;;7462:807::o;8277:573::-;1899:1;2045:7;;:19;2037:63;;;;-1:-1:-1;;;2037:63:0;;;;;;;:::i;:::-;1899:1;2111:7;:18;2545:8:::1;2477:7:::0;;;;;2406:86;2545:8:::1;2544:9;2536:38;;;;-1:-1:-1::0;;;2536:38:0::1;;;;;;;:::i;:::-;6470:10:::2;6458:23;::::0;;;:11:::2;:23;::::0;;;;;::::2;;6457:24;6449:59;;;;-1:-1:-1::0;;;6449:59:0::2;;;;;;;:::i;:::-;8363:21:::3;8387:27;8403:10;8387:15;:27::i;:::-;8363:51;;8449:1;8433:13;:17;8425:49;;;::::0;-1:-1:-1;;;8425:49:0;;10294:2:1;8425:49:0::3;::::0;::::3;10276:21:1::0;10333:2;10313:18;;;10306:30;-1:-1:-1;;;10352:18:1;;;10345:49;10411:18;;8425:49:0::3;10092:343:1::0;8425:49:0::3;8564:10;8550:25;::::0;;;:13:::3;:25;::::0;;;;8578:15:::3;8550:43:::0;;8685:18:::3;8701:2;8685:13:::0;:18:::3;:::i;:::-;8659:44;;8714;8732:10;8744:13;8714:17;:44::i;:::-;8784:58;::::0;;2357:25:1;;;2413:2;2398:18;;2391:34;;;8799:10:0::3;::::0;8784:58:::3;::::0;2330:18:1;8784:58:0::3;2183:248:1::0;11068:67:0;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;11117:10:::1;:8;:10::i;:::-;11068:67::o:0;15147:570::-;-1:-1:-1;;;;;15369:22:0;;15222:24;15369:22;;;:16;:22;;;;;;15222:24;;;;;;15351:40;;:15;:40;:::i;:::-;-1:-1:-1;;;;;15441:18:0;;;;;;:12;:18;;;;;;15332:59;;-1:-1:-1;15421:39:0;;:19;:39::i;:::-;15402:58;;15488:27;15506:8;15488:17;:27::i;:::-;15471:44;;15600:4;15581:15;;15564:14;15545:16;:33;;;;:::i;:::-;:51;;;;:::i;:::-;15544:60;;;;:::i;:::-;15147:570;;;;-1:-1:-1;;;15147:570:0:o;14286:427::-;14352:7;14386:15;;14376:6;:25;14372:283;;-1:-1:-1;14425:3:0;;14286:427;-1:-1:-1;14286:427:0:o;14372:283::-;14482:15;;14472:6;:25;14468:187;;-1:-1:-1;14521:3:0;;14286:427;-1:-1:-1;14286:427:0:o;14468:187::-;14579:15;;14569:6;:25;14565:90;;-1:-1:-1;14618:3:0;;14286:427;-1:-1:-1;14286:427:0:o;14565:90::-;-1:-1:-1;14672:3:0;;14286:427;-1:-1:-1;14286:427:0:o;1227:103::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;1292:30:::1;1319:1;1292:18;:30::i;12035:189::-:0;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;12124:10:::1;::::0;;12145:19;;;;12180:36:::1;::::0;;2357:25:1;;;2413:2;2398:18;;2391:34;;;12180:36:0::1;::::0;2330:18:1;12180:36:0::1;2183:248:1::0;15779:341:0;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;15870:10:::1;;15858:9;:22;15850:74;;;::::0;-1:-1:-1;;;15850:74:0;;11037:2:1;15850:74:0::1;::::0;::::1;11019:21:1::0;11076:2;11056:18;;;11049:30;11115:34;11095:18;;;11088:62;-1:-1:-1;;;11166:18:1;;;11159:37;11213:19;;15850:74:0::1;10835:403:1::0;15850:74:0::1;15955:1;15943:9;:13;15935:47;;;::::0;-1:-1:-1;;;15935:47:0;;11445:2:1;15935:47:0::1;::::0;::::1;11427:21:1::0;11484:2;11464:18;;;11457:30;-1:-1:-1;;;11503:18:1;;;11496:51;11564:18;;15935:47:0::1;11243:345:1::0;15935:47:0::1;16013:10;::::0;;16034:22;;;;16072:40:::1;::::0;;-1:-1:-1;1869:25:1;;1925:2;1910:18;;1903:34;;;1953:18;;;1946:34;;;16072:40:0::1;::::0;1857:2:1;1842:18;16072:40:0::1;1667:319:1::0;14001:226:0;14134:13;;:38;;-1:-1:-1;;;14134:38:0;;14166:4;14134:38;;;1414:51:1;14053:23:0;;;;-1:-1:-1;;;;;14134:13:0;;;;:23;;1387:18:1;;14134:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14112:107;14187:21;;-1:-1:-1;14001:226:0;-1:-1:-1;14001:226:0:o;17208:254::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;17316:20:::1;::::0;;17347:36;;;;17399:55:::1;::::0;;2357:25:1;;;2413:2;2398:18;;2391:34;;;17399:55:0::1;::::0;2330:18:1;17399:55:0::1;2183:248:1::0;16507:286:0;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;16598:10:::1;;16586:9;:22;16578:77;;;::::0;-1:-1:-1;;;16578:77:0;;12127:2:1;16578:77:0::1;::::0;::::1;12109:21:1::0;12166:2;12146:18;;;12139:30;12205:34;12185:18;;;12178:62;-1:-1:-1;;;12256:18:1;;;12249:40;12306:19;;16578:77:0::1;11925:406:1::0;16578:77:0::1;16686:10;::::0;;16707:22;;;;16745:40:::1;::::0;;16761:1:::1;1869:25:1::0;;1925:2;1910:18;;1903:34;;;1953:18;;;1946:34;;;16745:40:0::1;::::0;1857:2:1;1842:18;16745:40:0::1;1667:319:1::0;10997:63:0;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;11044:8:::1;:6;:8::i;10157:142::-:0;10250:10;;:41;;-1:-1:-1;;;10250:41:0;;-1:-1:-1;;;;;12898:15:1;;;10250:41:0;;;12880:34:1;10285:4:0;12930:18:1;;;12923:43;10223:7:0;;10250:10;;:20;;12815:18:1;;10250:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10243:48;10157:142;-1:-1:-1;;10157:142:0:o;13752:241::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;13879:10:::1;::::0;-1:-1:-1;;;;;13879:10:0;;::::1;13855:35:::0;;::::1;::::0;13847:76:::1;;;::::0;-1:-1:-1;;;13847:76:0;;13179:2:1;13847:76:0::1;::::0;::::1;13161:21:1::0;13218:2;13198:18;;;13191:30;13257;13237:18;;;13230:58;13305:18;;13847:76:0::1;12977:352:1::0;13847:76:0::1;13941:12;-1:-1:-1::0;;;;;13934:29:0::1;;13964:7;1052::::0;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;13964:7:::1;13934:51;::::0;-1:-1:-1;;;;;;13934:51:0::1;::::0;;;;;;-1:-1:-1;;;;;9411:32:1;;;13934:51:0::1;::::0;::::1;9393::1::0;9460:18;;;9453:34;;;9366:18;;13934:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13752:241:::0;;:::o;14721:418::-;14787:7;14823:10;;14811:8;:22;14807:274;;-1:-1:-1;14857:3:0;;14721:418;-1:-1:-1;14721:418:0:o;14807:274::-;14916:10;;14904:8;:22;14900:181;;-1:-1:-1;14950:3:0;;14721:418;-1:-1:-1;14721:418:0:o;14900:181::-;15010:10;;14998:8;:22;14994:87;;-1:-1:-1;15044:3:0;;14721:418;-1:-1:-1;14721:418:0:o;6593:861::-;1899:1;2045:7;;:19;2037:63;;;;-1:-1:-1;;;2037:63:0;;;;;;;:::i;:::-;1899:1;2111:7;:18;2545:8:::1;2477:7:::0;;;;;2406:86;2545:8:::1;2544:9;2536:38;;;;-1:-1:-1::0;;;2536:38:0::1;;;;;;;:::i;:::-;6470:10:::2;6458:23;::::0;;;:11:::2;:23;::::0;;;;;::::2;;6457:24;6449:59;;;;-1:-1:-1::0;;;6449:59:0::2;;;;;;;:::i;:::-;6704:18:::3;;6694:6;:28;;6686:67;;;::::0;-1:-1:-1;;;6686:67:0;;13536:2:1;6686:67:0::3;::::0;::::3;13518:21:1::0;13575:2;13555:18;;;13548:30;13614:28;13594:18;;;13587:56;13660:18;;6686:67:0::3;13334:350:1::0;6686:67:0::3;6781:1;6772:6;:10;6764:37;;;::::0;-1:-1:-1;;;6764:37:0;;13891:2:1;6764:37:0::3;::::0;::::3;13873:21:1::0;13930:2;13910:18;;;13903:30;-1:-1:-1;;;13949:18:1;;;13942:44;14003:18;;6764:37:0::3;13689:338:1::0;6764:37:0::3;6862:10;::::0;:58:::3;::::0;-1:-1:-1;;;6862:58:0;;6886:10:::3;6862:58;::::0;::::3;14272:34:1::0;6906:4:0::3;14322:18:1::0;;;14315:43;14374:18;;;14367:34;;;-1:-1:-1;;;;;6862:10:0;;::::3;::::0;:23:::3;::::0;14207:18:1;;6862:58:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;7030:10:0::3;7044:1;7017:24:::0;;;:12:::3;:24;::::0;;;;;:28;7013:243:::3;;7076:10;7062:25;::::0;;;:13:::3;:25;::::0;;;;7090:15:::3;7062:43:::0;;7013:243:::3;;;7215:10;7201:25;::::0;;;:13:::3;:25;::::0;;;;7229:15:::3;7201:43:::0;;7013:243:::3;7324:10;7311:24;::::0;;;:12:::3;:24;::::0;;;;:34;;7339:6;;7311:24;:34:::3;::::0;7339:6;;7311:34:::3;:::i;:::-;::::0;;;-1:-1:-1;;7373:10:0::3;7356:28;::::0;;;:16:::3;:28;::::0;;;;;;7387:15:::3;7356:46:::0;;7420:26;::::3;::::0;::::3;::::0;7439:6;160:25:1;;148:2;133:18;;14:177;7420:26:0::3;;;;;;;;-1:-1:-1::0;1855:1:0;2152:22;;6593:861::o;16996:204::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;17087:15:::1;::::0;;17113:25;;;;17154:38:::1;::::0;;2357:25:1;;;2413:2;2398:18;;2391:34;;;17154:38:0::1;::::0;2330:18:1;17154:38:0::1;2183:248:1::0;10360:557:0;10449:13;;:38;;-1:-1:-1;;;10449:38:0;;10481:4;10449:38;;;1414:51:1;10491:12:0;;-1:-1:-1;;;;;10449:13:0;;:23;;1387:18:1;;10449:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;10441:87;;;;-1:-1:-1;;;10441:87:0;;14614:2:1;10441:87:0;;;14596:21:1;14653:2;14633:18;;;14626:30;-1:-1:-1;;;14672:18:1;;;14665:50;14732:18;;10441:87:0;14412:344:1;10441:87:0;10539:23;10565:17;10580:2;10565:12;:17;:::i;:::-;10539:43;;10626:15;10601:21;:40;;10593:83;;;;-1:-1:-1;;;10593:83:0;;14963:2:1;10593:83:0;;;14945:21:1;15002:2;14982:18;;;14975:30;15041:32;15021:18;;;15014:60;15091:18;;10593:83:0;14761:354:1;10593:83:0;10705:13;;:42;;-1:-1:-1;;;10705:42:0;;-1:-1:-1;;;;;9411:32:1;;;10705:42:0;;;9393:51:1;9460:18;;;9453:34;;;10705:13:0;;;;:22;;9366:18:1;;10705:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10697:77;;;;-1:-1:-1;;;10697:77:0;;15322:2:1;10697:77:0;;;15304:21:1;15361:2;15341:18;;;15334:30;-1:-1:-1;;;15380:18:1;;;15373:52;15442:18;;10697:77:0;15120:346:1;10697:77:0;10786:12;10812:4;-1:-1:-1;;;;;10804:18:0;10830:15;10804:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10785:65;;;10869:7;10861:48;;;;-1:-1:-1;;;10861:48:0;;15883:2:1;10861:48:0;;;15865:21:1;15922:2;15902:18;;;15895:30;15961;15941:18;;;15934:58;16009:18;;10861:48:0;15681:352:1;10861:48:0;10430:487;;10360:557;;:::o;12485:327::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;12585:9:::1;12581:224;12600:16:::0;;::::1;12581:224;;;12666:1;12646:5:::0;;12652:1;12646:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12646:22:0::1;::::0;12638:50:::1;;;::::0;-1:-1:-1;;;12638:50:0;;6921:2:1;12638:50:0::1;::::0;::::1;6903:21:1::0;6960:2;6940:18;;;6933:30;-1:-1:-1;;;6979:18:1;;;6972:45;7034:18;;12638:50:0::1;6719:339:1::0;12638:50:0::1;12727:6;12703:11;:21;12715:5;;12721:1;12715:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12703:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12703:21:0;:30;;-1:-1:-1;;12703:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12776:5;;12782:1;12776:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12753:40:0::1;;12786:6;12753:40;;;;2156:14:1::0;2149:22;2131:41;;2119:2;2104:18;;1991:187;12753:40:0::1;;;;;;;;12618:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12581:224;;11167:267:::0;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;11257:15:::1;;11249:4;:23;;11241:49;;;::::0;-1:-1:-1;;;11241:49:0;;16512:2:1;11241:49:0::1;::::0;::::1;16494:21:1::0;16551:2;16531:18;;;16524:30;-1:-1:-1;;;16570:18:1;;;16563:43;16623:18;;11241:49:0::1;16310:337:1::0;11241:49:0::1;11319:17;::::0;;11347:24;;;;11387:39:::1;::::0;;2357:25:1;;;2413:2;2398:18;;2391:34;;;11387:39:0::1;::::0;2330:18:1;11387:39:0::1;2183:248:1::0;16128:371:0;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;16219:10:::1;;16207:9;:22;16199:77;;;::::0;-1:-1:-1;;;16199:77:0;;16854:2:1;16199:77:0::1;::::0;::::1;16836:21:1::0;16893:2;16873:18;;;16866:30;16932:34;16912:18;;;16905:62;-1:-1:-1;;;16983:18:1;;;16976:40;17033:19;;16199:77:0::1;16652:406:1::0;16199:77:0::1;16307:10;;16295:9;:22;16287:74;;;::::0;-1:-1:-1;;;16287:74:0;;17265:2:1;16287:74:0::1;::::0;::::1;17247:21:1::0;17304:2;17284:18;;;17277:30;17343:34;17323:18;;;17316:62;-1:-1:-1;;;17394:18:1;;;17387:37;17441:19;;16287:74:0::1;17063:403:1::0;16287:74:0::1;16392:10;::::0;;16413:22;;;;16451:40:::1;::::0;;16467:1:::1;1869:25:1::0;;1925:2;1910:18;;1903:34;;;1953:18;;;1946:34;;;16451:40:0::1;::::0;1857:2:1;1842:18;16451:40:0::1;1667:319:1::0;9789:360:0;-1:-1:-1;;;;;10007:18:0;;9862:14;10007:18;;;:12;:18;;;;;;;;;10040:16;:22;;;;;;9862:14;;;;;;10007:18;10077:21;10020:4;10077:15;:21::i;:::-;-1:-1:-1;;;;;10113:17:0;;;;;;:11;:17;;;;;;9985:156;;-1:-1:-1;9985:156:0;;-1:-1:-1;9985:156:0;-1:-1:-1;10113:17:0;;;-1:-1:-1;9789:360:0;;;;;:::o;13248:496::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;13337:13:::1;::::0;:38:::1;::::0;-1:-1:-1;;;13337:38:0;;13369:4:::1;13337:38;::::0;::::1;1414:51:1::0;13313:21:0::1;::::0;-1:-1:-1;;;;;13337:13:0::1;::::0;:23:::1;::::0;1387:18:1;;13337:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13313:62:::0;-1:-1:-1;13410:21:0::1;13456:17:::0;;13452:96:::1;;13490:13;::::0;-1:-1:-1;;;;;13490:13:0::1;:22;13513:7;1052::::0;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;13513:7:::1;13490:46;::::0;-1:-1:-1;;;;;;13490:46:0::1;::::0;;;;;;-1:-1:-1;;;;;9411:32:1;;;13490:46:0::1;::::0;::::1;9393:51:1::0;9460:18;;;9453:34;;;9366:18;;13490:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13452:96;13562:17:::0;;13558:179:::1;;13597:12;1079:6:::0;;13615:47:::1;::::0;-1:-1:-1;;;;;1079:6:0;;;;13644:13;;13597:12;13615:47;13597:12;13615:47;13644:13;1079:6;13615:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13596:66;;;13685:7;13677:48;;;::::0;-1:-1:-1;;;13677:48:0;;15883:2:1;13677:48:0::1;::::0;::::1;15865:21:1::0;15922:2;15902:18;;;15895:30;15961;15941:18;;;15934:58;16009:18;;13677:48:0::1;15681:352:1::0;13558:179:0::1;13302:442;;13248:496::o:0;8907:747::-;-1:-1:-1;;;;;8991:18:0;;8967:7;8991:18;;;:12;:18;;;;;;:23;;8987:37;;-1:-1:-1;9023:1:0;;8907:747;-1:-1:-1;8907:747:0:o;8987:37::-;-1:-1:-1;;;;;9082:19:0;;9045:16;9082:19;;;:13;:19;;;;;;9064:37;;:15;:37;:::i;:::-;9045:56;;9112:19;9151:17;;9134:14;;:34;;;;:::i;:::-;-1:-1:-1;;;;;9226:18:0;;9179:24;9226:18;;;:12;:18;;;;;;9112:56;;-1:-1:-1;9179:24:0;9206:39;;:19;:39::i;:::-;-1:-1:-1;;;;;9305:22:0;;9256:28;9305:22;;;:16;:22;;;;;;9179:66;;-1:-1:-1;9256:28:0;9287:40;;:15;:40;:::i;:::-;9256:71;;9338:22;9363:39;9381:20;9363:17;:39::i;:::-;-1:-1:-1;;;;;9441:18:0;;9423:14;9441:18;;;:12;:18;;;;;;9338:64;;-1:-1:-1;9423:14:0;9488:4;;9476:8;;9441:32;;9462:11;;9441:32;:::i;:::-;:43;;;;:::i;:::-;9440:52;;;;:::i;:::-;9423:69;-1:-1:-1;9557:5:0;9540:14;9512:25;9521:16;9423:69;9512:25;:::i;:::-;:42;;;;:::i;:::-;:50;;;;:::i;:::-;9503:59;;9609:3;9591:15;;9582:6;:24;;;;:::i;:::-;:30;;;;:::i;:::-;9573:39;8907:747;-1:-1:-1;;;;;;;;8907:747:0:o;12874:366::-;1899:1;2045:7;;:19;2037:63;;;;-1:-1:-1;;;2037:63:0;;;;;;;:::i;:::-;1899:1;2111:7;:18;12966:10:::1;12936:14;12953:24:::0;;;:12:::1;:24;::::0;;;;;12996:10;12988:39:::1;;;::::0;-1:-1:-1;;;12988:39:0;;18005:2:1;12988:39:0::1;::::0;::::1;17987:21:1::0;18044:2;18024:18;;;18017:30;-1:-1:-1;;;18063:18:1;;;18056:46;18119:18;;12988:39:0::1;17803:340:1::0;12988:39:0::1;13061:10;13075:1;13048:24:::0;;;:12:::1;:24;::::0;;;;;;;:28;;;13087:16:::1;:28:::0;;;;;;:32;;;;13130:10:::1;::::0;:39;;-1:-1:-1;;;13130:39:0;;::::1;::::0;::::1;9393:51:1::0;;;;9460:18;;;9453:34;;;-1:-1:-1;;;;;13130:10:0::1;::::0;:19:::1;::::0;9366:18:1;;13130:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13195:37:0::1;::::0;160:25:1;;;13213:10:0::1;::::0;13195:37:::1;::::0;148:2:1;133:18;13195:37:0::1;14:177:1::0;19023:1914:0;19088:22;;:::i;:::-;19123:32;;:::i;:::-;-1:-1:-1;;;;;19180:18:0;;;;;;:12;:18;;;;;;:23;;19176:45;;19212:9;19023:1914;-1:-1:-1;;19023:1914:0:o;19176:45::-;-1:-1:-1;;;;;19318:22:0;;19269:28;19318:22;;;:16;:22;;;;;;19300:40;;:15;:40;:::i;:::-;19269:71;;19351:19;19390:17;;19373:14;;:34;;;;:::i;:::-;19351:56;;19483:39;19501:20;19483:17;:39::i;:::-;19456:24;;;:66;-1:-1:-1;;;;;19582:18:0;;;;;;:12;:18;;;;;;19562:39;;:19;:39::i;:::-;19533:26;;;:68;19695:21;19711:4;19695:15;:21::i;:::-;19664:52;;;19756:33;;19787:2;;19756:33;:::i;:::-;19727:26;;;;:62;;;;-1:-1:-1;;;;;19881:18:0;;19860:17;19881:18;;;:12;:18;;;;;;19925:4;;19881:32;;19902:11;;19881:32;:::i;:::-;:40;;19916:5;19881:40;:::i;:::-;19880:49;;;;:::i;:::-;19860:69;;20078:7;20060:15;;20031:9;:26;;;20004:9;:24;;;19992:9;:36;;;;:::i;:::-;:65;;;;:::i;:::-;:83;;;;:::i;:::-;:93;;;;:::i;:::-;19966:23;;;;:119;;;-1:-1:-1;;;;;20207:18:0;;;;;;:12;:18;;;;;;;20168:23;;:29;;20194:3;20168:29;:::i;:::-;:35;;20200:3;20168:35;:::i;:::-;20167:58;;;;:::i;:::-;20142:22;;;:83;20280:23;;;:46;;;20423:10;;20400:33;;20396:507;;;20499:20;20486:10;;:33;;;;:::i;:::-;20450;;;:69;20396:507;;;20564:10;;20541:20;:33;20537:366;;;20640:20;20627:10;;:33;;;;:::i;20537:366::-;20705:10;;20682:20;:33;20678:225;;;20781:20;20768:10;;:33;;;;:::i;20678:225::-;20870:1;20834:33;;;:37;20678:225;-1:-1:-1;20920:9:0;;19023:1914;-1:-1:-1;;;;19023:1914:0:o;1338:201::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1427:22:0;::::1;1419:73;;;::::0;-1:-1:-1;;;1419:73:0;;18350:2:1;1419:73:0::1;::::0;::::1;18332:21:1::0;18389:2;18369:18;;;18362:30;18428:34;18408:18;;;18401:62;-1:-1:-1;;;18479:18:1;;;18472:36;18525:19;;1419:73:0::1;18148:402:1::0;1419:73:0::1;1503:28;1522:8;1503:18;:28::i;:::-;1338:201:::0;:::o;11442:323::-;1152:10;1141:7;1052;1079:6;-1:-1:-1;;;;;1079:6:0;;1006:87;1141:7;-1:-1:-1;;;;;1141:21:0;;1133:66;;;;-1:-1:-1;;;1133:66:0;;;;;;;:::i;:::-;11541:1:::1;11528:10;:14;:52;;;;;11560:20;;11546:10;:34;;11528:52;11520:83;;;::::0;-1:-1:-1;;;11520:83:0;;18757:2:1;11520:83:0::1;::::0;::::1;18739:21:1::0;18796:2;18776:18;;;18769:30;-1:-1:-1;;;18815:18:1;;;18808:48;18873:18;;11520:83:0::1;18555:342:1::0;11520:83:0::1;11638:15;::::0;;11664:28;;;;11708:49:::1;::::0;;2357:25:1;;;2413:2;2398:18;;2391:34;;;11708:49:0::1;::::0;2330:18:1;11708:49:0::1;2183:248:1::0;2828:118:0;2477:7;;;;2635:41;;;;-1:-1:-1;;;2635:41:0;;19104:2:1;2635:41:0;;;19086:21:1;19143:2;19123:18;;;19116:30;-1:-1:-1;;;19162:18:1;;;19155:50;19222:18;;2635:41:0;18902:344:1;2635:41:0;2887:7:::1;:15:::0;;-1:-1:-1;;2887:15:0::1;::::0;;2918:20:::1;::::0;2927:10:::1;1414:51:1::0;;2918:20:0::1;::::0;1402:2:1;1387:18;2918:20:0::1;;;;;;;;2828:118::o:0;1547:191::-;1621:16;1640:6;;-1:-1:-1;;;;;1657:17:0;;;-1:-1:-1;;;;;;1657:17:0;;;;;;1690:40;;1640:6;;;;;;;1690:40;;1621:16;1690:40;1610:128;1547:191;:::o;2704:116::-;2477:7;;;;2544:9;2536:38;;;;-1:-1:-1;;;2536:38:0;;;;;;;:::i;:::-;2764:7:::1;:14:::0;;-1:-1:-1;;2764:14:0::1;2774:4;2764:14;::::0;;2794:18:::1;::::0;2801:10:::1;1414:51:1::0;;2794:18:0::1;::::0;1402:2:1;1387:18;2794::0::1;1255:216:1::0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:248::-;449:6;457;510:2;498:9;489:7;485:23;481:32;478:52;;;526:1;523;516:12;478:52;-1:-1:-1;;549:23:1;;;619:2;604:18;;;591:32;;-1:-1:-1;381:248:1:o;634:173::-;702:20;;-1:-1:-1;;;;;751:31:1;;741:42;;731:70;;797:1;794;787:12;731:70;634:173;;;:::o;812:118::-;898:5;891:13;884:21;877:5;874:32;864:60;;920:1;917;910:12;935:315;1000:6;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1100:29;1119:9;1100:29;:::i;:::-;1090:39;;1179:2;1168:9;1164:18;1151:32;1192:28;1214:5;1192:28;:::i;:::-;1239:5;1229:15;;;935:315;;;;;:::o;1476:186::-;1535:6;1588:2;1576:9;1567:7;1563:23;1559:32;1556:52;;;1604:1;1601;1594:12;1556:52;1627:29;1646:9;1627:29;:::i;:::-;1617:39;1476:186;-1:-1:-1;;;1476:186:1:o;2436:254::-;2504:6;2512;2565:2;2553:9;2544:7;2540:23;2536:32;2533:52;;;2581:1;2578;2571:12;2533:52;2604:29;2623:9;2604:29;:::i;:::-;2594:39;2680:2;2665:18;;;;2652:32;;-1:-1:-1;;;2436:254:1:o;2903:750::-;2995:6;3003;3011;3064:2;3052:9;3043:7;3039:23;3035:32;3032:52;;;3080:1;3077;3070:12;3032:52;3120:9;3107:23;3149:18;3190:2;3182:6;3179:14;3176:34;;;3206:1;3203;3196:12;3176:34;3244:6;3233:9;3229:22;3219:32;;3289:7;3282:4;3278:2;3274:13;3270:27;3260:55;;3311:1;3308;3301:12;3260:55;3351:2;3338:16;3377:2;3369:6;3366:14;3363:34;;;3393:1;3390;3383:12;3363:34;3448:7;3441:4;3431:6;3428:1;3424:14;3420:2;3416:23;3412:34;3409:47;3406:67;;;3469:1;3466;3459:12;3406:67;3500:4;3492:13;;;;-1:-1:-1;3524:6:1;-1:-1:-1;;3565:20:1;;3552:34;3595:28;3552:34;3595:28;:::i;:::-;3642:5;3632:15;;;2903:750;;;;;:::o;4761:184::-;4831:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:52;;;4900:1;4897;4890:12;4852:52;-1:-1:-1;4923:16:1;;4761:184;-1:-1:-1;4761:184:1:o;4950:356::-;5152:2;5134:21;;;5171:18;;;5164:30;5230:34;5225:2;5210:18;;5203:62;5297:2;5282:18;;4950:356::o;7063:355::-;7265:2;7247:21;;;7304:2;7284:18;;;7277:30;7343:33;7338:2;7323:18;;7316:61;7409:2;7394:18;;7063:355::o;7423:340::-;7625:2;7607:21;;;7664:2;7644:18;;;7637:30;-1:-1:-1;;;7698:2:1;7683:18;;7676:46;7754:2;7739:18;;7423:340::o;7768:346::-;7970:2;7952:21;;;8009:2;7989:18;;;7982:30;-1:-1:-1;;;8043:2:1;8028:18;;8021:52;8105:2;8090:18;;7768:346::o;8119:127::-;8180:10;8175:3;8171:20;8168:1;8161:31;8211:4;8208:1;8201:15;8235:4;8232:1;8225:15;8251:125;8316:9;;;8337:10;;;8334:36;;;8350:18;;:::i;9086:128::-;9153:9;;;9174:11;;;9171:37;;;9188:18;;:::i;9498:245::-;9565:6;9618:2;9606:9;9597:7;9593:23;9589:32;9586:52;;;9634:1;9631;9624:12;9586:52;9666:9;9660:16;9685:28;9707:5;9685:28;:::i;10440:217::-;10480:1;10506;10496:132;;10550:10;10545:3;10541:20;10538:1;10531:31;10585:4;10582:1;10575:15;10613:4;10610:1;10603:15;10496:132;-1:-1:-1;10642:9:1;;10440:217::o;10662:168::-;10735:9;;;10766;;10783:15;;;10777:22;;10763:37;10753:71;;10804:18;;:::i;16038:127::-;16099:10;16094:3;16090:20;16087:1;16080:31;16130:4;16127:1;16120:15;16154:4;16151:1;16144:15;16170:135;16209:3;16230:17;;;16227:43;;16250:18;;:::i;:::-;-1:-1:-1;16297:1:1;16286:13;;16170:135::o

Swarm Source

ipfs://ba21a4829fce366c0bed96713925b97ce9755765c1bf0c6d0669141c6e4bae2f

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
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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