Contract
0x7d2040e4eeed5c9046993e9ffd581404f943652f
11
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
VestingWallet
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-01-11 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (finance/VestingWallet.sol) pragma solidity ^0.8.0; /** * @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 owner of the contract */ function owner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /** * @dev 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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } /** * @title VestingWallet * @dev This contract handles the vesting of Eth and ERC20 tokens for a given beneficiary. Custody of multiple tokens * can be given to this contract, which will release the token to the beneficiary following a given vesting schedule. * The vesting schedule is customizable through the {vestedAmount} function. * * Any token transferred to this contract will follow the vesting schedule as if they were locked from the beginning. * Consequently, if the vesting has already started, any amount of tokens sent to this contract will (at least partly) * be immediately releasable. */ contract VestingWallet is Context { event EtherReleased(uint256 amount); event ERC20Released(address indexed token, uint256 amount); uint256 private _released; mapping(address => uint256) private _erc20Released; address private _beneficiary; uint64 private immutable _start; uint64 private immutable _duration; /** * @dev Set the beneficiary, start timestamp and vesting duration of the vesting wallet. */ constructor( address beneficiaryAddress, uint64 startTimestamp, uint64 durationSeconds ) { require(beneficiaryAddress != address(0), "VestingWallet: beneficiary is zero address"); _beneficiary = beneficiaryAddress; _start = startTimestamp; _duration = durationSeconds; } /** * @dev The contract should be able to receive Eth. */ receive() external payable virtual {} /** * @dev Getter for the beneficiary address. */ function beneficiary() public view virtual returns (address) { return _beneficiary; } function changeBeneficiary(address newBeneficiary) public virtual{ require(msg.sender == _beneficiary, "ECR20: Only current beneficiary can change beneficiaries"); _beneficiary = newBeneficiary; } /** * @dev Getter for the start timestamp. */ function start() public view virtual returns (uint256) { return _start; } /** * @dev Getter for the vesting duration. */ function duration() public view virtual returns (uint256) { return _duration; } /** * @dev Amount of eth already released */ function released() public view virtual returns (uint256) { return _released; } /** * @dev Amount of token already released */ function released(address token) public view virtual returns (uint256) { return _erc20Released[token]; } /** * @dev Release the native token (ether) that have already vested. * * Emits a {TokensReleased} event. */ function release() public virtual { uint256 releasable = vestedAmount(uint64(block.timestamp)) - released(); _released += releasable; emit EtherReleased(releasable); Address.sendValue(payable(beneficiary()), releasable); } /** * @dev Release the tokens that have already vested. * * Emits a {TokensReleased} event. */ function release(address token) public virtual { uint256 releasable = vestedAmount(token, uint64(block.timestamp)) - released(token); _erc20Released[token] += releasable; emit ERC20Released(token, releasable); SafeERC20.safeTransfer(IERC20(token), beneficiary(), releasable); } /** * @dev Calculates the amount of ether that has already vested. Default implementation is a linear vesting curve. */ function vestedAmount(uint64 timestamp) public view virtual returns (uint256) { return _vestingSchedule(address(this).balance + released(), timestamp); } /** * @dev Calculates the amount of tokens that has already vested. Default implementation is a linear vesting curve. */ function vestedAmount(address token, uint64 timestamp) public view virtual returns (uint256) { return _vestingSchedule(IERC20(token).balanceOf(address(this)) + released(token), timestamp); } /** * @dev Virtual implementation of the vesting formula. This returns the amout vested, as a function of time, for * an asset given its total historical allocation. */ function _vestingSchedule(uint256 totalAllocation, uint64 timestamp) internal view virtual returns (uint256) { if (timestamp < start()) { return 0; } else if (timestamp > start() + duration()) { return totalAllocation; } else { return (totalAllocation * (timestamp - start())) / duration(); } } }
[{"inputs":[{"internalType":"address","name":"beneficiaryAddress","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"uint64","name":"durationSeconds","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherReleased","type":"event"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newBeneficiary","type":"address"}],"name":"changeBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200167038038062001670833981810160405281019062000037919062000160565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620000aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a190620001dd565b60405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508167ffffffffffffffff1660808167ffffffffffffffff1660c01b815250508067ffffffffffffffff1660a08167ffffffffffffffff1660c01b81525050505050620002db565b6000815190506200014381620002a7565b92915050565b6000815190506200015a81620002c1565b92915050565b6000806000606084860312156200017657600080fd5b6000620001868682870162000132565b9350506020620001998682870162000149565b9250506040620001ac8682870162000149565b9150509250925092565b6000620001c5602a83620001ff565b9150620001d28262000258565b604082019050919050565b60006020820190508181036000830152620001f881620001b6565b9050919050565b600082825260208201905092915050565b60006200021d8262000224565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600067ffffffffffffffff82169050919050565b7f56657374696e6757616c6c65743a2062656e6566696369617279206973207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b620002b28162000210565b8114620002be57600080fd5b50565b620002cc8162000244565b8114620002d857600080fd5b50565b60805160c01c60a05160c01c6113696200030760003960006102960152600061055001526113696000f3fe6080604052600436106100955760003560e01c806386d1a69f1161005957806386d1a69f1461019a57806396132521146101b15780639852595c146101dc578063be9a655514610219578063dc070657146102445761009c565b80630a17b06b146100a15780630fb5a6b4146100de578063191655871461010957806338af3eed14610132578063810ec23b1461015d5761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100c860048036038101906100c39190610bee565b61026d565b6040516100d59190610ee6565b60405180910390f35b3480156100ea57600080fd5b506100f3610292565b6040516101009190610ee6565b60405180910390f35b34801561011557600080fd5b50610130600480360381019061012b9190610b37565b6102c4565b005b34801561013e57600080fd5b5061014761039f565b6040516101549190610dc0565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f9190610b60565b6103c9565b6040516101919190610ee6565b60405180910390f35b3480156101a657600080fd5b506101af610478565b005b3480156101bd57600080fd5b506101c66104fa565b6040516101d39190610ee6565b60405180910390f35b3480156101e857600080fd5b5061020360048036038101906101fe9190610b37565b610503565b6040516102109190610ee6565b60405180910390f35b34801561022557600080fd5b5061022e61054c565b60405161023b9190610ee6565b60405180910390f35b34801561025057600080fd5b5061026b60048036038101906102669190610b37565b61057e565b005b600061028b61027a6104fa565b476102859190610f33565b83610652565b9050919050565b60007f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16905090565b60006102cf82610503565b6102d983426103c9565b6102e39190611014565b905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546103349190610f33565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167fc0e523490dd523c33b1878c9eb14ff46991e3f5b2cd33710918618f2a39cba1b826040516103819190610ee6565b60405180910390a261039b8261039561039f565b836106ec565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006104706103d784610503565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104109190610dc0565b60206040518083038186803b15801561042857600080fd5b505afa15801561043c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104609190610bc5565b61046a9190610f33565b83610652565b905092915050565b60006104826104fa565b61048b4261026d565b6104959190611014565b9050806000808282546104a89190610f33565b925050819055507fda9d4e5f101b8b9b1c5b76d0c5a9f7923571acfc02376aa076b75a8c080c956b816040516104de9190610ee6565b60405180910390a16104f76104f161039f565b82610772565b50565b60008054905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461060e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060590610e86565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061065c61054c565b8267ffffffffffffffff16101561067657600090506106e6565b61067e610292565b61068661054c565b6106909190610f33565b8267ffffffffffffffff1611156106a9578290506106e6565b6106b1610292565b6106b961054c565b8367ffffffffffffffff166106ce9190611014565b846106d99190610fba565b6106e39190610f89565b90505b92915050565b61076d8363a9059cbb60e01b848460405160240161070b929190610ddb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610866565b505050565b804710156107b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ac90610e46565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516107db90610dab565b60006040518083038185875af1925050503d8060008114610818576040519150601f19603f3d011682016040523d82523d6000602084013e61081d565b606091505b5050905080610861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085890610e26565b60405180910390fd5b505050565b60006108c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661092d9092919063ffffffff16565b905060008151111561092857808060200190518101906108e89190610b9c565b610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90610ec6565b60405180910390fd5b5b505050565b606061093c8484600085610945565b90509392505050565b60608247101561098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098190610e66565b60405180910390fd5b61099385610a59565b6109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990610ea6565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516109fb9190610d94565b60006040518083038185875af1925050503d8060008114610a38576040519150601f19603f3d011682016040523d82523d6000602084013e610a3d565b606091505b5091509150610a4d828286610a7c565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315610a8c57829050610adc565b600083511115610a9f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad39190610e04565b60405180910390fd5b9392505050565b600081359050610af2816112d7565b92915050565b600081519050610b07816112ee565b92915050565b600081519050610b1c81611305565b92915050565b600081359050610b318161131c565b92915050565b600060208284031215610b4957600080fd5b6000610b5784828501610ae3565b91505092915050565b60008060408385031215610b7357600080fd5b6000610b8185828601610ae3565b9250506020610b9285828601610b22565b9150509250929050565b600060208284031215610bae57600080fd5b6000610bbc84828501610af8565b91505092915050565b600060208284031215610bd757600080fd5b6000610be584828501610b0d565b91505092915050565b600060208284031215610c0057600080fd5b6000610c0e84828501610b22565b91505092915050565b610c2081611048565b82525050565b6000610c3182610f01565b610c3b8185610f17565b9350610c4b8185602086016110a4565b80840191505092915050565b6000610c6282610f0c565b610c6c8185610f22565b9350610c7c8185602086016110a4565b610c8581611135565b840191505092915050565b6000610c9d603a83610f22565b9150610ca882611146565b604082019050919050565b6000610cc0601d83610f22565b9150610ccb82611195565b602082019050919050565b6000610ce3602683610f22565b9150610cee826111be565b604082019050919050565b6000610d06603883610f22565b9150610d118261120d565b604082019050919050565b6000610d29600083610f17565b9150610d348261125c565b600082019050919050565b6000610d4c601d83610f22565b9150610d578261125f565b602082019050919050565b6000610d6f602a83610f22565b9150610d7a82611288565b604082019050919050565b610d8e81611086565b82525050565b6000610da08284610c26565b915081905092915050565b6000610db682610d1c565b9150819050919050565b6000602082019050610dd56000830184610c17565b92915050565b6000604082019050610df06000830185610c17565b610dfd6020830184610d85565b9392505050565b60006020820190508181036000830152610e1e8184610c57565b905092915050565b60006020820190508181036000830152610e3f81610c90565b9050919050565b60006020820190508181036000830152610e5f81610cb3565b9050919050565b60006020820190508181036000830152610e7f81610cd6565b9050919050565b60006020820190508181036000830152610e9f81610cf9565b9050919050565b60006020820190508181036000830152610ebf81610d3f565b9050919050565b60006020820190508181036000830152610edf81610d62565b9050919050565b6000602082019050610efb6000830184610d85565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000610f3e82611086565b9150610f4983611086565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610f7e57610f7d6110d7565b5b828201905092915050565b6000610f9482611086565b9150610f9f83611086565b925082610faf57610fae611106565b5b828204905092915050565b6000610fc582611086565b9150610fd083611086565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611009576110086110d7565b5b828202905092915050565b600061101f82611086565b915061102a83611086565b92508282101561103d5761103c6110d7565b5b828203905092915050565b600061105382611066565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60005b838110156110c25780820151818401526020810190506110a7565b838111156110d1576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f45435232303a204f6e6c792063757272656e742062656e65666963696172792060008201527f63616e206368616e67652062656e656669636961726965730000000000000000602082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6112e081611048565b81146112eb57600080fd5b50565b6112f78161105a565b811461130257600080fd5b50565b61130e81611086565b811461131957600080fd5b50565b61132581611090565b811461133057600080fd5b5056fea264697066735822122017a84023993d44951256fe1ae7c22f0411f915282d33287a443ed4aef023656464736f6c63430008020033000000000000000000000000f243d79910cbd70a0eaf405b08e80065a67d5e140000000000000000000000000000000000000000000000000000000061dd9d4b000000000000000000000000000000000000000000000000000000000b3a82b6
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f243d79910cbd70a0eaf405b08e80065a67d5e140000000000000000000000000000000000000000000000000000000061dd9d4b000000000000000000000000000000000000000000000000000000000b3a82b6
-----Decoded View---------------
Arg [0] : beneficiaryAddress (address): 0xf243d79910cbd70a0eaf405b08e80065a67d5e14
Arg [1] : startTimestamp (uint64): 1641913675
Arg [2] : durationSeconds (uint64): 188383926
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f243d79910cbd70a0eaf405b08e80065a67d5e14
Arg [1] : 0000000000000000000000000000000000000000000000000000000061dd9d4b
Arg [2] : 000000000000000000000000000000000000000000000000000000000b3a82b6
Deployed ByteCode Sourcemap
18012:4106:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21024:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19574:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20561:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19018:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21337:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20166:263;;;;;;;;;;;;;:::i;:::-;;19737:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19902:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19415:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19125:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21024:167;21093:7;21120:63;21161:10;:8;:10::i;:::-;21137:21;:34;;;;:::i;:::-;21173:9;21120:16;:63::i;:::-;21113:70;;21024:167;;;:::o;19574:93::-;19623:7;19650:9;19643:16;;;;19574:93;:::o;20561:318::-;20619:18;20687:15;20696:5;20687:8;:15::i;:::-;20640:44;20653:5;20667:15;20640:12;:44::i;:::-;:62;;;;:::i;:::-;20619:83;;20738:10;20713:14;:21;20728:5;20713:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;20778:5;20764:32;;;20785:10;20764:32;;;;;;:::i;:::-;;;;;;;;20807:64;20837:5;20845:13;:11;:13::i;:::-;20860:10;20807:22;:64::i;:::-;20561:318;;:::o;19018:99::-;19070:7;19097:12;;;;;;;;;;;19090:19;;19018:99;:::o;21337:204::-;21421:7;21448:85;21506:15;21515:5;21506:8;:15::i;:::-;21472:5;21465:23;;;21497:4;21465:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;;:::i;:::-;21523:9;21448:16;:85::i;:::-;21441:92;;21337:204;;;;:::o;20166:263::-;20211:18;20272:10;:8;:10::i;:::-;20232:37;20252:15;20232:12;:37::i;:::-;:50;;;;:::i;:::-;20211:71;;20306:10;20293:9;;:23;;;;;;;:::i;:::-;;;;;;;;20332:25;20346:10;20332:25;;;;;;:::i;:::-;;;;;;;;20368:53;20394:13;:11;:13::i;:::-;20410:10;20368:17;:53::i;:::-;20166:263;:::o;19737:93::-;19786:7;19813:9;;19806:16;;19737:93;:::o;19902:118::-;19964:7;19991:14;:21;20006:5;19991:21;;;;;;;;;;;;;;;;19984:28;;19902:118;;;:::o;19415:87::-;19461:7;19488:6;19481:13;;;;19415:87;:::o;19125:219::-;19223:12;;;;;;;;;;;19209:26;;:10;:26;;;19201:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19322:14;19307:12;;:29;;;;;;;;;;;;;;;;;;19125:219;:::o;21741:374::-;21841:7;21877;:5;:7::i;:::-;21865:9;:19;;;21861:247;;;21908:1;21901:8;;;;21861:247;21953:10;:8;:10::i;:::-;21943:7;:5;:7::i;:::-;:20;;;;:::i;:::-;21931:9;:32;;;21927:181;;;21987:15;21980:22;;;;21927:181;22086:10;:8;:10::i;:::-;22074:7;:5;:7::i;:::-;22062:9;:19;;;;;;:::i;:::-;22043:15;:39;;;;:::i;:::-;22042:54;;;;:::i;:::-;22035:61;;21741:374;;;;;:::o;11876:211::-;11993:86;12013:5;12043:23;;;12068:2;12072:5;12020:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11993:19;:86::i;:::-;11876:211;;;:::o;5339:317::-;5454:6;5429:21;:31;;5421:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5508:12;5526:9;:14;;5548:6;5526:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5507:52;;;5578:7;5570:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;5339:317;;;:::o;14449:716::-;14873:23;14899:69;14927:4;14899:69;;;;;;;;;;;;;;;;;14907:5;14899:27;;;;:69;;;;;:::i;:::-;14873:95;;15003:1;14983:10;:17;:21;14979:179;;;15080:10;15069:30;;;;;;;;;;;;:::i;:::-;15061:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14979:179;14449:716;;;:::o;6823:229::-;6960:12;6992:52;7014:6;7022:4;7028:1;7031:12;6992:21;:52::i;:::-;6985:59;;6823:229;;;;;:::o;7943:510::-;8113:12;8171:5;8146:21;:30;;8138:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;8238:18;8249:6;8238:10;:18::i;:::-;8230:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8304:12;8318:23;8345:6;:11;;8364:5;8371:4;8345:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8303:73;;;;8394:51;8411:7;8420:10;8432:12;8394:16;:51::i;:::-;8387:58;;;;7943:510;;;;;;:::o;4078:326::-;4138:4;4395:1;4373:7;:19;;;:23;4366:30;;4078:326;;;:::o;10629:712::-;10779:12;10808:7;10804:530;;;10839:10;10832:17;;;;10804:530;10973:1;10953:10;:17;:21;10949:374;;;11151:10;11145:17;11212:15;11199:10;11195:2;11191:19;11184:44;11099:148;11294:12;11287:20;;;;;;;;;;;:::i;:::-;;;;;;;;10629:712;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:143::-;;383:6;377:13;368:22;;399:33;426:5;399:33;:::i;:::-;358:80;;;;:::o;444:137::-;;527:6;514:20;505:29;;543:32;569:5;543:32;:::i;:::-;495:86;;;;:::o;587:262::-;;695:2;683:9;674:7;670:23;666:32;663:2;;;711:1;708;701:12;663:2;754:1;779:53;824:7;815:6;804:9;800:22;779:53;:::i;:::-;769:63;;725:117;653:196;;;;:::o;855:405::-;;;979:2;967:9;958:7;954:23;950:32;947:2;;;995:1;992;985:12;947:2;1038:1;1063:53;1108:7;1099:6;1088:9;1084:22;1063:53;:::i;:::-;1053:63;;1009:117;1165:2;1191:52;1235:7;1226:6;1215:9;1211:22;1191:52;:::i;:::-;1181:62;;1136:117;937:323;;;;;:::o;1266:278::-;;1382:2;1370:9;1361:7;1357:23;1353:32;1350:2;;;1398:1;1395;1388:12;1350:2;1441:1;1466:61;1519:7;1510:6;1499:9;1495:22;1466:61;:::i;:::-;1456:71;;1412:125;1340:204;;;;:::o;1550:284::-;;1669:2;1657:9;1648:7;1644:23;1640:32;1637:2;;;1685:1;1682;1675:12;1637:2;1728:1;1753:64;1809:7;1800:6;1789:9;1785:22;1753:64;:::i;:::-;1743:74;;1699:128;1627:207;;;;:::o;1840:260::-;;1947:2;1935:9;1926:7;1922:23;1918:32;1915:2;;;1963:1;1960;1953:12;1915:2;2006:1;2031:52;2075:7;2066:6;2055:9;2051:22;2031:52;:::i;:::-;2021:62;;1977:116;1905:195;;;;:::o;2106:118::-;2193:24;2211:5;2193:24;:::i;:::-;2188:3;2181:37;2171:53;;:::o;2230:373::-;;2362:38;2394:5;2362:38;:::i;:::-;2416:88;2497:6;2492:3;2416:88;:::i;:::-;2409:95;;2513:52;2558:6;2553:3;2546:4;2539:5;2535:16;2513:52;:::i;:::-;2590:6;2585:3;2581:16;2574:23;;2338:265;;;;;:::o;2609:364::-;;2725:39;2758:5;2725:39;:::i;:::-;2780:71;2844:6;2839:3;2780:71;:::i;:::-;2773:78;;2860:52;2905:6;2900:3;2893:4;2886:5;2882:16;2860:52;:::i;:::-;2937:29;2959:6;2937:29;:::i;:::-;2932:3;2928:39;2921:46;;2701:272;;;;;:::o;2979:366::-;;3142:67;3206:2;3201:3;3142:67;:::i;:::-;3135:74;;3218:93;3307:3;3218:93;:::i;:::-;3336:2;3331:3;3327:12;3320:19;;3125:220;;;:::o;3351:366::-;;3514:67;3578:2;3573:3;3514:67;:::i;:::-;3507:74;;3590:93;3679:3;3590:93;:::i;:::-;3708:2;3703:3;3699:12;3692:19;;3497:220;;;:::o;3723:366::-;;3886:67;3950:2;3945:3;3886:67;:::i;:::-;3879:74;;3962:93;4051:3;3962:93;:::i;:::-;4080:2;4075:3;4071:12;4064:19;;3869:220;;;:::o;4095:366::-;;4258:67;4322:2;4317:3;4258:67;:::i;:::-;4251:74;;4334:93;4423:3;4334:93;:::i;:::-;4452:2;4447:3;4443:12;4436:19;;4241:220;;;:::o;4467:398::-;;4647:83;4728:1;4723:3;4647:83;:::i;:::-;4640:90;;4739:93;4828:3;4739:93;:::i;:::-;4857:1;4852:3;4848:11;4841:18;;4630:235;;;:::o;4871:366::-;;5034:67;5098:2;5093:3;5034:67;:::i;:::-;5027:74;;5110:93;5199:3;5110:93;:::i;:::-;5228:2;5223:3;5219:12;5212:19;;5017:220;;;:::o;5243:366::-;;5406:67;5470:2;5465:3;5406:67;:::i;:::-;5399:74;;5482:93;5571:3;5482:93;:::i;:::-;5600:2;5595:3;5591:12;5584:19;;5389:220;;;:::o;5615:118::-;5702:24;5720:5;5702:24;:::i;:::-;5697:3;5690:37;5680:53;;:::o;5739:271::-;;5891:93;5980:3;5971:6;5891:93;:::i;:::-;5884:100;;6001:3;5994:10;;5873:137;;;;:::o;6016:379::-;;6222:147;6365:3;6222:147;:::i;:::-;6215:154;;6386:3;6379:10;;6204:191;;;:::o;6401:222::-;;6532:2;6521:9;6517:18;6509:26;;6545:71;6613:1;6602:9;6598:17;6589:6;6545:71;:::i;:::-;6499:124;;;;:::o;6629:332::-;;6788:2;6777:9;6773:18;6765:26;;6801:71;6869:1;6858:9;6854:17;6845:6;6801:71;:::i;:::-;6882:72;6950:2;6939:9;6935:18;6926:6;6882:72;:::i;:::-;6755:206;;;;;:::o;6967:313::-;;7118:2;7107:9;7103:18;7095:26;;7167:9;7161:4;7157:20;7153:1;7142:9;7138:17;7131:47;7195:78;7268:4;7259:6;7195:78;:::i;:::-;7187:86;;7085:195;;;;:::o;7286:419::-;;7490:2;7479:9;7475:18;7467:26;;7539:9;7533:4;7529:20;7525:1;7514:9;7510:17;7503:47;7567:131;7693:4;7567:131;:::i;:::-;7559:139;;7457:248;;;:::o;7711:419::-;;7915:2;7904:9;7900:18;7892:26;;7964:9;7958:4;7954:20;7950:1;7939:9;7935:17;7928:47;7992:131;8118:4;7992:131;:::i;:::-;7984:139;;7882:248;;;:::o;8136:419::-;;8340:2;8329:9;8325:18;8317:26;;8389:9;8383:4;8379:20;8375:1;8364:9;8360:17;8353:47;8417:131;8543:4;8417:131;:::i;:::-;8409:139;;8307:248;;;:::o;8561:419::-;;8765:2;8754:9;8750:18;8742:26;;8814:9;8808:4;8804:20;8800:1;8789:9;8785:17;8778:47;8842:131;8968:4;8842:131;:::i;:::-;8834:139;;8732:248;;;:::o;8986:419::-;;9190:2;9179:9;9175:18;9167:26;;9239:9;9233:4;9229:20;9225:1;9214:9;9210:17;9203:47;9267:131;9393:4;9267:131;:::i;:::-;9259:139;;9157:248;;;:::o;9411:419::-;;9615:2;9604:9;9600:18;9592:26;;9664:9;9658:4;9654:20;9650:1;9639:9;9635:17;9628:47;9692:131;9818:4;9692:131;:::i;:::-;9684:139;;9582:248;;;:::o;9836:222::-;;9967:2;9956:9;9952:18;9944:26;;9980:71;10048:1;10037:9;10033:17;10024:6;9980:71;:::i;:::-;9934:124;;;;:::o;10064:98::-;;10149:5;10143:12;10133:22;;10122:40;;;:::o;10168:99::-;;10254:5;10248:12;10238:22;;10227:40;;;:::o;10273:147::-;;10411:3;10396:18;;10386:34;;;;:::o;10426:169::-;;10544:6;10539:3;10532:19;10584:4;10579:3;10575:14;10560:29;;10522:73;;;;:::o;10601:305::-;;10660:20;10678:1;10660:20;:::i;:::-;10655:25;;10694:20;10712:1;10694:20;:::i;:::-;10689:25;;10848:1;10780:66;10776:74;10773:1;10770:81;10767:2;;;10854:18;;:::i;:::-;10767:2;10898:1;10895;10891:9;10884:16;;10645:261;;;;:::o;10912:185::-;;10969:20;10987:1;10969:20;:::i;:::-;10964:25;;11003:20;11021:1;11003:20;:::i;:::-;10998:25;;11042:1;11032:2;;11047:18;;:::i;:::-;11032:2;11089:1;11086;11082:9;11077:14;;10954:143;;;;:::o;11103:348::-;;11166:20;11184:1;11166:20;:::i;:::-;11161:25;;11200:20;11218:1;11200:20;:::i;:::-;11195:25;;11388:1;11320:66;11316:74;11313:1;11310:81;11305:1;11298:9;11291:17;11287:105;11284:2;;;11395:18;;:::i;:::-;11284:2;11443:1;11440;11436:9;11425:20;;11151:300;;;;:::o;11457:191::-;;11517:20;11535:1;11517:20;:::i;:::-;11512:25;;11551:20;11569:1;11551:20;:::i;:::-;11546:25;;11590:1;11587;11584:8;11581:2;;;11595:18;;:::i;:::-;11581:2;11640:1;11637;11633:9;11625:17;;11502:146;;;;:::o;11654:96::-;;11720:24;11738:5;11720:24;:::i;:::-;11709:35;;11699:51;;;:::o;11756:90::-;;11833:5;11826:13;11819:21;11808:32;;11798:48;;;:::o;11852:126::-;;11929:42;11922:5;11918:54;11907:65;;11897:81;;;:::o;11984:77::-;;12050:5;12039:16;;12029:32;;;:::o;12067:101::-;;12143:18;12136:5;12132:30;12121:41;;12111:57;;;:::o;12174:307::-;12242:1;12252:113;12266:6;12263:1;12260:13;12252:113;;;12351:1;12346:3;12342:11;12336:18;12332:1;12327:3;12323:11;12316:39;12288:2;12285:1;12281:10;12276:15;;12252:113;;;12383:6;12380:1;12377:13;12374:2;;;12463:1;12454:6;12449:3;12445:16;12438:27;12374:2;12223:258;;;;:::o;12487:180::-;12535:77;12532:1;12525:88;12632:4;12629:1;12622:15;12656:4;12653:1;12646:15;12673:180;12721:77;12718:1;12711:88;12818:4;12815:1;12808:15;12842:4;12839:1;12832:15;12859:102;;12951:2;12947:7;12942:2;12935:5;12931:14;12927:28;12917:38;;12907:54;;;:::o;12967:245::-;13107:34;13103:1;13095:6;13091:14;13084:58;13176:28;13171:2;13163:6;13159:15;13152:53;13073:139;:::o;13218:179::-;13358:31;13354:1;13346:6;13342:14;13335:55;13324:73;:::o;13403:225::-;13543:34;13539:1;13531:6;13527:14;13520:58;13612:8;13607:2;13599:6;13595:15;13588:33;13509:119;:::o;13634:243::-;13774:34;13770:1;13762:6;13758:14;13751:58;13843:26;13838:2;13830:6;13826:15;13819:51;13740:137;:::o;13883:114::-;13989:8;:::o;14003:179::-;14143:31;14139:1;14131:6;14127:14;14120:55;14109:73;:::o;14188:229::-;14328:34;14324:1;14316:6;14312:14;14305:58;14397:12;14392:2;14384:6;14380:15;14373:37;14294:123;:::o;14423:122::-;14496:24;14514:5;14496:24;:::i;:::-;14489:5;14486:35;14476:2;;14535:1;14532;14525:12;14476:2;14466:79;:::o;14551:116::-;14621:21;14636:5;14621:21;:::i;:::-;14614:5;14611:32;14601:2;;14657:1;14654;14647:12;14601:2;14591:76;:::o;14673:122::-;14746:24;14764:5;14746:24;:::i;:::-;14739:5;14736:35;14726:2;;14785:1;14782;14775:12;14726:2;14716:79;:::o;14801:120::-;14873:23;14890:5;14873:23;:::i;:::-;14866:5;14863:34;14853:2;;14911:1;14908;14901:12;14853:2;14843:78;:::o
Swarm Source
ipfs://17a84023993d44951256fe1ae7c22f0411f915282d33287a443ed4aef0236564
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.