More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 320 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 18995863 | 272 days ago | IN | 0 ETH | 0.00189382 | ||||
Claim Reward | 18867570 | 290 days ago | IN | 0 ETH | 0.00118311 | ||||
Deposit | 18866532 | 290 days ago | IN | 0 ETH | 0.00150813 | ||||
Claim Reward | 18866414 | 290 days ago | IN | 0 ETH | 0.00128212 | ||||
Claim Reward | 18857889 | 291 days ago | IN | 0 ETH | 0.00282491 | ||||
Claim Reward | 18857810 | 291 days ago | IN | 0 ETH | 0.00223547 | ||||
Deposit | 18746002 | 307 days ago | IN | 0 ETH | 0.0066535 | ||||
Transfer Ownersh... | 18345366 | 363 days ago | IN | 0 ETH | 0.00015674 | ||||
Claim Reward | 18339885 | 364 days ago | IN | 0 ETH | 0.00059029 | ||||
Withdraw | 18326018 | 366 days ago | IN | 0 ETH | 0.00096928 | ||||
Deposit | 18318265 | 367 days ago | IN | 0 ETH | 0.0006231 | ||||
Claim Reward | 18318263 | 367 days ago | IN | 0 ETH | 0.00046883 | ||||
Claim Reward | 18300993 | 369 days ago | IN | 0 ETH | 0.00049656 | ||||
Withdraw | 18290095 | 371 days ago | IN | 0 ETH | 0.00076498 | ||||
Withdraw | 18290078 | 371 days ago | IN | 0 ETH | 0.00074898 | ||||
Claim Reward | 18290067 | 371 days ago | IN | 0 ETH | 0.00090592 | ||||
Deposit | 18283979 | 372 days ago | IN | 0 ETH | 0.00069177 | ||||
Claim Reward | 18283977 | 372 days ago | IN | 0 ETH | 0.0005878 | ||||
Claim Reward | 18277264 | 372 days ago | IN | 0 ETH | 0.0007948 | ||||
Withdraw | 18272817 | 373 days ago | IN | 0 ETH | 0.00130292 | ||||
Claim Reward | 18272809 | 373 days ago | IN | 0 ETH | 0.00124213 | ||||
Deposit | 18272442 | 373 days ago | IN | 0 ETH | 0.00188492 | ||||
Claim Reward | 18272428 | 373 days ago | IN | 0 ETH | 0.00139111 | ||||
Clear Stuck Toke... | 18261359 | 375 days ago | IN | 0 ETH | 0.00059292 | ||||
Clear Stuck Toke... | 18253730 | 376 days ago | IN | 0 ETH | 0.00039146 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BTMStaking
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-04 */ /** *Submitted for verification at Etherscan.io on 2023-07-05 */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * SAFEMATH LIBRARY */ library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract BTMStaking is ReentrancyGuard,Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public _BTM = IERC20(0x6CD583c99632a1BB761d9BBD8682C6A5ad327087); struct Stake { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } struct AllInfo { uint256 totalStakes; uint256 totalDistributed; uint256 totalRewards; uint256 stakingStart; uint256 stakingEnd; uint256 userStaked; uint256 pendingRewards; uint256 totalClaimed; uint256 stakeTime; uint256 lastClaim; bool earlyWithdraw; } struct BalanceTransaction { uint256 balanceBeforeSend; uint256 balanceAfterSend; } address[] stakeholders; mapping (address => uint256) stakeholderIndexes; mapping (address => uint256) stakeholderClaims; mapping (address => uint256) stakeholderStaking; mapping (address => Stake) public stakes; uint256 public totalStakes; uint256 public totalDistributed; uint256 public totalRewards; uint256 public totalDays = 180 days; // 6 month uint256 public totalDuration = 86400; // 1 day uint256 public dividendsPerStake; uint256 public dividendsPerStakeAccuracyFactor = 10 ** 36; uint256 public stakingStart = 0; uint256 public stakingEnd = 0; uint256 public dividendsCheckPoint; uint256 public earlyWithdrawPenalty = 10; // 10% bool public activePenalty = true; uint256 private _weiDecimal = 18; constructor ( uint256 _totalRewards , uint256 _stakingStart ) payable { totalRewards = _totalRewards; stakingStart = _stakingStart; dividendsCheckPoint = stakingStart; stakingEnd = stakingStart + totalDays; } function deposit(uint256 amount) payable external nonReentrant { require(amount > 0, "No deposit amount"); // require(msg.value == amount, "Amount not match"); require(block.timestamp < stakingEnd, "Staking Ended"); require(block.timestamp >= stakingStart, "Staking Not Started"); uint256 _amount; BalanceTransaction memory balanceTransaction; balanceTransaction.balanceBeforeSend = _BTM.balanceOf(address(this)); _BTM.safeTransferFrom(msg.sender, address(this), _getTokenAmount(address(_BTM),amount)); balanceTransaction.balanceAfterSend = _BTM.balanceOf(address(this)); _amount = balanceTransaction.balanceAfterSend - balanceTransaction.balanceBeforeSend; _amount = _getReverseTokenAmount(address(_BTM),_amount); if(stakes[msg.sender].amount > 0){ distributeReward(msg.sender); } if(stakes[msg.sender].amount == 0){ addStakeholder(msg.sender); } totalStakes = totalStakes.add(_amount); stakes[msg.sender].amount += _amount; stakes[msg.sender].totalExcluded = getCumulativeDividends(stakes[msg.sender].amount); stakeholderStaking[msg.sender] = block.timestamp; updateCumulativeDividends(); } function withdraw(uint256 amount) external nonReentrant { address stakeholder = msg.sender; require(amount > 0, "No withdraw amount"); require(stakes[stakeholder].amount >= amount, "insufficient balance"); distributeReward(stakeholder); totalStakes = totalStakes.sub(amount); stakes[stakeholder].amount -= amount; stakes[stakeholder].totalExcluded = getCumulativeDividends(stakes[stakeholder].amount); if(stakes[stakeholder].amount == 0){ removeStakeholder(stakeholder); } updateCumulativeDividends(); uint256 withdrawAmount = amount; uint256 penaltyFee = 0; if(block.timestamp < (stakingStart + totalDays) && activePenalty){ penaltyFee = (amount * earlyWithdrawPenalty) / 100; withdrawAmount -= penaltyFee; _BTM.safeTransfer(address(0xdead), _getTokenAmount(address(_BTM),penaltyFee)); } _BTM.safeTransfer(msg.sender, _getTokenAmount(address(_BTM),withdrawAmount)); } function distributeReward(address stakeholder) internal { if(stakes[stakeholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(stakeholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); stakeholderClaims[stakeholder] = block.timestamp; stakes[stakeholder].totalRealised = stakes[stakeholder].totalRealised.add(amount); stakes[stakeholder].totalExcluded = getCumulativeDividends(stakes[stakeholder].amount); _BTM.safeTransfer(stakeholder, _getTokenAmount(address(_BTM),amount)); } } function claimReward() external nonReentrant{ distributeReward(msg.sender); } function updateCumulativeDividends() internal { uint256 timestamp = block.timestamp; if(timestamp > stakingEnd){ timestamp = stakingEnd; } uint256 pendingDividendsShare = (timestamp - dividendsCheckPoint) / totalDuration; uint256 rewardPerDay = totalRewards / (totalDays / totalDuration); uint256 valueShare = pendingDividendsShare * rewardPerDay; dividendsPerStake = dividendsPerStake.add(dividendsPerStakeAccuracyFactor.mul(valueShare).div(totalStakes)); if (pendingDividendsShare > 0) { dividendsCheckPoint += timestamp - dividendsCheckPoint; } } function getCumulativeDividends(uint256 stake) internal view returns (uint256) { uint256 timestamp = block.timestamp; if(timestamp > stakingEnd){ timestamp = stakingEnd; } uint256 pendingDividendsShare = (timestamp - dividendsCheckPoint) / totalDuration; uint256 rewardPerDay = (totalRewards / (totalDays / totalDuration)); uint256 valueShare = pendingDividendsShare * rewardPerDay; // timestamp - dividendsCheckPoint = time passed since last update / uint256 _dividendsPerStake = dividendsPerStake.add(dividendsPerStakeAccuracyFactor.mul(valueShare).div(totalStakes)); return stake.mul(_dividendsPerStake).div(dividendsPerStakeAccuracyFactor); } function getUnpaidEarnings(address stakeholder) public view returns (uint256) { if(stakes[stakeholder].amount == 0){ return 0; } uint256 stakeholderTotalDividends = getCumulativeDividends(stakes[stakeholder].amount); uint256 stakeholderTotalExcluded = stakes[stakeholder].totalExcluded; if(stakeholderTotalDividends <= stakeholderTotalExcluded){ return 0; } return stakeholderTotalDividends.sub(stakeholderTotalExcluded); } function addStakeholder(address stakeholder) internal { stakeholderIndexes[stakeholder] = stakeholders.length; stakeholders.push(stakeholder); } function removeStakeholder(address stakeholder) internal { stakeholders[stakeholderIndexes[stakeholder]] = stakeholders[stakeholders.length-1]; stakeholderIndexes[stakeholders[stakeholders.length-1]] = stakeholderIndexes[stakeholder]; stakeholders.pop(); } function setActivePenalty(bool _activePenalty) external onlyOwner{ activePenalty = _activePenalty; } function getAllInfo(address user) public view returns (AllInfo memory) { return AllInfo( totalStakes, totalDistributed, totalRewards, stakingStart, stakingEnd, stakes[user].amount, getUnpaidEarnings(user), stakes[user].totalRealised, stakeholderStaking[user], stakeholderClaims[user], block.timestamp < (stakingStart + totalDays * totalDuration) ); } function clearStuckBalance() external onlyOwner { uint256 amount = address(this).balance; payable(msg.sender).transfer(amount); } function clearStuckToken(address TokenAddress, uint256 amount) external onlyOwner { IERC20(TokenAddress).safeTransfer(msg.sender, _getTokenAmount(TokenAddress, amount)); } function _getTokenAmount(address _tokenAddress, uint256 _amount) internal view returns (uint256 quotient) { IERC20 tokenAddress = IERC20(_tokenAddress); uint256 tokenDecimal = tokenAddress.decimals(); uint256 decimalDiff = 0; uint256 decimalDiffConverter = 0; uint256 amount = 0; if(_weiDecimal != tokenDecimal){ if(_weiDecimal > tokenDecimal){ decimalDiff = _weiDecimal - tokenDecimal; decimalDiffConverter = 10**decimalDiff; amount = _amount.div(decimalDiffConverter); } else { decimalDiff = tokenDecimal - _weiDecimal; decimalDiffConverter = 10**decimalDiff; amount = _amount.mul(decimalDiffConverter); } } else { amount = _amount; } uint256 _quotient = amount; return (_quotient); } function _getReverseTokenAmount(address _tokenAddress, uint256 _amount) internal view returns (uint256 quotient) { IERC20 tokenAddress = IERC20(_tokenAddress); uint256 tokenDecimal = tokenAddress.decimals(); uint256 decimalDiff = 0; uint256 decimalDiffConverter = 0; uint256 amount = 0; if(_weiDecimal != tokenDecimal){ if(_weiDecimal > tokenDecimal){ decimalDiff = _weiDecimal - tokenDecimal; decimalDiffConverter = 10**decimalDiff; amount = _amount.mul(decimalDiffConverter); } else { decimalDiff = tokenDecimal - _weiDecimal; decimalDiffConverter = 10**decimalDiff; amount = _amount.div(decimalDiffConverter); } } else { amount = _amount; } uint256 _quotient = amount; return (_quotient); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_totalRewards","type":"uint256"},{"internalType":"uint256","name":"_stakingStart","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_BTM","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activePenalty","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"TokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dividendsCheckPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerStakeAccuracyFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyWithdrawPenalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAllInfo","outputs":[{"components":[{"internalType":"uint256","name":"totalStakes","type":"uint256"},{"internalType":"uint256","name":"totalDistributed","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"stakingStart","type":"uint256"},{"internalType":"uint256","name":"stakingEnd","type":"uint256"},{"internalType":"uint256","name":"userStaked","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"lastClaim","type":"uint256"},{"internalType":"bool","name":"earlyWithdraw","type":"bool"}],"internalType":"struct BTMStaking.AllInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakeholder","type":"address"}],"name":"getUnpaidEarnings","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_activePenalty","type":"bool"}],"name":"setActivePenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakes","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052736cd583c99632a1bb761d9bbd8682c6a5ad327087600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062ed4e00600b5562015180600c556ec097ce7bc90715b34b9f1000000000600e556000600f556000601055600a6012556001601360006101000a81548160ff02191690831515021790555060126014556040516200372f3803806200372f8339818101604052810190620000ce9190620001ef565b6001600081905550600033905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600a8190555080600f81905550600f54601181905550600b54600f54620001a1919062000265565b6010819055505050620002c2565b600080fd5b6000819050919050565b620001c981620001b4565b8114620001d557600080fd5b50565b600081519050620001e981620001be565b92915050565b60008060408385031215620002095762000208620001af565b5b60006200021985828601620001d8565b92505060206200022c85828601620001d8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200027282620001b4565b91506200027f83620001b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620002b757620002b662000236565b5b828201905092915050565b61345d80620002d26000396000f3fe6080604052600436106101665760003560e01c80637e16c30c116100d1578063bf9befb11161008a578063d771b0a611610064578063d771b0a6146104d9578063efca2eed14610504578063f0ad91ff1461052f578063f2fde38b1461055a57610166565b8063bf9befb114610458578063d29004d914610483578063d2f6b52c146104ae57610166565b80637e16c30c146103675780638af6c259146103a45780638da5cb5b146103cf578063b6b55f25146103fa578063b88a802f14610416578063bed1df491461042d57610166565b8063364333f411610123578063364333f4146102915780634c3b7c19146102a8578063517d0411146102d35780635e56fce8146102fe578063715018a61461032757806377b54bad1461033e57610166565b8063078e36491461016b5780630e15561a1461019657806316934fc4146101c157806328fd3198146102005780632e1a7d4d1461023d57806330c36ef714610266575b600080fd5b34801561017757600080fd5b50610180610583565b60405161018d9190612596565b60405180910390f35b3480156101a257600080fd5b506101ab610589565b6040516101b89190612596565b60405180910390f35b3480156101cd57600080fd5b506101e860048036038101906101e39190612614565b61058f565b6040516101f793929190612641565b60405180910390f35b34801561020c57600080fd5b5061022760048036038101906102229190612614565b6105b9565b6040516102349190612596565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f91906126a4565b6106d3565b005b34801561027257600080fd5b5061027b610aba565b6040516102889190612596565b60405180910390f35b34801561029d57600080fd5b506102a6610ac0565b005b3480156102b457600080fd5b506102bd610b9f565b6040516102ca9190612596565b60405180910390f35b3480156102df57600080fd5b506102e8610ba5565b6040516102f59190612596565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612709565b610bab565b005b34801561033357600080fd5b5061033c610c58565b005b34801561034a57600080fd5b5061036560048036038101906103609190612736565b610da9565b005b34801561037357600080fd5b5061038e60048036038101906103899190612614565b610e71565b60405161039b9190612875565b60405180910390f35b3480156103b057600080fd5b506103b9611000565b6040516103c69190612596565b60405180910390f35b3480156103db57600080fd5b506103e4611006565b6040516103f191906128a0565b60405180910390f35b610414600480360381019061040f91906126a4565b611030565b005b34801561042257600080fd5b5061042b611582565b005b34801561043957600080fd5b506104426115e3565b60405161044f919061291a565b60405180910390f35b34801561046457600080fd5b5061046d611609565b60405161047a9190612596565b60405180910390f35b34801561048f57600080fd5b5061049861160f565b6040516104a59190612596565b60405180910390f35b3480156104ba57600080fd5b506104c3611615565b6040516104d09190612596565b60405180910390f35b3480156104e557600080fd5b506104ee61161b565b6040516104fb9190612596565b60405180910390f35b34801561051057600080fd5b50610519611621565b6040516105269190612596565b60405180910390f35b34801561053b57600080fd5b50610544611627565b6040516105519190612944565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612614565b61163a565b005b600b5481565b600a5481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561060e57600090506106ce565b600061065b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106b6576000925050506106ce565b6106c981836118d490919063ffffffff16565b925050505b919050565b60026000541415610719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610710906129bc565b60405180910390fd5b6002600081905550600033905060008211610769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076090612a28565b60405180910390fd5b81600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410156107ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e590612a94565b60405180910390fd5b6107f7816118ea565b61080c826008546118d490919063ffffffff16565b60088190555081600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546108649190612ae3565b925050819055506108b6600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156109515761095081611b59565b5b610959611d60565b60008290506000600b54600f546109709190612b17565b4210801561098a5750601360009054906101000a900460ff165b15610a345760646012548561099f9190612b6d565b6109a99190612bf6565b905080826109b79190612ae3565b9150610a3361dead6109eb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b5b610aac33610a64600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b505050600160008190555050565b600d5481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4790612c73565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b9b573d6000803e3d6000fd5b5050565b600e5481565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290612c73565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090612c73565b60405180910390fd5b610e6d33610e478484611e3e565b8473ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b5050565b610e79612507565b60405180610160016040528060085481526020016009548152602001600a548152602001600f5481526020016010548152602001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548152602001610efe846105b9565b8152602001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201548152602001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548152602001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548152602001600c54600b54610fe59190612b6d565b600f54610ff29190612b17565b421015158152509050919050565b600c5481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026000541415611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d906129bc565b60405180910390fd5b6002600081905550600081116110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890612cdf565b60405180910390fd5b6010544210611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90612d4b565b60405180910390fd5b600f5442101561114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190612db7565b60405180910390fd5b6000611154612563565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111af91906128a0565b60206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff9190612dec565b8160000181815250506112823330611239600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ff2909392919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112dd91906128a0565b60206040518083038186803b1580156112f557600080fd5b505afa158015611309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132d9190612dec565b8160200181815250508060000151816020015161134a9190612ae3565b9150611378600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361207b565b91506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156113cf576113ce336118ea565b5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561142457611423336121a9565b5b6114398260085461225890919063ffffffff16565b60088190555081600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546114919190612b17565b925050819055506114e3600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611575611d60565b5050600160008190555050565b600260005414156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf906129bc565b60405180910390fd5b60026000819055506115d9336118ea565b6001600081905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60125481565b60115481565b600f5481565b60095481565b601360009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190612c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190612e8b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000804290506010548111156118105760105490505b6000600c54601154836118239190612ae3565b61182d9190612bf6565b90506000600c54600b546118419190612bf6565b600a5461184e9190612bf6565b90506000818361185e9190612b6d565b9050600061189f61188e60085461188085600e5461226e90919063ffffffff16565b61228490919063ffffffff16565b600d5461225890919063ffffffff16565b90506118c8600e546118ba838a61226e90919063ffffffff16565b61228490919063ffffffff16565b95505050505050919050565b600081836118e29190612ae3565b905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561193a57611b56565b6000611945826105b9565b90506000811115611b54576119658160095461225890919063ffffffff16565b60098190555042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a0481600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461225890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611a95600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611b5382611b0b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b5b505b50565b60036001600380549050611b6d9190612ae3565b81548110611b7e57611b7d612eab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611bfc57611bfb612eab565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546004600060036001600380549050611c9c9190612ae3565b81548110611cad57611cac612eab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003805480611d2857611d27612eda565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000429050601054811115611d755760105490505b6000600c5460115483611d889190612ae3565b611d929190612bf6565b90506000600c54600b54611da69190612bf6565b600a54611db39190612bf6565b905060008183611dc39190612b6d565b9050611e02611df1600854611de384600e5461226e90919063ffffffff16565b61228490919063ffffffff16565b600d5461225890919063ffffffff16565b600d819055506000831115611e385760115484611e1f9190612ae3565b60116000828254611e309190612b17565b925050819055505b50505050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8c57600080fd5b505afa158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec49190612f42565b60ff16905060008060008360145414611f5457836014541115611f1a5783601454611eef9190612ae3565b925082600a611efe91906130a2565b9150611f13828861228490919063ffffffff16565b9050611f4f565b60145484611f289190612ae3565b925082600a611f3791906130a2565b9150611f4c828861226e90919063ffffffff16565b90505b611f58565b8690505b600081905080965050505050505092915050565b611fed8363a9059cbb60e01b8484604051602401611f8b9291906130ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061229a565b505050565b612075846323b872dd60e01b85858560405160240161201393929190613116565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061229a565b50505050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156120c957600080fd5b505afa1580156120dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121019190612f42565b60ff1690506000806000836014541461219157836014541115612157578360145461212c9190612ae3565b925082600a61213b91906130a2565b9150612150828861226e90919063ffffffff16565b905061218c565b601454846121659190612ae3565b925082600a61217491906130a2565b9150612189828861228490919063ffffffff16565b90505b612195565b8690505b600081905080965050505050505092915050565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836122669190612b17565b905092915050565b6000818361227c9190612b6d565b905092915050565b600081836122929190612bf6565b905092915050565b60006122fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123619092919063ffffffff16565b905060008151111561235c578080602001905181019061231c9190613162565b61235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290613201565b60405180910390fd5b5b505050565b60606123708484600085612379565b90509392505050565b6060824710156123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590613293565b60405180910390fd5b6123c78561248d565b612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd906132ff565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161242f9190613399565b60006040518083038185875af1925050503d806000811461246c576040519150601f19603f3d011682016040523d82523d6000602084013e612471565b606091505b50915091506124818282866124a0565b92505050949350505050565b600080823b905060008111915050919050565b606083156124b057829050612500565b6000835111156124c35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f79190613405565b60405180910390fd5b9392505050565b604051806101600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b604051806040016040528060008152602001600081525090565b6000819050919050565b6125908161257d565b82525050565b60006020820190506125ab6000830184612587565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125e1826125b6565b9050919050565b6125f1816125d6565b81146125fc57600080fd5b50565b60008135905061260e816125e8565b92915050565b60006020828403121561262a576126296125b1565b5b6000612638848285016125ff565b91505092915050565b60006060820190506126566000830186612587565b6126636020830185612587565b6126706040830184612587565b949350505050565b6126818161257d565b811461268c57600080fd5b50565b60008135905061269e81612678565b92915050565b6000602082840312156126ba576126b96125b1565b5b60006126c88482850161268f565b91505092915050565b60008115159050919050565b6126e6816126d1565b81146126f157600080fd5b50565b600081359050612703816126dd565b92915050565b60006020828403121561271f5761271e6125b1565b5b600061272d848285016126f4565b91505092915050565b6000806040838503121561274d5761274c6125b1565b5b600061275b858286016125ff565b925050602061276c8582860161268f565b9150509250929050565b61277f8161257d565b82525050565b61278e816126d1565b82525050565b610160820160008201516127ab6000850182612776565b5060208201516127be6020850182612776565b5060408201516127d16040850182612776565b5060608201516127e46060850182612776565b5060808201516127f76080850182612776565b5060a082015161280a60a0850182612776565b5060c082015161281d60c0850182612776565b5060e082015161283060e0850182612776565b50610100820151612845610100850182612776565b5061012082015161285a610120850182612776565b5061014082015161286f610140850182612785565b50505050565b60006101608201905061288b6000830184612794565b92915050565b61289a816125d6565b82525050565b60006020820190506128b56000830184612891565b92915050565b6000819050919050565b60006128e06128db6128d6846125b6565b6128bb565b6125b6565b9050919050565b60006128f2826128c5565b9050919050565b6000612904826128e7565b9050919050565b612914816128f9565b82525050565b600060208201905061292f600083018461290b565b92915050565b61293e816126d1565b82525050565b60006020820190506129596000830184612935565b92915050565b600082825260208201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006129a6601f8361295f565b91506129b182612970565b602082019050919050565b600060208201905081810360008301526129d581612999565b9050919050565b7f4e6f20776974686472617720616d6f756e740000000000000000000000000000600082015250565b6000612a1260128361295f565b9150612a1d826129dc565b602082019050919050565b60006020820190508181036000830152612a4181612a05565b9050919050565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000612a7e60148361295f565b9150612a8982612a48565b602082019050919050565b60006020820190508181036000830152612aad81612a71565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612aee8261257d565b9150612af98361257d565b925082821015612b0c57612b0b612ab4565b5b828203905092915050565b6000612b228261257d565b9150612b2d8361257d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b6257612b61612ab4565b5b828201905092915050565b6000612b788261257d565b9150612b838361257d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bbc57612bbb612ab4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c018261257d565b9150612c0c8361257d565b925082612c1c57612c1b612bc7565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c5d60208361295f565b9150612c6882612c27565b602082019050919050565b60006020820190508181036000830152612c8c81612c50565b9050919050565b7f4e6f206465706f73697420616d6f756e74000000000000000000000000000000600082015250565b6000612cc960118361295f565b9150612cd482612c93565b602082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f5374616b696e6720456e64656400000000000000000000000000000000000000600082015250565b6000612d35600d8361295f565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b7f5374616b696e67204e6f74205374617274656400000000000000000000000000600082015250565b6000612da160138361295f565b9150612dac82612d6b565b602082019050919050565b60006020820190508181036000830152612dd081612d94565b9050919050565b600081519050612de681612678565b92915050565b600060208284031215612e0257612e016125b1565b5b6000612e1084828501612dd7565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e7560268361295f565b9150612e8082612e19565b604082019050919050565b60006020820190508181036000830152612ea481612e68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060ff82169050919050565b612f1f81612f09565b8114612f2a57600080fd5b50565b600081519050612f3c81612f16565b92915050565b600060208284031215612f5857612f576125b1565b5b6000612f6684828501612f2d565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115612fc657808604811115612fa257612fa1612ab4565b5b6001851615612fb15780820291505b8081029050612fbf85612f6f565b9450612f86565b94509492505050565b600082612fdf576001905061309b565b81612fed576000905061309b565b8160018114613003576002811461300d5761303c565b600191505061309b565b60ff84111561301f5761301e612ab4565b5b8360020a91508482111561303657613035612ab4565b5b5061309b565b5060208310610133831016604e8410600b84101617156130715782820a90508381111561306c5761306b612ab4565b5b61309b565b61307e8484846001612f7c565b9250905081840481111561309557613094612ab4565b5b81810290505b9392505050565b60006130ad8261257d565b91506130b88361257d565b92506130e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612fcf565b905092915050565b60006040820190506131026000830185612891565b61310f6020830184612587565b9392505050565b600060608201905061312b6000830186612891565b6131386020830185612891565b6131456040830184612587565b949350505050565b60008151905061315c816126dd565b92915050565b600060208284031215613178576131776125b1565b5b60006131868482850161314d565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006131eb602a8361295f565b91506131f68261318f565b604082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061327d60268361295f565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006132e9601d8361295f565b91506132f4826132b3565b602082019050919050565b60006020820190508181036000830152613318816132dc565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613353578082015181840152602081019050613338565b83811115613362576000848401525b50505050565b60006133738261331f565b61337d818561332a565b935061338d818560208601613335565b80840191505092915050565b60006133a58284613368565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b60006133d7826133b0565b6133e1818561295f565b93506133f1818560208601613335565b6133fa816133bb565b840191505092915050565b6000602082019050818103600083015261341f81846133cc565b90509291505056fea2646970667358221220cf4693a45a0f7750af47cef275cf47f8b323dcc9c19bd16d8ec1be12f79ea0d864736f6c6343000809003300000000000000000000000000000000000000000001a784379d99db420000000000000000000000000000000000000000000000000000000000000064cc69b0
Deployed Bytecode
0x6080604052600436106101665760003560e01c80637e16c30c116100d1578063bf9befb11161008a578063d771b0a611610064578063d771b0a6146104d9578063efca2eed14610504578063f0ad91ff1461052f578063f2fde38b1461055a57610166565b8063bf9befb114610458578063d29004d914610483578063d2f6b52c146104ae57610166565b80637e16c30c146103675780638af6c259146103a45780638da5cb5b146103cf578063b6b55f25146103fa578063b88a802f14610416578063bed1df491461042d57610166565b8063364333f411610123578063364333f4146102915780634c3b7c19146102a8578063517d0411146102d35780635e56fce8146102fe578063715018a61461032757806377b54bad1461033e57610166565b8063078e36491461016b5780630e15561a1461019657806316934fc4146101c157806328fd3198146102005780632e1a7d4d1461023d57806330c36ef714610266575b600080fd5b34801561017757600080fd5b50610180610583565b60405161018d9190612596565b60405180910390f35b3480156101a257600080fd5b506101ab610589565b6040516101b89190612596565b60405180910390f35b3480156101cd57600080fd5b506101e860048036038101906101e39190612614565b61058f565b6040516101f793929190612641565b60405180910390f35b34801561020c57600080fd5b5061022760048036038101906102229190612614565b6105b9565b6040516102349190612596565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f91906126a4565b6106d3565b005b34801561027257600080fd5b5061027b610aba565b6040516102889190612596565b60405180910390f35b34801561029d57600080fd5b506102a6610ac0565b005b3480156102b457600080fd5b506102bd610b9f565b6040516102ca9190612596565b60405180910390f35b3480156102df57600080fd5b506102e8610ba5565b6040516102f59190612596565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612709565b610bab565b005b34801561033357600080fd5b5061033c610c58565b005b34801561034a57600080fd5b5061036560048036038101906103609190612736565b610da9565b005b34801561037357600080fd5b5061038e60048036038101906103899190612614565b610e71565b60405161039b9190612875565b60405180910390f35b3480156103b057600080fd5b506103b9611000565b6040516103c69190612596565b60405180910390f35b3480156103db57600080fd5b506103e4611006565b6040516103f191906128a0565b60405180910390f35b610414600480360381019061040f91906126a4565b611030565b005b34801561042257600080fd5b5061042b611582565b005b34801561043957600080fd5b506104426115e3565b60405161044f919061291a565b60405180910390f35b34801561046457600080fd5b5061046d611609565b60405161047a9190612596565b60405180910390f35b34801561048f57600080fd5b5061049861160f565b6040516104a59190612596565b60405180910390f35b3480156104ba57600080fd5b506104c3611615565b6040516104d09190612596565b60405180910390f35b3480156104e557600080fd5b506104ee61161b565b6040516104fb9190612596565b60405180910390f35b34801561051057600080fd5b50610519611621565b6040516105269190612596565b60405180910390f35b34801561053b57600080fd5b50610544611627565b6040516105519190612944565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612614565b61163a565b005b600b5481565b600a5481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561060e57600090506106ce565b600061065b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106b6576000925050506106ce565b6106c981836118d490919063ffffffff16565b925050505b919050565b60026000541415610719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610710906129bc565b60405180910390fd5b6002600081905550600033905060008211610769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076090612a28565b60405180910390fd5b81600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410156107ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e590612a94565b60405180910390fd5b6107f7816118ea565b61080c826008546118d490919063ffffffff16565b60088190555081600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546108649190612ae3565b925050819055506108b6600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156109515761095081611b59565b5b610959611d60565b60008290506000600b54600f546109709190612b17565b4210801561098a5750601360009054906101000a900460ff165b15610a345760646012548561099f9190612b6d565b6109a99190612bf6565b905080826109b79190612ae3565b9150610a3361dead6109eb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b5b610aac33610a64600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b505050600160008190555050565b600d5481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4790612c73565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b9b573d6000803e3d6000fd5b5050565b600e5481565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290612c73565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090612c73565b60405180910390fd5b610e6d33610e478484611e3e565b8473ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b5050565b610e79612507565b60405180610160016040528060085481526020016009548152602001600a548152602001600f5481526020016010548152602001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548152602001610efe846105b9565b8152602001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201548152602001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548152602001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548152602001600c54600b54610fe59190612b6d565b600f54610ff29190612b17565b421015158152509050919050565b600c5481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026000541415611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d906129bc565b60405180910390fd5b6002600081905550600081116110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890612cdf565b60405180910390fd5b6010544210611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90612d4b565b60405180910390fd5b600f5442101561114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190612db7565b60405180910390fd5b6000611154612563565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111af91906128a0565b60206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff9190612dec565b8160000181815250506112823330611239600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ff2909392919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112dd91906128a0565b60206040518083038186803b1580156112f557600080fd5b505afa158015611309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132d9190612dec565b8160200181815250508060000151816020015161134a9190612ae3565b9150611378600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361207b565b91506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156113cf576113ce336118ea565b5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561142457611423336121a9565b5b6114398260085461225890919063ffffffff16565b60088190555081600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546114919190612b17565b925050819055506114e3600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611575611d60565b5050600160008190555050565b600260005414156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf906129bc565b60405180910390fd5b60026000819055506115d9336118ea565b6001600081905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60125481565b60115481565b600f5481565b60095481565b601360009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190612c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190612e8b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000804290506010548111156118105760105490505b6000600c54601154836118239190612ae3565b61182d9190612bf6565b90506000600c54600b546118419190612bf6565b600a5461184e9190612bf6565b90506000818361185e9190612b6d565b9050600061189f61188e60085461188085600e5461226e90919063ffffffff16565b61228490919063ffffffff16565b600d5461225890919063ffffffff16565b90506118c8600e546118ba838a61226e90919063ffffffff16565b61228490919063ffffffff16565b95505050505050919050565b600081836118e29190612ae3565b905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561193a57611b56565b6000611945826105b9565b90506000811115611b54576119658160095461225890919063ffffffff16565b60098190555042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a0481600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461225890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611a95600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117fa565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611b5382611b0b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e3e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f6c9092919063ffffffff16565b5b505b50565b60036001600380549050611b6d9190612ae3565b81548110611b7e57611b7d612eab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611bfc57611bfb612eab565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546004600060036001600380549050611c9c9190612ae3565b81548110611cad57611cac612eab565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003805480611d2857611d27612eda565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000429050601054811115611d755760105490505b6000600c5460115483611d889190612ae3565b611d929190612bf6565b90506000600c54600b54611da69190612bf6565b600a54611db39190612bf6565b905060008183611dc39190612b6d565b9050611e02611df1600854611de384600e5461226e90919063ffffffff16565b61228490919063ffffffff16565b600d5461225890919063ffffffff16565b600d819055506000831115611e385760115484611e1f9190612ae3565b60116000828254611e309190612b17565b925050819055505b50505050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8c57600080fd5b505afa158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec49190612f42565b60ff16905060008060008360145414611f5457836014541115611f1a5783601454611eef9190612ae3565b925082600a611efe91906130a2565b9150611f13828861228490919063ffffffff16565b9050611f4f565b60145484611f289190612ae3565b925082600a611f3791906130a2565b9150611f4c828861226e90919063ffffffff16565b90505b611f58565b8690505b600081905080965050505050505092915050565b611fed8363a9059cbb60e01b8484604051602401611f8b9291906130ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061229a565b505050565b612075846323b872dd60e01b85858560405160240161201393929190613116565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061229a565b50505050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156120c957600080fd5b505afa1580156120dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121019190612f42565b60ff1690506000806000836014541461219157836014541115612157578360145461212c9190612ae3565b925082600a61213b91906130a2565b9150612150828861226e90919063ffffffff16565b905061218c565b601454846121659190612ae3565b925082600a61217491906130a2565b9150612189828861228490919063ffffffff16565b90505b612195565b8690505b600081905080965050505050505092915050565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081836122669190612b17565b905092915050565b6000818361227c9190612b6d565b905092915050565b600081836122929190612bf6565b905092915050565b60006122fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123619092919063ffffffff16565b905060008151111561235c578080602001905181019061231c9190613162565b61235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290613201565b60405180910390fd5b5b505050565b60606123708484600085612379565b90509392505050565b6060824710156123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590613293565b60405180910390fd5b6123c78561248d565b612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd906132ff565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161242f9190613399565b60006040518083038185875af1925050503d806000811461246c576040519150601f19603f3d011682016040523d82523d6000602084013e612471565b606091505b50915091506124818282866124a0565b92505050949350505050565b600080823b905060008111915050919050565b606083156124b057829050612500565b6000835111156124c35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f79190613405565b60405180910390fd5b9392505050565b604051806101600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b604051806040016040528060008152602001600081525090565b6000819050919050565b6125908161257d565b82525050565b60006020820190506125ab6000830184612587565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125e1826125b6565b9050919050565b6125f1816125d6565b81146125fc57600080fd5b50565b60008135905061260e816125e8565b92915050565b60006020828403121561262a576126296125b1565b5b6000612638848285016125ff565b91505092915050565b60006060820190506126566000830186612587565b6126636020830185612587565b6126706040830184612587565b949350505050565b6126818161257d565b811461268c57600080fd5b50565b60008135905061269e81612678565b92915050565b6000602082840312156126ba576126b96125b1565b5b60006126c88482850161268f565b91505092915050565b60008115159050919050565b6126e6816126d1565b81146126f157600080fd5b50565b600081359050612703816126dd565b92915050565b60006020828403121561271f5761271e6125b1565b5b600061272d848285016126f4565b91505092915050565b6000806040838503121561274d5761274c6125b1565b5b600061275b858286016125ff565b925050602061276c8582860161268f565b9150509250929050565b61277f8161257d565b82525050565b61278e816126d1565b82525050565b610160820160008201516127ab6000850182612776565b5060208201516127be6020850182612776565b5060408201516127d16040850182612776565b5060608201516127e46060850182612776565b5060808201516127f76080850182612776565b5060a082015161280a60a0850182612776565b5060c082015161281d60c0850182612776565b5060e082015161283060e0850182612776565b50610100820151612845610100850182612776565b5061012082015161285a610120850182612776565b5061014082015161286f610140850182612785565b50505050565b60006101608201905061288b6000830184612794565b92915050565b61289a816125d6565b82525050565b60006020820190506128b56000830184612891565b92915050565b6000819050919050565b60006128e06128db6128d6846125b6565b6128bb565b6125b6565b9050919050565b60006128f2826128c5565b9050919050565b6000612904826128e7565b9050919050565b612914816128f9565b82525050565b600060208201905061292f600083018461290b565b92915050565b61293e816126d1565b82525050565b60006020820190506129596000830184612935565b92915050565b600082825260208201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006129a6601f8361295f565b91506129b182612970565b602082019050919050565b600060208201905081810360008301526129d581612999565b9050919050565b7f4e6f20776974686472617720616d6f756e740000000000000000000000000000600082015250565b6000612a1260128361295f565b9150612a1d826129dc565b602082019050919050565b60006020820190508181036000830152612a4181612a05565b9050919050565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000612a7e60148361295f565b9150612a8982612a48565b602082019050919050565b60006020820190508181036000830152612aad81612a71565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612aee8261257d565b9150612af98361257d565b925082821015612b0c57612b0b612ab4565b5b828203905092915050565b6000612b228261257d565b9150612b2d8361257d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b6257612b61612ab4565b5b828201905092915050565b6000612b788261257d565b9150612b838361257d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bbc57612bbb612ab4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c018261257d565b9150612c0c8361257d565b925082612c1c57612c1b612bc7565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c5d60208361295f565b9150612c6882612c27565b602082019050919050565b60006020820190508181036000830152612c8c81612c50565b9050919050565b7f4e6f206465706f73697420616d6f756e74000000000000000000000000000000600082015250565b6000612cc960118361295f565b9150612cd482612c93565b602082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f5374616b696e6720456e64656400000000000000000000000000000000000000600082015250565b6000612d35600d8361295f565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b7f5374616b696e67204e6f74205374617274656400000000000000000000000000600082015250565b6000612da160138361295f565b9150612dac82612d6b565b602082019050919050565b60006020820190508181036000830152612dd081612d94565b9050919050565b600081519050612de681612678565b92915050565b600060208284031215612e0257612e016125b1565b5b6000612e1084828501612dd7565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e7560268361295f565b9150612e8082612e19565b604082019050919050565b60006020820190508181036000830152612ea481612e68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060ff82169050919050565b612f1f81612f09565b8114612f2a57600080fd5b50565b600081519050612f3c81612f16565b92915050565b600060208284031215612f5857612f576125b1565b5b6000612f6684828501612f2d565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115612fc657808604811115612fa257612fa1612ab4565b5b6001851615612fb15780820291505b8081029050612fbf85612f6f565b9450612f86565b94509492505050565b600082612fdf576001905061309b565b81612fed576000905061309b565b8160018114613003576002811461300d5761303c565b600191505061309b565b60ff84111561301f5761301e612ab4565b5b8360020a91508482111561303657613035612ab4565b5b5061309b565b5060208310610133831016604e8410600b84101617156130715782820a90508381111561306c5761306b612ab4565b5b61309b565b61307e8484846001612f7c565b9250905081840481111561309557613094612ab4565b5b81810290505b9392505050565b60006130ad8261257d565b91506130b88361257d565b92506130e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612fcf565b905092915050565b60006040820190506131026000830185612891565b61310f6020830184612587565b9392505050565b600060608201905061312b6000830186612891565b6131386020830185612891565b6131456040830184612587565b949350505050565b60008151905061315c816126dd565b92915050565b600060208284031215613178576131776125b1565b5b60006131868482850161314d565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006131eb602a8361295f565b91506131f68261318f565b604082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061327d60268361295f565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006132e9601d8361295f565b91506132f4826132b3565b602082019050919050565b60006020820190508181036000830152613318816132dc565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613353578082015181840152602081019050613338565b83811115613362576000848401525b50505050565b60006133738261331f565b61337d818561332a565b935061338d818560208601613335565b80840191505092915050565b60006133a58284613368565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b60006133d7826133b0565b6133e1818561295f565b93506133f1818560208601613335565b6133fa816133bb565b840191505092915050565b6000602082019050818103600083015261341f81846133cc565b90509291505056fea2646970667358221220cf4693a45a0f7750af47cef275cf47f8b323dcc9c19bd16d8ec1be12f79ea0d864736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000001a784379d99db420000000000000000000000000000000000000000000000000000000000000064cc69b0
-----Decoded View---------------
Arg [0] : _totalRewards (uint256): 2000000000000000000000000
Arg [1] : _stakingStart (uint256): 1691118000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000064cc69b0
Deployed Bytecode Sourcemap
20879:9723:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22022:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21988:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21868:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;27070:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23983:987;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22127:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28673:152;;;;;;;;;;;;;:::i;:::-;;22166:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22265:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28026:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20472:148;;;;;;;;;;;;;:::i;:::-;;28831:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28149:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22075:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20260:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22714:1261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25603:91;;;;;;;;;;;;;:::i;:::-;;20995:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21917:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22345:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22301:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22230:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21950;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22396:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20628:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22022:35;;;;:::o;21988:27::-;;;;:::o;21868:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27070:479::-;27139:7;27192:1;27162:6;:19;27169:11;27162:19;;;;;;;;;;;;;;;:26;;;:31;27159:48;;;27203:1;27196:8;;;;27159:48;27219:33;27255:50;27278:6;:19;27285:11;27278:19;;;;;;;;;;;;;;;:26;;;27255:22;:50::i;:::-;27219:86;;27316:32;27351:6;:19;27358:11;27351:19;;;;;;;;;;;;;;;:33;;;27316:68;;27429:24;27400:25;:53;27397:70;;27463:1;27456:8;;;;;;27397:70;27486:55;27516:24;27486:25;:29;;:55;;;;:::i;:::-;27479:62;;;;27070:479;;;;:::o;23983:987::-;18997:1;19595:7;;:19;;19587:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;18997:1;19728:7;:18;;;;24044:19:::1;24066:10;24044:32;;24102:1;24093:6;:10;24085:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;24175:6;24145;:19;24152:11;24145:19;;;;;;;;;;;;;;;:26;;;:36;;24137:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24215:29;24232:11;24215:16;:29::i;:::-;24267:23;24283:6;24267:11;;:15;;:23;;;;:::i;:::-;24253:11;:37;;;;24325:6;24295;:19;24302:11;24295:19;;;;;;;;;;;;;;;:26;;;:36;;;;;;;:::i;:::-;;;;;;;;24372:50;24395:6;:19;24402:11;24395:19;;;;;;;;;;;;;;;:26;;;24372:22;:50::i;:::-;24336:6;:19;24343:11;24336:19;;;;;;;;;;;;;;;:33;;:86;;;;24464:1;24434:6;:19;24441:11;24434:19;;;;;;;;;;;;;;;:26;;;:31;24431:92;;;24481:30;24499:11;24481:17;:30::i;:::-;24431:92;24531:27;:25;:27::i;:::-;24567:22;24592:6;24567:31;;24603:18;24671:9;;24656:12;;:24;;;;:::i;:::-;24637:15;:44;:61;;;;;24685:13;;;;;;;;;;;24637:61;24634:244;;;24752:3;24728:20;;24719:6;:29;;;;:::i;:::-;24718:37;;;;:::i;:::-;24705:50;;24779:10;24761:28;;;;;:::i;:::-;;;24795:77;24821:6;24830:41;24854:4;;;;;;;;;;;24860:10;24830:15;:41::i;:::-;24795:4;;;;;;;;;;;:17;;;;:77;;;;;:::i;:::-;24634:244;24886:76;24904:10;24916:45;24940:4;;;;;;;;;;;24946:14;24916:15;:45::i;:::-;24886:4;;;;;;;;;;;:17;;;;:76;;;;;:::i;:::-;24039:931;;;18953:1:::0;19907:7;:22;;;;23983:987;:::o;22127:32::-;;;;:::o;28673:152::-;20397:10;20387:20;;:6;;;;;;;;;;;:20;;;20379:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28732:14:::1;28749:21;28732:38;;28789:10;28781:28;;:36;28810:6;28781:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28721:104;28673:152::o:0;22166:57::-;;;;:::o;22265:29::-;;;;:::o;28026:114::-;20397:10;20387:20;;:6;;;;;;;;;;;:20;;;20379:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28118:14:::1;28102:13;;:30;;;;;;;;;;;;;;;;;;28026:114:::0;:::o;20472:148::-;20397:10;20387:20;;:6;;;;;;;;;;;:20;;;20379:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20579:1:::1;20542:40;;20563:6;;;;;;;;;;;20542:40;;;;;;;;;;;;20610:1;20593:6;;:19;;;;;;;;;;;;;;;;;;20472:148::o:0;28831:185::-;20397:10;20387:20;;:6;;;;;;;;;;;:20;;;20379:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28924:84:::1;28958:10;28970:37;28986:12;29000:6;28970:15;:37::i;:::-;28931:12;28924:33;;;;:84;;;;;:::i;:::-;28831:185:::0;;:::o;28149:518::-;28204:14;;:::i;:::-;28238:421;;;;;;;;28260:11;;28238:421;;;;28286:16;;28238:421;;;;28317:12;;28238:421;;;;28344:12;;28238:421;;;;28371:10;;28238:421;;;;28398:6;:12;28405:4;28398:12;;;;;;;;;;;;;;;:19;;;28238:421;;;;28432:23;28450:4;28432:17;:23::i;:::-;28238:421;;;;28470:6;:12;28477:4;28470:12;;;;;;;;;;;;;;;:26;;;28238:421;;;;28511:18;:24;28530:4;28511:24;;;;;;;;;;;;;;;;28238:421;;;;28550:17;:23;28568:4;28550:23;;;;;;;;;;;;;;;;28238:421;;;;28634:13;;28622:9;;:25;;;;:::i;:::-;28607:12;;:40;;;;:::i;:::-;28588:15;:60;28238:421;;;;;28231:428;;28149:518;;;:::o;22075:36::-;;;;:::o;20260:79::-;20298:7;20325:6;;;;;;;;;;;20318:13;;20260:79;:::o;22714:1261::-;18997:1;19595:7;;:19;;19587:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;18997:1;19728:7;:18;;;;22805:1:::1;22796:6;:10;22788:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;22927:10;;22909:15;:28;22901:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22993:12;;22974:15;:31;;22966:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23038:15;23062:44;;:::i;:::-;23150:4;;;;;;;;;;;:14;;;23173:4;23150:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23111:18;:36;;:68;;;::::0;::::1;23184:87;23206:10;23226:4;23233:37;23257:4;;;;;;;;;;;23263:6;23233:15;:37::i;:::-;23184:4;;;;;;;;;;;:21;;;;:87;;;;;;:::i;:::-;23314:4;;;;;;;;;;;:14;;;23337:4;23314:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23276:18;:35;;:67;;;::::0;::::1;23396:18;:36;;;23358:18;:35;;;:74;;;;:::i;:::-;23348:84;;23447:45;23478:4;;;;;;;;;;;23484:7;23447:22;:45::i;:::-;23437:55;;23532:1;23504:6;:18;23511:10;23504:18;;;;;;;;;;;;;;;:25;;;:29;23501:88;;;23549:28;23566:10;23549:16;:28::i;:::-;23501:88;23633:1;23604:6;:18;23611:10;23604:18;;;;;;;;;;;;;;;:25;;;:30;23601:87;;;23650:26;23665:10;23650:14;:26::i;:::-;23601:87;23716:24;23732:7;23716:11;;:15;;:24;;;;:::i;:::-;23702:11;:38;;;;23780:7;23751:6;:18;23758:10;23751:18;;;;;;;;;;;;;;;:25;;;:36;;;;;;;:::i;:::-;;;;;;;;23833:49;23856:6;:18;23863:10;23856:18;;;;;;;;;;;;;;;:25;;;23833:22;:49::i;:::-;23798:6;:18;23805:10;23798:18;;;;;;;;;;;;;;;:32;;:84;;;;23920:15;23887:18;:30;23906:10;23887:30;;;;;;;;;;;;;;;:48;;;;23940:27;:25;:27::i;:::-;22777:1198;;18953:1:::0;19907:7;:22;;;;22714:1261;:::o;25603:91::-;18997:1;19595:7;;:19;;19587:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;18997:1;19728:7;:18;;;;25658:28:::1;25675:10;25658:16;:28::i;:::-;18953:1:::0;19907:7;:22;;;;25603:91::o;20995:71::-;;;;;;;;;;;;;:::o;21917:26::-;;;;:::o;22345:40::-;;;;:::o;22301:34::-;;;;:::o;22230:31::-;;;;:::o;21950:::-;;;;:::o;22396:32::-;;;;;;;;;;;;;:::o;20628:244::-;20397:10;20387:20;;:6;;;;;;;;;;;:20;;;20379:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20737:1:::1;20717:22;;:8;:22;;;;20709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20827:8;20798:38;;20819:6;;;;;;;;;;;20798:38;;;;;;;;;;;;20856:8;20847:6;;:17;;;;;;;;;;;;;;;;;;20628:244:::0;:::o;26340:721::-;26410:7;26430:17;26450:15;26430:35;;26489:10;;26477:9;:22;26474:60;;;26518:10;;26506:22;;26474:60;26542:29;26610:13;;26587:19;;26575:9;:31;;;;:::i;:::-;26574:49;;;;:::i;:::-;26542:81;;26634:20;26686:13;;26674:9;;:25;;;;:::i;:::-;26658:12;;:42;;;;:::i;:::-;26634:67;;26712:18;26757:12;26733:21;:36;;;;:::i;:::-;26712:57;;26859:26;26888:87;26910:64;26962:11;;26910:47;26946:10;26910:31;;:35;;:47;;;;:::i;:::-;:51;;:64;;;;:::i;:::-;26888:17;;:21;;:87;;;;:::i;:::-;26859:116;;26987:66;27021:31;;26987:29;26997:18;26987:5;:9;;:29;;;;:::i;:::-;:33;;:66;;;;:::i;:::-;26980:73;;;;;;;26340:721;;;:::o;1646:98::-;1704:7;1735:1;1731;:5;;;;:::i;:::-;1724:12;;1646:98;;;;:::o;24982:613::-;25082:1;25052:6;:19;25059:11;25052:19;;;;;;;;;;;;;;;:26;;;:31;25049:46;;;25086:7;;25049:46;25107:14;25124:30;25142:11;25124:17;:30::i;:::-;25107:47;;25177:1;25168:6;:10;25165:423;;;25213:28;25234:6;25213:16;;:20;;:28;;;;:::i;:::-;25194:16;:47;;;;25289:15;25256:17;:30;25274:11;25256:30;;;;;;;;;;;;;;;:48;;;;25355:45;25393:6;25355;:19;25362:11;25355:19;;;;;;;;;;;;;;;:33;;;:37;;:45;;;;:::i;:::-;25319:6;:19;25326:11;25319:19;;;;;;;;;;;;;;;:33;;:81;;;;25451:50;25474:6;:19;25481:11;25474:19;;;;;;;;;;;;;;;:26;;;25451:22;:50::i;:::-;25415:6;:19;25422:11;25415:19;;;;;;;;;;;;;;;:33;;:86;;;;25507:69;25525:11;25538:37;25562:4;;;;;;;;;;;25568:6;25538:15;:37::i;:::-;25507:4;;;;;;;;;;;:17;;;;:69;;;;;:::i;:::-;25165:423;25038:557;24982:613;;:::o;27732:288::-;27848:12;27881:1;27861:12;:19;;;;:21;;;;:::i;:::-;27848:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27800:12;27813:18;:31;27832:11;27813:31;;;;;;;;;;;;;;;;27800:45;;;;;;;;:::i;:::-;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;27952:18;:31;27971:11;27952:31;;;;;;;;;;;;;;;;27894:18;:55;27913:12;27946:1;27926:12;:19;;;;:21;;;;:::i;:::-;27913:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27894:55;;;;;;;;;;;;;;;:89;;;;27994:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;27732:288;:::o;25700:634::-;25757:17;25777:15;25757:35;;25816:10;;25804:9;:22;25801:60;;;25845:10;;25833:22;;25801:60;25869:29;25937:13;;25914:19;;25902:9;:31;;;;:::i;:::-;25901:49;;;;:::i;:::-;25869:81;;25961:20;26012:13;;26000:9;;:25;;;;:::i;:::-;25984:12;;:42;;;;:::i;:::-;25961:65;;26037:18;26082:12;26058:21;:36;;;;:::i;:::-;26037:57;;26123:87;26145:64;26197:11;;26145:47;26181:10;26145:31;;:35;;:47;;;;:::i;:::-;:51;;:64;;;;:::i;:::-;26123:17;;:21;;:87;;;;:::i;:::-;26103:17;:107;;;;26243:1;26219:21;:25;26215:112;;;26296:19;;26284:9;:31;;;;:::i;:::-;26261:19;;:54;;;;;;;:::i;:::-;;;;;;;;26215:112;25746:588;;;;25700:634::o;29022:782::-;29110:16;29133:19;29162:13;29133:43;;29181:20;29204:12;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29181:46;;;;29232:19;29260:28;29297:14;29343:12;29328:11;;:27;29325:410;;29379:12;29365:11;;:26;29362:332;;;29427:12;29413:11;;:26;;;;:::i;:::-;29399:40;;29473:11;29469:2;:15;;;;:::i;:::-;29446:38;;29500:33;29512:20;29500:7;:11;;:33;;;;:::i;:::-;29491:42;;29362:332;;;29582:11;;29567:12;:26;;;;:::i;:::-;29553:40;;29627:11;29623:2;:15;;;;:::i;:::-;29600:38;;29654:33;29666:20;29654:7;:11;;:33;;;;:::i;:::-;29645:42;;29362:332;29325:410;;;29722:7;29713:16;;29325:410;29743:17;29763:6;29743:26;;29786:9;29778:18;;;;;;;;29022:782;;;;:::o;14050:211::-;14167:86;14187:5;14217:23;;;14242:2;14246:5;14194:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14167:19;:86::i;:::-;14050:211;;;:::o;14269:248::-;14413:96;14433:5;14463:27;;;14492:4;14498:2;14502:5;14440:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14413:19;:96::i;:::-;14269:248;;;;:::o;29810:789::-;29905:16;29928:19;29957:13;29928:43;;29976:20;29999:12;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29976:46;;;;30027:19;30055:28;30092:14;30138:12;30123:11;;:27;30120:410;;30174:12;30160:11;;:26;30157:332;;;30222:12;30208:11;;:26;;;;:::i;:::-;30194:40;;30268:11;30264:2;:15;;;;:::i;:::-;30241:38;;30295:33;30307:20;30295:7;:11;;:33;;;;:::i;:::-;30286:42;;30157:332;;;30377:11;;30362:12;:26;;;;:::i;:::-;30348:40;;30422:11;30418:2;:15;;;;:::i;:::-;30395:38;;30449:33;30461:20;30449:7;:11;;:33;;;;:::i;:::-;30440:42;;30157:332;30120:410;;;30517:7;30508:16;;30120:410;30538:17;30558:6;30538:26;;30581:9;30573:18;;;;;;;;29810:789;;;;:::o;27557:167::-;27656:12;:19;;;;27622:18;:31;27641:11;27622:31;;;;;;;;;;;;;;;:53;;;;27686:12;27704:11;27686:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27557:167;:::o;1540:98::-;1598:7;1629:1;1625;:5;;;;:::i;:::-;1618:12;;1540:98;;;;:::o;1752:::-;1810:7;1841:1;1837;:5;;;;:::i;:::-;1830:12;;1752:98;;;;:::o;1858:::-;1916:7;1947:1;1943;:5;;;;:::i;:::-;1936:12;;1858:98;;;;:::o;16623:716::-;17047:23;17073:69;17101:4;17073:69;;;;;;;;;;;;;;;;;17081:5;17073:27;;;;:69;;;;;:::i;:::-;17047:95;;17177:1;17157:10;:17;:21;17153:179;;;17254:10;17243:30;;;;;;;;;;;;:::i;:::-;17235:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17153:179;16693:646;16623:716;;:::o;8999:229::-;9136:12;9168:52;9190:6;9198:4;9204:1;9207:12;9168:21;:52::i;:::-;9161:59;;8999:229;;;;;:::o;10119:510::-;10289:12;10347:5;10322:21;:30;;10314:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10414:18;10425:6;10414:10;:18::i;:::-;10406:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10480:12;10494:23;10521:6;:11;;10540:5;10547:4;10521:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10479:73;;;;10570:51;10587:7;10596:10;10608:12;10570:16;:51::i;:::-;10563:58;;;;10119:510;;;;;;:::o;6193:387::-;6253:4;6461:12;6528:7;6516:20;6508:28;;6571:1;6564:4;:8;6557:15;;;6193:387;;;:::o;12805:712::-;12955:12;12984:7;12980:530;;;13015:10;13008:17;;;;12980:530;13149:1;13129:10;:17;:21;13125:374;;;13327:10;13321:17;13388:15;13375:10;13371:2;13367:19;13360:44;13125:374;13470:12;13463:20;;;;;;;;;;;:::i;:::-;;;;;;;;12805:712;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:442::-;1760:4;1798:2;1787:9;1783:18;1775:26;;1811:71;1879:1;1868:9;1864:17;1855:6;1811:71;:::i;:::-;1892:72;1960:2;1949:9;1945:18;1936:6;1892:72;:::i;:::-;1974;2042:2;2031:9;2027:18;2018:6;1974:72;:::i;:::-;1611:442;;;;;;:::o;2059:122::-;2132:24;2150:5;2132:24;:::i;:::-;2125:5;2122:35;2112:63;;2171:1;2168;2161:12;2112:63;2059:122;:::o;2187:139::-;2233:5;2271:6;2258:20;2249:29;;2287:33;2314:5;2287:33;:::i;:::-;2187:139;;;;:::o;2332:329::-;2391:6;2440:2;2428:9;2419:7;2415:23;2411:32;2408:119;;;2446:79;;:::i;:::-;2408:119;2566:1;2591:53;2636:7;2627:6;2616:9;2612:22;2591:53;:::i;:::-;2581:63;;2537:117;2332:329;;;;:::o;2667:90::-;2701:7;2744:5;2737:13;2730:21;2719:32;;2667:90;;;:::o;2763:116::-;2833:21;2848:5;2833:21;:::i;:::-;2826:5;2823:32;2813:60;;2869:1;2866;2859:12;2813:60;2763:116;:::o;2885:133::-;2928:5;2966:6;2953:20;2944:29;;2982:30;3006:5;2982:30;:::i;:::-;2885:133;;;;:::o;3024:323::-;3080:6;3129:2;3117:9;3108:7;3104:23;3100:32;3097:119;;;3135:79;;:::i;:::-;3097:119;3255:1;3280:50;3322:7;3313:6;3302:9;3298:22;3280:50;:::i;:::-;3270:60;;3226:114;3024:323;;;;:::o;3353:474::-;3421:6;3429;3478:2;3466:9;3457:7;3453:23;3449:32;3446:119;;;3484:79;;:::i;:::-;3446:119;3604:1;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3575:117;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3353:474;;;;;:::o;3833:108::-;3910:24;3928:5;3910:24;:::i;:::-;3905:3;3898:37;3833:108;;:::o;3947:99::-;4018:21;4033:5;4018:21;:::i;:::-;4013:3;4006:34;3947:99;;:::o;4114:2165::-;4261:6;4256:3;4252:16;4357:4;4350:5;4346:16;4340:23;4376:63;4433:4;4428:3;4424:14;4410:12;4376:63;:::i;:::-;4278:171;4543:4;4536:5;4532:16;4526:23;4562:63;4619:4;4614:3;4610:14;4596:12;4562:63;:::i;:::-;4459:176;4725:4;4718:5;4714:16;4708:23;4744:63;4801:4;4796:3;4792:14;4778:12;4744:63;:::i;:::-;4645:172;4907:4;4900:5;4896:16;4890:23;4926:63;4983:4;4978:3;4974:14;4960:12;4926:63;:::i;:::-;4827:172;5087:4;5080:5;5076:16;5070:23;5106:63;5163:4;5158:3;5154:14;5140:12;5106:63;:::i;:::-;5009:170;5267:4;5260:5;5256:16;5250:23;5286:63;5343:4;5338:3;5334:14;5320:12;5286:63;:::i;:::-;5189:170;5451:4;5444:5;5440:16;5434:23;5470:63;5527:4;5522:3;5518:14;5504:12;5470:63;:::i;:::-;5369:174;5633:4;5626:5;5622:16;5616:23;5652:63;5709:4;5704:3;5700:14;5686:12;5652:63;:::i;:::-;5553:172;5812:6;5805:5;5801:18;5795:25;5833:65;5890:6;5885:3;5881:16;5867:12;5833:65;:::i;:::-;5735:173;5995:6;5988:5;5984:18;5978:25;6016:65;6073:6;6068:3;6064:16;6050:12;6016:65;:::i;:::-;5918:173;6182:6;6175:5;6171:18;6165:25;6203:59;6254:6;6249:3;6245:16;6231:12;6203:59;:::i;:::-;6101:171;4230:2049;4114:2165;;:::o;6285:323::-;6428:4;6466:3;6455:9;6451:19;6443:27;;6480:121;6598:1;6587:9;6583:17;6574:6;6480:121;:::i;:::-;6285:323;;;;:::o;6614:118::-;6701:24;6719:5;6701:24;:::i;:::-;6696:3;6689:37;6614:118;;:::o;6738:222::-;6831:4;6869:2;6858:9;6854:18;6846:26;;6882:71;6950:1;6939:9;6935:17;6926:6;6882:71;:::i;:::-;6738:222;;;;:::o;6966:60::-;6994:3;7015:5;7008:12;;6966:60;;;:::o;7032:142::-;7082:9;7115:53;7133:34;7142:24;7160:5;7142:24;:::i;:::-;7133:34;:::i;:::-;7115:53;:::i;:::-;7102:66;;7032:142;;;:::o;7180:126::-;7230:9;7263:37;7294:5;7263:37;:::i;:::-;7250:50;;7180:126;;;:::o;7312:140::-;7376:9;7409:37;7440:5;7409:37;:::i;:::-;7396:50;;7312:140;;;:::o;7458:159::-;7559:51;7604:5;7559:51;:::i;:::-;7554:3;7547:64;7458:159;;:::o;7623:250::-;7730:4;7768:2;7757:9;7753:18;7745:26;;7781:85;7863:1;7852:9;7848:17;7839:6;7781:85;:::i;:::-;7623:250;;;;:::o;7879:109::-;7960:21;7975:5;7960:21;:::i;:::-;7955:3;7948:34;7879:109;;:::o;7994:210::-;8081:4;8119:2;8108:9;8104:18;8096:26;;8132:65;8194:1;8183:9;8179:17;8170:6;8132:65;:::i;:::-;7994:210;;;;:::o;8210:169::-;8294:11;8328:6;8323:3;8316:19;8368:4;8363:3;8359:14;8344:29;;8210:169;;;;:::o;8385:181::-;8525:33;8521:1;8513:6;8509:14;8502:57;8385:181;:::o;8572:366::-;8714:3;8735:67;8799:2;8794:3;8735:67;:::i;:::-;8728:74;;8811:93;8900:3;8811:93;:::i;:::-;8929:2;8924:3;8920:12;8913:19;;8572:366;;;:::o;8944:419::-;9110:4;9148:2;9137:9;9133:18;9125:26;;9197:9;9191:4;9187:20;9183:1;9172:9;9168:17;9161:47;9225:131;9351:4;9225:131;:::i;:::-;9217:139;;8944:419;;;:::o;9369:168::-;9509:20;9505:1;9497:6;9493:14;9486:44;9369:168;:::o;9543:366::-;9685:3;9706:67;9770:2;9765:3;9706:67;:::i;:::-;9699:74;;9782:93;9871:3;9782:93;:::i;:::-;9900:2;9895:3;9891:12;9884:19;;9543:366;;;:::o;9915:419::-;10081:4;10119:2;10108:9;10104:18;10096:26;;10168:9;10162:4;10158:20;10154:1;10143:9;10139:17;10132:47;10196:131;10322:4;10196:131;:::i;:::-;10188:139;;9915:419;;;:::o;10340:170::-;10480:22;10476:1;10468:6;10464:14;10457:46;10340:170;:::o;10516:366::-;10658:3;10679:67;10743:2;10738:3;10679:67;:::i;:::-;10672:74;;10755:93;10844:3;10755:93;:::i;:::-;10873:2;10868:3;10864:12;10857:19;;10516:366;;;:::o;10888:419::-;11054:4;11092:2;11081:9;11077:18;11069:26;;11141:9;11135:4;11131:20;11127:1;11116:9;11112:17;11105:47;11169:131;11295:4;11169:131;:::i;:::-;11161:139;;10888:419;;;:::o;11313:180::-;11361:77;11358:1;11351:88;11458:4;11455:1;11448:15;11482:4;11479:1;11472:15;11499:191;11539:4;11559:20;11577:1;11559:20;:::i;:::-;11554:25;;11593:20;11611:1;11593:20;:::i;:::-;11588:25;;11632:1;11629;11626:8;11623:34;;;11637:18;;:::i;:::-;11623:34;11682:1;11679;11675:9;11667:17;;11499:191;;;;:::o;11696:305::-;11736:3;11755:20;11773:1;11755:20;:::i;:::-;11750:25;;11789:20;11807:1;11789:20;:::i;:::-;11784:25;;11943:1;11875:66;11871:74;11868:1;11865:81;11862:107;;;11949:18;;:::i;:::-;11862:107;11993:1;11990;11986:9;11979:16;;11696:305;;;;:::o;12007:348::-;12047:7;12070:20;12088:1;12070:20;:::i;:::-;12065:25;;12104:20;12122:1;12104:20;:::i;:::-;12099:25;;12292:1;12224:66;12220:74;12217:1;12214:81;12209:1;12202:9;12195:17;12191:105;12188:131;;;12299:18;;:::i;:::-;12188:131;12347:1;12344;12340:9;12329:20;;12007:348;;;;:::o;12361:180::-;12409:77;12406:1;12399:88;12506:4;12503:1;12496:15;12530:4;12527:1;12520:15;12547:185;12587:1;12604:20;12622:1;12604:20;:::i;:::-;12599:25;;12638:20;12656:1;12638:20;:::i;:::-;12633:25;;12677:1;12667:35;;12682:18;;:::i;:::-;12667:35;12724:1;12721;12717:9;12712:14;;12547:185;;;;:::o;12738:182::-;12878:34;12874:1;12866:6;12862:14;12855:58;12738:182;:::o;12926:366::-;13068:3;13089:67;13153:2;13148:3;13089:67;:::i;:::-;13082:74;;13165:93;13254:3;13165:93;:::i;:::-;13283:2;13278:3;13274:12;13267:19;;12926:366;;;:::o;13298:419::-;13464:4;13502:2;13491:9;13487:18;13479:26;;13551:9;13545:4;13541:20;13537:1;13526:9;13522:17;13515:47;13579:131;13705:4;13579:131;:::i;:::-;13571:139;;13298:419;;;:::o;13723:167::-;13863:19;13859:1;13851:6;13847:14;13840:43;13723:167;:::o;13896:366::-;14038:3;14059:67;14123:2;14118:3;14059:67;:::i;:::-;14052:74;;14135:93;14224:3;14135:93;:::i;:::-;14253:2;14248:3;14244:12;14237:19;;13896:366;;;:::o;14268:419::-;14434:4;14472:2;14461:9;14457:18;14449:26;;14521:9;14515:4;14511:20;14507:1;14496:9;14492:17;14485:47;14549:131;14675:4;14549:131;:::i;:::-;14541:139;;14268:419;;;:::o;14693:163::-;14833:15;14829:1;14821:6;14817:14;14810:39;14693:163;:::o;14862:366::-;15004:3;15025:67;15089:2;15084:3;15025:67;:::i;:::-;15018:74;;15101:93;15190:3;15101:93;:::i;:::-;15219:2;15214:3;15210:12;15203:19;;14862:366;;;:::o;15234:419::-;15400:4;15438:2;15427:9;15423:18;15415:26;;15487:9;15481:4;15477:20;15473:1;15462:9;15458:17;15451:47;15515:131;15641:4;15515:131;:::i;:::-;15507:139;;15234:419;;;:::o;15659:169::-;15799:21;15795:1;15787:6;15783:14;15776:45;15659:169;:::o;15834:366::-;15976:3;15997:67;16061:2;16056:3;15997:67;:::i;:::-;15990:74;;16073:93;16162:3;16073:93;:::i;:::-;16191:2;16186:3;16182:12;16175:19;;15834:366;;;:::o;16206:419::-;16372:4;16410:2;16399:9;16395:18;16387:26;;16459:9;16453:4;16449:20;16445:1;16434:9;16430:17;16423:47;16487:131;16613:4;16487:131;:::i;:::-;16479:139;;16206:419;;;:::o;16631:143::-;16688:5;16719:6;16713:13;16704:22;;16735:33;16762:5;16735:33;:::i;:::-;16631:143;;;;:::o;16780:351::-;16850:6;16899:2;16887:9;16878:7;16874:23;16870:32;16867:119;;;16905:79;;:::i;:::-;16867:119;17025:1;17050:64;17106:7;17097:6;17086:9;17082:22;17050:64;:::i;:::-;17040:74;;16996:128;16780:351;;;;:::o;17137:225::-;17277:34;17273:1;17265:6;17261:14;17254:58;17346:8;17341:2;17333:6;17329:15;17322:33;17137:225;:::o;17368:366::-;17510:3;17531:67;17595:2;17590:3;17531:67;:::i;:::-;17524:74;;17607:93;17696:3;17607:93;:::i;:::-;17725:2;17720:3;17716:12;17709:19;;17368:366;;;:::o;17740:419::-;17906:4;17944:2;17933:9;17929:18;17921:26;;17993:9;17987:4;17983:20;17979:1;17968:9;17964:17;17957:47;18021:131;18147:4;18021:131;:::i;:::-;18013:139;;17740:419;;;:::o;18165:180::-;18213:77;18210:1;18203:88;18310:4;18307:1;18300:15;18334:4;18331:1;18324:15;18351:180;18399:77;18396:1;18389:88;18496:4;18493:1;18486:15;18520:4;18517:1;18510:15;18537:86;18572:7;18612:4;18605:5;18601:16;18590:27;;18537:86;;;:::o;18629:118::-;18700:22;18716:5;18700:22;:::i;:::-;18693:5;18690:33;18680:61;;18737:1;18734;18727:12;18680:61;18629:118;:::o;18753:139::-;18808:5;18839:6;18833:13;18824:22;;18855:31;18880:5;18855:31;:::i;:::-;18753:139;;;;:::o;18898:347::-;18966:6;19015:2;19003:9;18994:7;18990:23;18986:32;18983:119;;;19021:79;;:::i;:::-;18983:119;19141:1;19166:62;19220:7;19211:6;19200:9;19196:22;19166:62;:::i;:::-;19156:72;;19112:126;18898:347;;;;:::o;19251:102::-;19293:8;19340:5;19337:1;19333:13;19312:34;;19251:102;;;:::o;19359:848::-;19420:5;19427:4;19451:6;19442:15;;19475:5;19466:14;;19489:712;19510:1;19500:8;19497:15;19489:712;;;19605:4;19600:3;19596:14;19590:4;19587:24;19584:50;;;19614:18;;:::i;:::-;19584:50;19664:1;19654:8;19650:16;19647:451;;;20079:4;20072:5;20068:16;20059:25;;19647:451;20129:4;20123;20119:15;20111:23;;20159:32;20182:8;20159:32;:::i;:::-;20147:44;;19489:712;;;19359:848;;;;;;;:::o;20213:1073::-;20267:5;20458:8;20448:40;;20479:1;20470:10;;20481:5;;20448:40;20507:4;20497:36;;20524:1;20515:10;;20526:5;;20497:36;20593:4;20641:1;20636:27;;;;20677:1;20672:191;;;;20586:277;;20636:27;20654:1;20645:10;;20656:5;;;20672:191;20717:3;20707:8;20704:17;20701:43;;;20724:18;;:::i;:::-;20701:43;20773:8;20770:1;20766:16;20757:25;;20808:3;20801:5;20798:14;20795:40;;;20815:18;;:::i;:::-;20795:40;20848:5;;;20586:277;;20972:2;20962:8;20959:16;20953:3;20947:4;20944:13;20940:36;20922:2;20912:8;20909:16;20904:2;20898:4;20895:12;20891:35;20875:111;20872:246;;;21028:8;21022:4;21018:19;21009:28;;21063:3;21056:5;21053:14;21050:40;;;21070:18;;:::i;:::-;21050:40;21103:5;;20872:246;21143:42;21181:3;21171:8;21165:4;21162:1;21143:42;:::i;:::-;21128:57;;;;21217:4;21212:3;21208:14;21201:5;21198:25;21195:51;;;21226:18;;:::i;:::-;21195:51;21275:4;21268:5;21264:16;21255:25;;20213:1073;;;;;;:::o;21292:285::-;21352:5;21376:23;21394:4;21376:23;:::i;:::-;21368:31;;21420:27;21438:8;21420:27;:::i;:::-;21408:39;;21466:104;21503:66;21493:8;21487:4;21466:104;:::i;:::-;21457:113;;21292:285;;;;:::o;21583:332::-;21704:4;21742:2;21731:9;21727:18;21719:26;;21755:71;21823:1;21812:9;21808:17;21799:6;21755:71;:::i;:::-;21836:72;21904:2;21893:9;21889:18;21880:6;21836:72;:::i;:::-;21583:332;;;;;:::o;21921:442::-;22070:4;22108:2;22097:9;22093:18;22085:26;;22121:71;22189:1;22178:9;22174:17;22165:6;22121:71;:::i;:::-;22202:72;22270:2;22259:9;22255:18;22246:6;22202:72;:::i;:::-;22284;22352:2;22341:9;22337:18;22328:6;22284:72;:::i;:::-;21921:442;;;;;;:::o;22369:137::-;22423:5;22454:6;22448:13;22439:22;;22470:30;22494:5;22470:30;:::i;:::-;22369:137;;;;:::o;22512:345::-;22579:6;22628:2;22616:9;22607:7;22603:23;22599:32;22596:119;;;22634:79;;:::i;:::-;22596:119;22754:1;22779:61;22832:7;22823:6;22812:9;22808:22;22779:61;:::i;:::-;22769:71;;22725:125;22512:345;;;;:::o;22863:229::-;23003:34;22999:1;22991:6;22987:14;22980:58;23072:12;23067:2;23059:6;23055:15;23048:37;22863:229;:::o;23098:366::-;23240:3;23261:67;23325:2;23320:3;23261:67;:::i;:::-;23254:74;;23337:93;23426:3;23337:93;:::i;:::-;23455:2;23450:3;23446:12;23439:19;;23098:366;;;:::o;23470:419::-;23636:4;23674:2;23663:9;23659:18;23651:26;;23723:9;23717:4;23713:20;23709:1;23698:9;23694:17;23687:47;23751:131;23877:4;23751:131;:::i;:::-;23743:139;;23470:419;;;:::o;23895:225::-;24035:34;24031:1;24023:6;24019:14;24012:58;24104:8;24099:2;24091:6;24087:15;24080:33;23895:225;:::o;24126:366::-;24268:3;24289:67;24353:2;24348:3;24289:67;:::i;:::-;24282:74;;24365:93;24454:3;24365:93;:::i;:::-;24483:2;24478:3;24474:12;24467:19;;24126:366;;;:::o;24498:419::-;24664:4;24702:2;24691:9;24687:18;24679:26;;24751:9;24745:4;24741:20;24737:1;24726:9;24722:17;24715:47;24779:131;24905:4;24779:131;:::i;:::-;24771:139;;24498:419;;;:::o;24923:179::-;25063:31;25059:1;25051:6;25047:14;25040:55;24923:179;:::o;25108:366::-;25250:3;25271:67;25335:2;25330:3;25271:67;:::i;:::-;25264:74;;25347:93;25436:3;25347:93;:::i;:::-;25465:2;25460:3;25456:12;25449:19;;25108:366;;;:::o;25480:419::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25733:9;25727:4;25723:20;25719:1;25708:9;25704:17;25697:47;25761:131;25887:4;25761:131;:::i;:::-;25753:139;;25480:419;;;:::o;25905:98::-;25956:6;25990:5;25984:12;25974:22;;25905:98;;;:::o;26009:147::-;26110:11;26147:3;26132:18;;26009:147;;;;:::o;26162:307::-;26230:1;26240:113;26254:6;26251:1;26248:13;26240:113;;;26339:1;26334:3;26330:11;26324:18;26320:1;26315:3;26311:11;26304:39;26276:2;26273:1;26269:10;26264:15;;26240:113;;;26371:6;26368:1;26365:13;26362:101;;;26451:1;26442:6;26437:3;26433:16;26426:27;26362:101;26211:258;26162:307;;;:::o;26475:373::-;26579:3;26607:38;26639:5;26607:38;:::i;:::-;26661:88;26742:6;26737:3;26661:88;:::i;:::-;26654:95;;26758:52;26803:6;26798:3;26791:4;26784:5;26780:16;26758:52;:::i;:::-;26835:6;26830:3;26826:16;26819:23;;26583:265;26475:373;;;;:::o;26854:271::-;26984:3;27006:93;27095:3;27086:6;27006:93;:::i;:::-;26999:100;;27116:3;27109:10;;26854:271;;;;:::o;27131:99::-;27183:6;27217:5;27211:12;27201:22;;27131:99;;;:::o;27236:102::-;27277:6;27328:2;27324:7;27319:2;27312:5;27308:14;27304:28;27294:38;;27236:102;;;:::o;27344:364::-;27432:3;27460:39;27493:5;27460:39;:::i;:::-;27515:71;27579:6;27574:3;27515:71;:::i;:::-;27508:78;;27595:52;27640:6;27635:3;27628:4;27621:5;27617:16;27595:52;:::i;:::-;27672:29;27694:6;27672:29;:::i;:::-;27667:3;27663:39;27656:46;;27436:272;27344:364;;;;:::o;27714:313::-;27827:4;27865:2;27854:9;27850:18;27842:26;;27914:9;27908:4;27904:20;27900:1;27889:9;27885:17;27878:47;27942:78;28015:4;28006:6;27942:78;:::i;:::-;27934:86;;27714:313;;;;:::o
Swarm Source
ipfs://cf4693a45a0f7750af47cef275cf47f8b323dcc9c19bd16d8ec1be12f79ea0d8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.