Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,415 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 14143349 | 1004 days ago | IN | 0 ETH | 0.0046512 | ||||
Start Collecting | 13677265 | 1076 days ago | IN | 0 ETH | 0.00973626 | ||||
Deposit | 13677251 | 1076 days ago | IN | 0 ETH | 0.01173966 | ||||
Collect Honey | 13677218 | 1076 days ago | IN | 0 ETH | 0.00813958 | ||||
Collect Honey | 13677196 | 1076 days ago | IN | 0 ETH | 0.00838233 | ||||
Withdraw | 13677170 | 1076 days ago | IN | 0 ETH | 0.00704425 | ||||
Start Collecting | 13677164 | 1076 days ago | IN | 0 ETH | 0.01401728 | ||||
Withdraw | 13676465 | 1076 days ago | IN | 0 ETH | 0.0063796 | ||||
Deposit | 13676407 | 1076 days ago | IN | 0 ETH | 0.00835897 | ||||
Withdraw | 13676394 | 1076 days ago | IN | 0 ETH | 0.01086121 | ||||
Deposit | 13676385 | 1076 days ago | IN | 0 ETH | 0.01093631 | ||||
Withdraw | 13676380 | 1076 days ago | IN | 0 ETH | 0.00998271 | ||||
Deposit | 13676348 | 1076 days ago | IN | 0 ETH | 0.00973196 | ||||
Start Collecting | 13676341 | 1076 days ago | IN | 0 ETH | 0.01248715 | ||||
Withdraw | 13676324 | 1076 days ago | IN | 0 ETH | 0.01353546 | ||||
Collect Honey | 13669110 | 1077 days ago | IN | 0 ETH | 0.01091982 | ||||
Add Pool | 13661715 | 1079 days ago | IN | 0 ETH | 0.0221172 | ||||
Add Pool | 13661712 | 1079 days ago | IN | 0 ETH | 0.0221172 | ||||
Add Pool | 13661711 | 1079 days ago | IN | 0 ETH | 0.0221172 | ||||
Add Pool | 13661706 | 1079 days ago | IN | 0 ETH | 0.0221172 | ||||
Add Pool | 13661700 | 1079 days ago | IN | 0 ETH | 0.0221172 | ||||
Add Pool | 13661696 | 1079 days ago | IN | 0 ETH | 0.0221172 | ||||
Add Pool | 13661694 | 1079 days ago | IN | 0 ETH | 0.0221172 | ||||
Add Pool | 13661689 | 1079 days ago | IN | 0 ETH | 0.0221148 | ||||
Add Pool | 13661684 | 1079 days ago | IN | 0 ETH | 0.0289572 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HoneycombV3
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.12; // /** * @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); /** * @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 Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // /** * @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 SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @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' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ 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 HoneycombV3 is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many staking tokens the user has provided. uint256 rewardDebt; // Reward debt. uint256 mined; uint256 collected; } struct CollectingInfo { uint256 collectableTime; uint256 amount; bool collected; } // Info of each pool. struct PoolInfo { IERC20 stakingToken; // Address of staking token contract. uint256 allocPoint; // How many allocation points assigned to this pool. uint256 lastRewardBlock; // Last block number that HONEYs distribution occurs. uint256 accHoneyPerShare; // Accumulated HONEYs per share, times 1e12. uint256 totalShares; } struct BatchInfo { uint256 startBlock; uint256 endBlock; uint256 honeyPerBlock; uint256 totalAllocPoint; } // Info of each batch BatchInfo[] public batchInfo; // Info of each pool at specified batch. mapping (uint256 => PoolInfo[]) public poolInfo; // Info of each user at specified batch and pool mapping (uint256 => mapping (uint256 => mapping (address => UserInfo))) public userInfo; mapping (uint256 => mapping (uint256 => mapping (address => CollectingInfo[]))) public collectingInfo; IERC20 public honeyToken; uint256 public collectingDuration = 86400 * 3; uint256 public instantCollectBurnRate = 4000; // 40% address public burnDestination; event Deposit(address indexed user, uint256 indexed batch, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed batch, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed batch, uint256 indexed pid, uint256 amount); constructor (address _honeyToken, address _burnDestination) public { honeyToken = IERC20(_honeyToken); burnDestination = _burnDestination; } function addBatch(uint256 startBlock, uint256 endBlock, uint256 honeyPerBlock) public onlyOwner { require(endBlock > startBlock, "endBlock should be larger than startBlock"); require(endBlock > block.number, "endBlock should be larger than the current block number"); require(startBlock > block.number, "startBlock should be larger than the current block number"); if (batchInfo.length > 0) { uint256 lastEndBlock = batchInfo[batchInfo.length - 1].endBlock; require(startBlock >= lastEndBlock, "startBlock should be >= the endBlock of the last batch"); } uint256 senderHoneyBalance = honeyToken.balanceOf(address(msg.sender)); uint256 requiredHoney = endBlock.sub(startBlock).mul(honeyPerBlock); require(senderHoneyBalance >= requiredHoney, "insufficient HONEY for the batch"); honeyToken.safeTransferFrom(address(msg.sender), address(this), requiredHoney); batchInfo.push(BatchInfo({ startBlock: startBlock, endBlock: endBlock, honeyPerBlock: honeyPerBlock, totalAllocPoint: 0 })); } function addPool(uint256 batch, IERC20 stakingToken, uint256 multiplier) public onlyOwner { require(batch < batchInfo.length, "batch must exist"); BatchInfo storage targetBatch = batchInfo[batch]; if (targetBatch.startBlock <= block.number && block.number < targetBatch.endBlock) { updateAllPools(batch); } uint256 lastRewardBlock = block.number > targetBatch.startBlock ? block.number : targetBatch.startBlock; batchInfo[batch].totalAllocPoint = targetBatch.totalAllocPoint.add(multiplier); poolInfo[batch].push(PoolInfo({ stakingToken: stakingToken, allocPoint: multiplier, lastRewardBlock: lastRewardBlock, accHoneyPerShare: 0, totalShares: 0 })); } // Return rewardable block count over the given _from to _to block. function getPendingBlocks(uint256 batch, uint256 from, uint256 to) public view returns (uint256) { require(batch < batchInfo.length, "batch must exist"); BatchInfo storage targetBatch = batchInfo[batch]; if (to < targetBatch.startBlock) { return 0; } if (to > targetBatch.endBlock) { if (from > targetBatch.endBlock) { return 0; } else { return targetBatch.endBlock.sub(from); } } else { return to.sub(from); } } // View function to see pending HONEYs on frontend. function minedHoney(uint256 batch, uint256 pid, address account) external view returns (uint256) { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); BatchInfo storage targetBatch = batchInfo[batch]; if (block.number < targetBatch.startBlock) { return 0; } PoolInfo storage pool = poolInfo[batch][pid]; UserInfo storage user = userInfo[batch][pid][account]; uint256 accHoneyPerShare = pool.accHoneyPerShare; if (block.number > pool.lastRewardBlock && pool.totalShares != 0) { uint256 pendingBlocks = getPendingBlocks(batch, pool.lastRewardBlock, block.number); uint256 honeyReward = pendingBlocks.mul(targetBatch.honeyPerBlock).mul(pool.allocPoint).div(targetBatch.totalAllocPoint); accHoneyPerShare = accHoneyPerShare.add(honeyReward.mul(1e12).div(pool.totalShares)); } return user.amount.mul(accHoneyPerShare).div(1e12).sub(user.rewardDebt).add(user.mined); } function updateAllPools(uint256 batch) public { require(batch < batchInfo.length, "batch must exist"); uint256 length = poolInfo[batch].length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(batch, pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 batch, uint256 pid) public { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); BatchInfo storage targetBatch = batchInfo[batch]; PoolInfo storage pool = poolInfo[batch][pid]; if (block.number < targetBatch.startBlock || block.number <= pool.lastRewardBlock || pool.lastRewardBlock > targetBatch.endBlock) { return; } if (pool.totalShares == 0) { pool.lastRewardBlock = block.number; return; } uint256 pendingBlocks = getPendingBlocks(batch, pool.lastRewardBlock, block.number); uint256 honeyReward = pendingBlocks.mul(targetBatch.honeyPerBlock).mul(pool.allocPoint).div(targetBatch.totalAllocPoint); pool.accHoneyPerShare = pool.accHoneyPerShare.add(honeyReward.mul(1e12).div(pool.totalShares)); pool.lastRewardBlock = block.number; } // Deposit staking tokens for HONEY allocation. function deposit(uint256 batch, uint256 pid, uint256 amount) public { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); BatchInfo storage targetBatch = batchInfo[batch]; require(block.number < targetBatch.endBlock, "batch ended"); PoolInfo storage pool = poolInfo[batch][pid]; UserInfo storage user = userInfo[batch][pid][msg.sender]; // 1. Update pool.accHoneyPerShare updatePool(batch, pid); // 2. Transfer pending HONEY to user if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accHoneyPerShare).div(1e12).sub(user.rewardDebt); if (pending > 0) { addToMined(batch, pid, msg.sender, pending); } } // 3. Transfer Staking Token from user to honeycomb if (amount > 0) { pool.stakingToken.safeTransferFrom(address(msg.sender), address(this), amount); user.amount = user.amount.add(amount); } // 4. Update user.rewardDebt pool.totalShares = pool.totalShares.add(amount); user.rewardDebt = user.amount.mul(pool.accHoneyPerShare).div(1e12); emit Deposit(msg.sender, batch, pid, amount); } // Withdraw staking tokens. function withdraw(uint256 batch, uint256 pid, uint256 amount) public { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); UserInfo storage user = userInfo[batch][pid][msg.sender]; require(user.amount >= amount, "insufficient balance"); // 1. Update pool.accHoneyPerShare updatePool(batch, pid); // 2. Transfer pending HONEY to user PoolInfo storage pool = poolInfo[batch][pid]; uint256 pending = user.amount.mul(pool.accHoneyPerShare).div(1e12).sub(user.rewardDebt); if (pending > 0) { addToMined(batch, pid, msg.sender, pending); } // 3. Transfer Staking Token from honeycomb to user pool.stakingToken.safeTransfer(address(msg.sender), amount); user.amount = user.amount.sub(amount); // 4. Update user.rewardDebt pool.totalShares = pool.totalShares.sub(amount); user.rewardDebt = user.amount.mul(pool.accHoneyPerShare).div(1e12); emit Withdraw(msg.sender, batch, pid, amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 batch, uint256 pid) public { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); PoolInfo storage pool = poolInfo[batch][pid]; UserInfo storage user = userInfo[batch][pid][msg.sender]; pool.stakingToken.safeTransfer(address(msg.sender), user.amount); emit EmergencyWithdraw(msg.sender, batch, pid, user.amount); user.amount = 0; user.rewardDebt = 0; } function migrate(uint256 toBatch, uint256 toPid, uint256 amount, uint256 fromBatch, uint256 fromPid) public { require(toBatch < batchInfo.length, "target batch must exist"); require(toPid < poolInfo[toBatch].length, "target pool must exist"); require(fromBatch < batchInfo.length, "source batch must exist"); require(fromPid < poolInfo[fromBatch].length, "source pool must exist"); BatchInfo storage targetBatch = batchInfo[toBatch]; require(block.number < targetBatch.endBlock, "batch ended"); UserInfo storage userFrom = userInfo[fromBatch][fromPid][msg.sender]; if (userFrom.amount > 0) { PoolInfo storage poolFrom = poolInfo[fromBatch][fromPid]; PoolInfo storage poolTo = poolInfo[toBatch][toPid]; require(address(poolFrom.stakingToken) == address(poolTo.stakingToken), "must be the same token"); withdraw(fromBatch, fromPid, amount); deposit(toBatch, toPid, amount); } } // Safe honey transfer function, just in case if rounding error causes pool to not have enough HONEYs. function safeHoneyTransfer(uint256 batch, uint256 pid, address to, uint256 amount) internal { uint256 honeyBal = honeyToken.balanceOf(address(this)); require(honeyBal > 0, "insufficient HONEY balance"); UserInfo storage user = userInfo[batch][pid][to]; if (amount > honeyBal) { honeyToken.transfer(to, honeyBal); user.collected = user.collected.add(honeyBal); } else { honeyToken.transfer(to, amount); user.collected = user.collected.add(amount); } } function addToMined(uint256 batch, uint256 pid, address account, uint256 amount) internal { UserInfo storage user = userInfo[batch][pid][account]; user.mined = user.mined.add(amount); } function startCollecting(uint256 batch, uint256 pid) external { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); withdraw(batch, pid, 0); UserInfo storage user = userInfo[batch][pid][msg.sender]; CollectingInfo[] storage collecting = collectingInfo[batch][pid][msg.sender]; if (user.mined > 0) { collecting.push(CollectingInfo({ collectableTime: block.timestamp + collectingDuration, amount: user.mined, collected: false })); user.mined = 0; } } function collectingHoney(uint256 batch, uint256 pid, address account) external view returns (uint256) { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); CollectingInfo[] storage collecting = collectingInfo[batch][pid][account]; uint256 total = 0; for (uint i = 0; i < collecting.length; ++i) { if (!collecting[i].collected && block.timestamp < collecting[i].collectableTime) { total = total.add(collecting[i].amount); } } return total; } function collectableHoney(uint256 batch, uint256 pid, address account) external view returns (uint256) { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); CollectingInfo[] storage collecting = collectingInfo[batch][pid][account]; uint256 total = 0; for (uint i = 0; i < collecting.length; ++i) { if (!collecting[i].collected && block.timestamp >= collecting[i].collectableTime) { total = total.add(collecting[i].amount); } } return total; } function collectHoney(uint256 batch, uint256 pid) external { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); CollectingInfo[] storage collecting = collectingInfo[batch][pid][msg.sender]; require(collecting.length > 0, "nothing to collect"); uint256 total = 0; for (uint i = 0; i < collecting.length; ++i) { if (!collecting[i].collected && block.timestamp >= collecting[i].collectableTime) { total = total.add(collecting[i].amount); collecting[i].collected = true; } } safeHoneyTransfer(batch, pid, msg.sender, total); } function instantCollectHoney(uint256 batch, uint256 pid) external { require(batch < batchInfo.length, "batch must exist"); require(pid < poolInfo[batch].length, "pool must exist"); withdraw(batch, pid, 0); UserInfo storage user = userInfo[batch][pid][msg.sender]; if (user.mined > 0) { uint256 portion = 10000 - instantCollectBurnRate; safeHoneyTransfer(batch, pid, msg.sender, user.mined.mul(portion).div(10000)); honeyToken.transfer(burnDestination, user.mined.mul(instantCollectBurnRate).div(10000)); user.mined = 0; } } function setInstantCollectBurnRate(uint256 value) public onlyOwner { require(value <= 10000, "Value range: 0 ~ 10000"); instantCollectBurnRate = value; } function setCollectingDuration(uint256 value) public onlyOwner { collectingDuration = value; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_honeyToken","type":"address"},{"internalType":"address","name":"_burnDestination","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"batch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"batch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"batch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"honeyPerBlock","type":"uint256"}],"name":"addBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"contract IERC20","name":"stakingToken","type":"address"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"batchInfo","outputs":[{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"honeyPerBlock","type":"uint256"},{"internalType":"uint256","name":"totalAllocPoint","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"collectHoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"collectableHoney","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"collectingHoney","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"collectingInfo","outputs":[{"internalType":"uint256","name":"collectableTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"collected","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPendingBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"honeyToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"instantCollectBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"instantCollectHoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"toBatch","type":"uint256"},{"internalType":"uint256","name":"toPid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromBatch","type":"uint256"},{"internalType":"uint256","name":"fromPid","type":"uint256"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"minedHoney","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"stakingToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accHoneyPerShare","type":"uint256"},{"internalType":"uint256","name":"totalShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setCollectingDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setInstantCollectBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"startCollecting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"}],"name":"updateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"mined","type":"uint256"},{"internalType":"uint256","name":"collected","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526203f480600655610fa06007553480156200001e57600080fd5b506040516200499d3803806200499d833981810160405260408110156200004457600080fd5b8101908080519060200190929190805190602001909291905050506000620000716200019960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620001a1565b600033905090565b6147ec80620001b16000396000f3fe608060405234801561001057600080fd5b50600436106101c35760003560e01c80638164bf08116100f9578063c07896c811610097578063e38999c011610071578063e38999c014610828578063e998973b146108a6578063f2fde38b146108de578063f7d81ce714610922576101c3565b8063c07896c814610737578063cac860e3146107b8578063e13119fe146107e6576101c3565b806396ed7f89116100d357806396ed7f8914610667578063985dd1041461069f578063a3e7718e146106bd578063a41fe49f146106f5576101c3565b80638164bf08146105a95780638da5cb5b146105c75780638e7de46d146105fb576101c3565b806343a233211161016657806379b36a061161014057806379b36a06146104705780637e156e77146104f65780638049eecb14610524578063815bda4714610552576101c3565b806343a23321146103a4578063618f858d14610410578063715018a614610466576101c3565b8063149dfd48116101a2578063149dfd48146102765780631f276b6e146102e257806329831f5d1461031a57806330da10981461034e576101c3565b8062aeef8a146101c85780630f395f301461020a5780630fca968714610242575b600080fd5b610208600480360360608110156101de57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061097a565b005b6102406004803603604081101561022057600080fd5b810190808035906020019092919080359060200190929190505050610d52565b005b61024a611027565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102cc6004803603606081101561028c57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061104d565b6040518082815260200191505060405180910390f35b610318600480360360408110156102f857600080fd5b81019080803590602001909291908035906020019092919050505061134b565b005b6103226115a6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a2600480360360a081101561036457600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506115cc565b005b6103fa600480360360608110156103ba57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a4b565b6040518082815260200191505060405180910390f35b6104506004803603606081101561042657600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611c6b565b6040518082815260200191505060405180910390f35b61046e611d7b565b005b6104d06004803603608081101561048657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f01565b604051808481526020018381526020018215158152602001935050505060405180910390f35b6105226004803603602081101561050c57600080fd5b8101908080359060200190929190505050611f6c565b005b6105506004803603602081101561053a57600080fd5b8101908080359060200190929190505050612026565b005b61057e6004803603602081101561056857600080fd5b81019080803590602001909291905050506120f8565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6105b1612135565b6040518082815260200191505060405180910390f35b6105cf61213b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106516004803603606081101561061157600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612164565b6040518082815260200191505060405180910390f35b61069d6004803603604081101561067d57600080fd5b810190808035906020019092919080359060200190929190505050612385565b005b6106a76125e2565b6040518082815260200191505060405180910390f35b6106f3600480360360408110156106d357600080fd5b8101908080359060200190929190803590602001909291905050506125e8565b005b6107356004803603606081101561070b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612867565b005b61078d6004803603606081101561074d57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c06565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6107e4600480360360208110156107ce57600080fd5b8101908080359060200190929190505050612c50565b005b610826600480360360608110156107fc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612d9a565b005b61085e6004803603604081101561083e57600080fd5b810190808035906020019092919080359060200190929190505050613230565b604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6108dc600480360360408110156108bc57600080fd5b8101908080359060200190929190803590602001909291905050506132a0565b005b610920600480360360208110156108f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613592565b005b6109786004803603606081101561093857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061379d565b005b60018054905083106109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000848152602001908152602001600020805490508210610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060018481548110610a8e57fe5b9060005260206000209060040201905080600101544310610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f626174636820656e64656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008681526020019081526020016000208481548110610b3757fe5b90600052602060002090600502019050600060036000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610bb68686612385565b600081600001541115610c27576000610c0d8260010154610bff64e8d4a51000610bf187600301548760000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613b3b90919063ffffffff16565b90506000811115610c2557610c2487873384613b85565b5b505b6000841115610ca157610c813330868560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c10909392919063ffffffff16565b610c98848260000154613cd190919063ffffffff16565b81600001819055505b610cb8848360040154613cd190919063ffffffff16565b8260040181905550610cf264e8d4a51000610ce484600301548460000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b816001018190555084863373ffffffffffffffffffffffffffffffffffffffff167f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e876040518082815260200191505060405180910390a4505050505050565b6001805490508210610dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000838152602001908152602001600020805490508110610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060046000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000818054905011610f36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6e6f7468696e6720746f20636f6c6c656374000000000000000000000000000081525060200191505060405180910390fd5b6000805b828054905081101561101457828181548110610f5257fe5b906000526020600020906003020160020160009054906101000a900460ff16158015610f9b5750828181548110610f8557fe5b9060005260206000209060030201600001544210155b1561100957610fd0838281548110610faf57fe5b90600052602060002090600302016001015483613cd190919063ffffffff16565b91506001838281548110610fe057fe5b906000526020600020906003020160020160006101000a81548160ff0219169083151502179055505b806001019050610f3a565b5061102184843384613d59565b50505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060018054905084106110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000858152602001908152602001600020805490508310611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b60006001858154811061116357fe5b906000526020600020906004020190508060000154431015611189576000915050611344565b60006002600087815260200190815260200160002085815481106111a957fe5b90600052602060002090600502019050600060036000888152602001908152602001600020600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905082600201544311801561123f57506000836004015414155b156112e357600061125589856002015443611c6b565b9050600061129c866003015461128e87600101546112808a6002015487613a6b90919063ffffffff16565b613a6b90919063ffffffff16565b613af190919063ffffffff16565b90506112de6112cf86600401546112c164e8d4a5100085613a6b90919063ffffffff16565b613af190919063ffffffff16565b84613cd190919063ffffffff16565b925050505b61133d826002015461132f846001015461132164e8d4a51000611313878960000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613b3b90919063ffffffff16565b613cd190919063ffffffff16565b9450505050505b9392505050565b60018054905082106113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000838152602001908152602001600020805490508110611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060026000848152602001908152602001600020828154811061147057fe5b90600052602060002090600502019050600060036000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506115383382600001548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140ee9092919063ffffffff16565b82843373ffffffffffffffffffffffffffffffffffffffff167f2369db1bafee945aee5630782f4a170682e3f8188d8dc247a4c73eb8c9e692d284600001546040518082815260200191505060405180910390a4600081600001819055506000816001018190555050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001805490508510611646576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746172676574206261746368206d75737420657869737400000000000000000081525060200191505060405180910390fd5b600260008681526020019081526020016000208054905084106116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74617267657420706f6f6c206d7573742065786973740000000000000000000081525060200191505060405180910390fd5b600180549050821061174b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f736f75726365206261746368206d75737420657869737400000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000208054905081106117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f736f7572636520706f6f6c206d7573742065786973740000000000000000000081525060200191505060405180910390fd5b6000600186815481106117e557fe5b906000526020600020906004020190508060010154431061186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f626174636820656e64656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060036000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541115611a4257600060026000868152602001908152602001600020848154811061190057fe5b906000526020600020906005020190506000600260008a8152602001908152602001600020888154811061193057fe5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d757374206265207468652073616d6520746f6b656e0000000000000000000081525060200191505060405180910390fd5b611a34868689612867565b611a3f89898961097a565b50505b50505050505050565b60006001805490508410611ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000858152602001908152602001600020805490508310611b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060046000868152602001908152602001600020600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000805b8280549050811015611c5e57828181548110611bd357fe5b906000526020600020906003020160020160009054906101000a900460ff16158015611c1b5750828181548110611c0657fe5b90600052602060002090600302016000015442105b15611c5357611c50838281548110611c2f57fe5b90600052602060002090600302016001015483613cd190919063ffffffff16565b91505b806001019050611bbb565b5080925050509392505050565b60006001805490508410611ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b600060018581548110611cf657fe5b906000526020600020906004020190508060000154831015611d1c576000915050611d74565b8060010154831115611d5d578060010154841115611d3e576000915050611d74565b611d55848260010154613b3b90919063ffffffff16565b915050611d74565b611d708484613b3b90919063ffffffff16565b9150505b9392505050565b611d83614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60046020528360005260406000206020528260005260406000206020528160005260406000208181548110611f3257fe5b90600052602060002090600302016000935093505050508060000154908060010154908060020160009054906101000a900460ff16905083565b6001805490508110611fe6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60006002600083815260200190815260200160002080549050905060005b81811015612021576120168382612385565b806001019050612004565b505050565b61202e614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060068190555050565b6001818154811061210557fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030154905084565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060018054905084106121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6002600085815260200190815260200160002080549050831061226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060046000868152602001908152602001600020600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000805b8280549050811015612378578281815481106122ec57fe5b906000526020600020906003020160020160009054906101000a900460ff16158015612335575082818154811061231f57fe5b9060005260206000209060030201600001544210155b1561236d5761236a83828154811061234957fe5b90600052602060002090600302016001015483613cd190919063ffffffff16565b91505b8060010190506122d4565b5080925050509392505050565b60018054905082106123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6002600083815260200190815260200160002080549050811061248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b60006001838154811061249957fe5b9060005260206000209060040201905060006002600085815260200190815260200160002083815481106124c957fe5b9060005260206000209060050201905081600001544310806124ef575080600201544311155b80612501575081600101548160020154115b1561250d5750506125de565b60008160040154141561252a5743816002018190555050506125de565b600061253b85836002015443611c6b565b9050600061258284600301546125748560010154612566886002015487613a6b90919063ffffffff16565b613a6b90919063ffffffff16565b613af190919063ffffffff16565b90506125c86125b584600401546125a764e8d4a5100085613a6b90919063ffffffff16565b613af190919063ffffffff16565b8460030154613cd190919063ffffffff16565b8360030181905550438360020181905550505050505b5050565b60075481565b6001805490508210612662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000208054905081106126ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b6126f982826000612867565b600060036000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060046000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600082600201541115612861578060405180606001604052806006544201815260200184600201548152602001600015158152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055505050600082600201819055505b50505050565b60018054905083106128e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6002600084815260200190815260200160002080549050821061296c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060036000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001541015612a4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b612a558484612385565b6000600260008681526020019081526020016000208481548110612a7557fe5b906000526020600020906005020190506000612acf8360010154612ac164e8d4a51000612ab386600301548860000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613b3b90919063ffffffff16565b90506000811115612ae757612ae686863384613b85565b5b612b3633858460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140ee9092919063ffffffff16565b612b4d848460000154613b3b90919063ffffffff16565b8360000181905550612b6c848360040154613b3b90919063ffffffff16565b8260040181905550612ba664e8d4a51000612b9884600301548660000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b836001018190555084863373ffffffffffffffffffffffffffffffffffffffff167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94876040518082815260200191505060405180910390a4505050505050565b600360205282600052604060002060205281600052604060002060205280600052604060002060009250925050508060000154908060010154908060020154908060030154905084565b612c58614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612710811115612d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f56616c75652072616e67653a2030207e2031303030300000000000000000000081525060200191505060405180910390fd5b8060078190555050565b612da2614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b828211612eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806146776029913960400191505060405180910390fd5b438211612f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806146a06037913960400191505060405180910390fd5b438311612f6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806147546039913960400191505060405180910390fd5b60006001805490501115612ffc57600060018080805490500381548110612f8d57fe5b906000526020600020906004020160010154905080841015612ffa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806146fd6036913960400191505060405180910390fd5b505b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561308757600080fd5b505afa15801561309b573d6000803e3d6000fd5b505050506040513d60208110156130b157600080fd5b8101908080519060200190929190505050905060006130eb836130dd8787613b3b90919063ffffffff16565b613a6b90919063ffffffff16565b905080821015613163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f696e73756666696369656e7420484f4e455920666f722074686520626174636881525060200191505060405180910390fd5b6131b2333083600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c10909392919063ffffffff16565b60016040518060800160405280878152602001868152602001858152602001600081525090806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015550505050505050565b6002602052816000526040600020818154811061324957fe5b9060005260206000209060050201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b600180549050821061331a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000208054905081106133a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b6133b182826000612867565b600060036000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154111561358d57600060075461271003905061346484843361345f612710613451878960020154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613d59565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166134f26127106134e46007548860020154613a6b90919063ffffffff16565b613af190919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561354557600080fd5b505af1158015613559573d6000803e3d6000fd5b505050506040513d602081101561356f57600080fd5b81019080805190602001909291905050505060008260020181905550505b505050565b61359a614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461365a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146d76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6137a5614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018054905083106138df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6000600184815481106138ee57fe5b90600052602060002090600402019050438160000154111580156139155750806001015443105b156139245761392384611f6c565b5b60008160000154431161393b57816000015461393d565b435b9050613956838360030154613cd190919063ffffffff16565b6001868154811061396357fe5b906000526020600020906004020160030181905550600260008681526020019081526020016000206040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001838152602001600081526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015550505050505050565b600080831415613a7e5760009050613aeb565b6000828402905082848281613a8f57fe5b0414613ae6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806147336021913960400191505060405180910390fd5b809150505b92915050565b6000613b3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614198565b905092915050565b6000613b7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061425e565b905092915050565b600060036000868152602001908152602001600020600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050613c01828260020154613cd190919063ffffffff16565b81600201819055505050505050565b613ccb846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061431e565b50505050565b600080828401905083811015613d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613de457600080fd5b505afa158015613df8573d6000803e3d6000fd5b505050506040513d6020811015613e0e57600080fd5b8101908080519060200190929190505050905060008111613e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e73756666696369656e7420484f4e45592062616c616e636500000000000081525060200191505060405180910390fd5b600060036000878152602001908152602001600020600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081831115613ff757600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613f9757600080fd5b505af1158015613fab573d6000803e3d6000fd5b505050506040513d6020811015613fc157600080fd5b810190808051906020019092919050505050613fea828260030154613cd190919063ffffffff16565b81600301819055506140e6565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561408a57600080fd5b505af115801561409e573d6000803e3d6000fd5b505050506040513d60208110156140b457600080fd5b8101908080519060200190929190505050506140dd838260030154613cd190919063ffffffff16565b81600301819055505b505050505050565b61418b8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061431e565b505050565b600033905090565b60008083118290614244576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156142095780820151818401526020810190506141ee565b50505050905090810190601f1680156142365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161425057fe5b049050809150509392505050565b600083831115829061430b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156142d05780820151818401526020810190506142b5565b50505050905090810190601f1680156142fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060614380826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661440d9092919063ffffffff16565b9050600081511115614408578080602001905160208110156143a157600080fd5b8101908080519060200190929190505050614407576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061478d602a913960400191505060405180910390fd5b5b505050565b606061441c8484600085614425565b90509392505050565b60606144308561462b565b6144a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106144f257805182526020820191506020810190506020830392506144cf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614554576040519150601f19603f3d011682016040523d82523d6000602084013e614559565b606091505b5091509150811561456e578092505050614623565b6000815111156145815780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145e85780820151818401526020810190506145cd565b50505050905090810190601f1680156146155780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561466d57506000801b8214155b9250505091905056fe656e64426c6f636b2073686f756c64206265206c6172676572207468616e207374617274426c6f636b656e64426c6f636b2073686f756c64206265206c6172676572207468616e207468652063757272656e7420626c6f636b206e756d6265724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737374617274426c6f636b2073686f756c64206265203e3d2074686520656e64426c6f636b206f6620746865206c617374206261746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777374617274426c6f636b2073686f756c64206265206c6172676572207468616e207468652063757272656e7420626c6f636b206e756d6265725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220fe192481cb672ebbded81a9506cc2cbd4745347e2f374f4c7abaed10b9c778bd64736f6c634300060c003300000000000000000000000037c9eb4cef7571f27136145c82c37a01f2a8aa16000000000000000000000000cf3ec27ad2d9be83fcead7629ac819f2b7eef699
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c35760003560e01c80638164bf08116100f9578063c07896c811610097578063e38999c011610071578063e38999c014610828578063e998973b146108a6578063f2fde38b146108de578063f7d81ce714610922576101c3565b8063c07896c814610737578063cac860e3146107b8578063e13119fe146107e6576101c3565b806396ed7f89116100d357806396ed7f8914610667578063985dd1041461069f578063a3e7718e146106bd578063a41fe49f146106f5576101c3565b80638164bf08146105a95780638da5cb5b146105c75780638e7de46d146105fb576101c3565b806343a233211161016657806379b36a061161014057806379b36a06146104705780637e156e77146104f65780638049eecb14610524578063815bda4714610552576101c3565b806343a23321146103a4578063618f858d14610410578063715018a614610466576101c3565b8063149dfd48116101a2578063149dfd48146102765780631f276b6e146102e257806329831f5d1461031a57806330da10981461034e576101c3565b8062aeef8a146101c85780630f395f301461020a5780630fca968714610242575b600080fd5b610208600480360360608110156101de57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061097a565b005b6102406004803603604081101561022057600080fd5b810190808035906020019092919080359060200190929190505050610d52565b005b61024a611027565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102cc6004803603606081101561028c57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061104d565b6040518082815260200191505060405180910390f35b610318600480360360408110156102f857600080fd5b81019080803590602001909291908035906020019092919050505061134b565b005b6103226115a6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a2600480360360a081101561036457600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506115cc565b005b6103fa600480360360608110156103ba57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a4b565b6040518082815260200191505060405180910390f35b6104506004803603606081101561042657600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611c6b565b6040518082815260200191505060405180910390f35b61046e611d7b565b005b6104d06004803603608081101561048657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f01565b604051808481526020018381526020018215158152602001935050505060405180910390f35b6105226004803603602081101561050c57600080fd5b8101908080359060200190929190505050611f6c565b005b6105506004803603602081101561053a57600080fd5b8101908080359060200190929190505050612026565b005b61057e6004803603602081101561056857600080fd5b81019080803590602001909291905050506120f8565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6105b1612135565b6040518082815260200191505060405180910390f35b6105cf61213b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106516004803603606081101561061157600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612164565b6040518082815260200191505060405180910390f35b61069d6004803603604081101561067d57600080fd5b810190808035906020019092919080359060200190929190505050612385565b005b6106a76125e2565b6040518082815260200191505060405180910390f35b6106f3600480360360408110156106d357600080fd5b8101908080359060200190929190803590602001909291905050506125e8565b005b6107356004803603606081101561070b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612867565b005b61078d6004803603606081101561074d57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c06565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6107e4600480360360208110156107ce57600080fd5b8101908080359060200190929190505050612c50565b005b610826600480360360608110156107fc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612d9a565b005b61085e6004803603604081101561083e57600080fd5b810190808035906020019092919080359060200190929190505050613230565b604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6108dc600480360360408110156108bc57600080fd5b8101908080359060200190929190803590602001909291905050506132a0565b005b610920600480360360208110156108f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613592565b005b6109786004803603606081101561093857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061379d565b005b60018054905083106109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000848152602001908152602001600020805490508210610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060018481548110610a8e57fe5b9060005260206000209060040201905080600101544310610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f626174636820656e64656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600260008681526020019081526020016000208481548110610b3757fe5b90600052602060002090600502019050600060036000878152602001908152602001600020600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610bb68686612385565b600081600001541115610c27576000610c0d8260010154610bff64e8d4a51000610bf187600301548760000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613b3b90919063ffffffff16565b90506000811115610c2557610c2487873384613b85565b5b505b6000841115610ca157610c813330868560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c10909392919063ffffffff16565b610c98848260000154613cd190919063ffffffff16565b81600001819055505b610cb8848360040154613cd190919063ffffffff16565b8260040181905550610cf264e8d4a51000610ce484600301548460000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b816001018190555084863373ffffffffffffffffffffffffffffffffffffffff167f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e876040518082815260200191505060405180910390a4505050505050565b6001805490508210610dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000838152602001908152602001600020805490508110610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060046000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000818054905011610f36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6e6f7468696e6720746f20636f6c6c656374000000000000000000000000000081525060200191505060405180910390fd5b6000805b828054905081101561101457828181548110610f5257fe5b906000526020600020906003020160020160009054906101000a900460ff16158015610f9b5750828181548110610f8557fe5b9060005260206000209060030201600001544210155b1561100957610fd0838281548110610faf57fe5b90600052602060002090600302016001015483613cd190919063ffffffff16565b91506001838281548110610fe057fe5b906000526020600020906003020160020160006101000a81548160ff0219169083151502179055505b806001019050610f3a565b5061102184843384613d59565b50505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060018054905084106110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000858152602001908152602001600020805490508310611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b60006001858154811061116357fe5b906000526020600020906004020190508060000154431015611189576000915050611344565b60006002600087815260200190815260200160002085815481106111a957fe5b90600052602060002090600502019050600060036000888152602001908152602001600020600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905082600201544311801561123f57506000836004015414155b156112e357600061125589856002015443611c6b565b9050600061129c866003015461128e87600101546112808a6002015487613a6b90919063ffffffff16565b613a6b90919063ffffffff16565b613af190919063ffffffff16565b90506112de6112cf86600401546112c164e8d4a5100085613a6b90919063ffffffff16565b613af190919063ffffffff16565b84613cd190919063ffffffff16565b925050505b61133d826002015461132f846001015461132164e8d4a51000611313878960000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613b3b90919063ffffffff16565b613cd190919063ffffffff16565b9450505050505b9392505050565b60018054905082106113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000838152602001908152602001600020805490508110611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060026000848152602001908152602001600020828154811061147057fe5b90600052602060002090600502019050600060036000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506115383382600001548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140ee9092919063ffffffff16565b82843373ffffffffffffffffffffffffffffffffffffffff167f2369db1bafee945aee5630782f4a170682e3f8188d8dc247a4c73eb8c9e692d284600001546040518082815260200191505060405180910390a4600081600001819055506000816001018190555050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001805490508510611646576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746172676574206261746368206d75737420657869737400000000000000000081525060200191505060405180910390fd5b600260008681526020019081526020016000208054905084106116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74617267657420706f6f6c206d7573742065786973740000000000000000000081525060200191505060405180910390fd5b600180549050821061174b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f736f75726365206261746368206d75737420657869737400000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000208054905081106117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f736f7572636520706f6f6c206d7573742065786973740000000000000000000081525060200191505060405180910390fd5b6000600186815481106117e557fe5b906000526020600020906004020190508060010154431061186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f626174636820656e64656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060036000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541115611a4257600060026000868152602001908152602001600020848154811061190057fe5b906000526020600020906005020190506000600260008a8152602001908152602001600020888154811061193057fe5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d757374206265207468652073616d6520746f6b656e0000000000000000000081525060200191505060405180910390fd5b611a34868689612867565b611a3f89898961097a565b50505b50505050505050565b60006001805490508410611ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60026000858152602001908152602001600020805490508310611b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060046000868152602001908152602001600020600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000805b8280549050811015611c5e57828181548110611bd357fe5b906000526020600020906003020160020160009054906101000a900460ff16158015611c1b5750828181548110611c0657fe5b90600052602060002090600302016000015442105b15611c5357611c50838281548110611c2f57fe5b90600052602060002090600302016001015483613cd190919063ffffffff16565b91505b806001019050611bbb565b5080925050509392505050565b60006001805490508410611ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b600060018581548110611cf657fe5b906000526020600020906004020190508060000154831015611d1c576000915050611d74565b8060010154831115611d5d578060010154841115611d3e576000915050611d74565b611d55848260010154613b3b90919063ffffffff16565b915050611d74565b611d708484613b3b90919063ffffffff16565b9150505b9392505050565b611d83614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60046020528360005260406000206020528260005260406000206020528160005260406000208181548110611f3257fe5b90600052602060002090600302016000935093505050508060000154908060010154908060020160009054906101000a900460ff16905083565b6001805490508110611fe6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b60006002600083815260200190815260200160002080549050905060005b81811015612021576120168382612385565b806001019050612004565b505050565b61202e614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060068190555050565b6001818154811061210557fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030154905084565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060018054905084106121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6002600085815260200190815260200160002080549050831061226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060046000868152602001908152602001600020600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000805b8280549050811015612378578281815481106122ec57fe5b906000526020600020906003020160020160009054906101000a900460ff16158015612335575082818154811061231f57fe5b9060005260206000209060030201600001544210155b1561236d5761236a83828154811061234957fe5b90600052602060002090600302016001015483613cd190919063ffffffff16565b91505b8060010190506122d4565b5080925050509392505050565b60018054905082106123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6002600083815260200190815260200160002080549050811061248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b60006001838154811061249957fe5b9060005260206000209060040201905060006002600085815260200190815260200160002083815481106124c957fe5b9060005260206000209060050201905081600001544310806124ef575080600201544311155b80612501575081600101548160020154115b1561250d5750506125de565b60008160040154141561252a5743816002018190555050506125de565b600061253b85836002015443611c6b565b9050600061258284600301546125748560010154612566886002015487613a6b90919063ffffffff16565b613a6b90919063ffffffff16565b613af190919063ffffffff16565b90506125c86125b584600401546125a764e8d4a5100085613a6b90919063ffffffff16565b613af190919063ffffffff16565b8460030154613cd190919063ffffffff16565b8360030181905550438360020181905550505050505b5050565b60075481565b6001805490508210612662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000208054905081106126ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b6126f982826000612867565b600060036000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060046000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600082600201541115612861578060405180606001604052806006544201815260200184600201548152602001600015158152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055505050600082600201819055505b50505050565b60018054905083106128e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6002600084815260200190815260200160002080549050821061296c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b600060036000858152602001908152602001600020600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001541015612a4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b612a558484612385565b6000600260008681526020019081526020016000208481548110612a7557fe5b906000526020600020906005020190506000612acf8360010154612ac164e8d4a51000612ab386600301548860000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613b3b90919063ffffffff16565b90506000811115612ae757612ae686863384613b85565b5b612b3633858460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140ee9092919063ffffffff16565b612b4d848460000154613b3b90919063ffffffff16565b8360000181905550612b6c848360040154613b3b90919063ffffffff16565b8260040181905550612ba664e8d4a51000612b9884600301548660000154613a6b90919063ffffffff16565b613af190919063ffffffff16565b836001018190555084863373ffffffffffffffffffffffffffffffffffffffff167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94876040518082815260200191505060405180910390a4505050505050565b600360205282600052604060002060205281600052604060002060205280600052604060002060009250925050508060000154908060010154908060020154908060030154905084565b612c58614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612710811115612d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f56616c75652072616e67653a2030207e2031303030300000000000000000000081525060200191505060405180910390fd5b8060078190555050565b612da2614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b828211612eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806146776029913960400191505060405180910390fd5b438211612f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806146a06037913960400191505060405180910390fd5b438311612f6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806147546039913960400191505060405180910390fd5b60006001805490501115612ffc57600060018080805490500381548110612f8d57fe5b906000526020600020906004020160010154905080841015612ffa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806146fd6036913960400191505060405180910390fd5b505b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561308757600080fd5b505afa15801561309b573d6000803e3d6000fd5b505050506040513d60208110156130b157600080fd5b8101908080519060200190929190505050905060006130eb836130dd8787613b3b90919063ffffffff16565b613a6b90919063ffffffff16565b905080821015613163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f696e73756666696369656e7420484f4e455920666f722074686520626174636881525060200191505060405180910390fd5b6131b2333083600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c10909392919063ffffffff16565b60016040518060800160405280878152602001868152602001858152602001600081525090806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015550505050505050565b6002602052816000526040600020818154811061324957fe5b9060005260206000209060050201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b600180549050821061331a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000208054905081106133a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f706f6f6c206d757374206578697374000000000000000000000000000000000081525060200191505060405180910390fd5b6133b182826000612867565b600060036000848152602001908152602001600020600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154111561358d57600060075461271003905061346484843361345f612710613451878960020154613a6b90919063ffffffff16565b613af190919063ffffffff16565b613d59565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166134f26127106134e46007548860020154613a6b90919063ffffffff16565b613af190919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561354557600080fd5b505af1158015613559573d6000803e3d6000fd5b505050506040513d602081101561356f57600080fd5b81019080805190602001909291905050505060008260020181905550505b505050565b61359a614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461365a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146d76026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6137a5614190565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018054905083106138df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6261746368206d7573742065786973740000000000000000000000000000000081525060200191505060405180910390fd5b6000600184815481106138ee57fe5b90600052602060002090600402019050438160000154111580156139155750806001015443105b156139245761392384611f6c565b5b60008160000154431161393b57816000015461393d565b435b9050613956838360030154613cd190919063ffffffff16565b6001868154811061396357fe5b906000526020600020906004020160030181905550600260008681526020019081526020016000206040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001838152602001600081526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015550505050505050565b600080831415613a7e5760009050613aeb565b6000828402905082848281613a8f57fe5b0414613ae6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806147336021913960400191505060405180910390fd5b809150505b92915050565b6000613b3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614198565b905092915050565b6000613b7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061425e565b905092915050565b600060036000868152602001908152602001600020600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050613c01828260020154613cd190919063ffffffff16565b81600201819055505050505050565b613ccb846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061431e565b50505050565b600080828401905083811015613d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613de457600080fd5b505afa158015613df8573d6000803e3d6000fd5b505050506040513d6020811015613e0e57600080fd5b8101908080519060200190929190505050905060008111613e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e73756666696369656e7420484f4e45592062616c616e636500000000000081525060200191505060405180910390fd5b600060036000878152602001908152602001600020600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905081831115613ff757600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613f9757600080fd5b505af1158015613fab573d6000803e3d6000fd5b505050506040513d6020811015613fc157600080fd5b810190808051906020019092919050505050613fea828260030154613cd190919063ffffffff16565b81600301819055506140e6565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561408a57600080fd5b505af115801561409e573d6000803e3d6000fd5b505050506040513d60208110156140b457600080fd5b8101908080519060200190929190505050506140dd838260030154613cd190919063ffffffff16565b81600301819055505b505050505050565b61418b8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061431e565b505050565b600033905090565b60008083118290614244576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156142095780820151818401526020810190506141ee565b50505050905090810190601f1680156142365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161425057fe5b049050809150509392505050565b600083831115829061430b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156142d05780820151818401526020810190506142b5565b50505050905090810190601f1680156142fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060614380826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661440d9092919063ffffffff16565b9050600081511115614408578080602001905160208110156143a157600080fd5b8101908080519060200190929190505050614407576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061478d602a913960400191505060405180910390fd5b5b505050565b606061441c8484600085614425565b90509392505050565b60606144308561462b565b6144a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106144f257805182526020820191506020810190506020830392506144cf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614554576040519150601f19603f3d011682016040523d82523d6000602084013e614559565b606091505b5091509150811561456e578092505050614623565b6000815111156145815780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145e85780820151818401526020810190506145cd565b50505050905090810190601f1680156146155780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561466d57506000801b8214155b9250505091905056fe656e64426c6f636b2073686f756c64206265206c6172676572207468616e207374617274426c6f636b656e64426c6f636b2073686f756c64206265206c6172676572207468616e207468652063757272656e7420626c6f636b206e756d6265724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737374617274426c6f636b2073686f756c64206265203e3d2074686520656e64426c6f636b206f6620746865206c617374206261746368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777374617274426c6f636b2073686f756c64206265206c6172676572207468616e207468652063757272656e7420626c6f636b206e756d6265725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220fe192481cb672ebbded81a9506cc2cbd4745347e2f374f4c7abaed10b9c778bd64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000037c9eb4cef7571f27136145c82c37a01f2a8aa16000000000000000000000000cf3ec27ad2d9be83fcead7629ac819f2b7eef699
-----Decoded View---------------
Arg [0] : _honeyToken (address): 0x37C9EB4CeF7571f27136145C82c37a01F2a8Aa16
Arg [1] : _burnDestination (address): 0xCf3eC27aD2D9Be83fCead7629ac819F2B7EEf699
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000037c9eb4cef7571f27136145c82c37a01f2a8aa16
Arg [1] : 000000000000000000000000cf3ec27ad2d9be83fcead7629ac819f2b7eef699
Loading...
Loading
Loading...
Loading
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.