Overview
CELO Balance
CELO Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
Latest 5 from a total of 5 transactions
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x045B7f4D...8Dd48D834 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Source Code (Solidity)
/**
*Submitted for verification at celoscan.io on 2025-07-02
*/
pragma solidity >=0.8.0;
// SPDX-License-Identifier: AGPL-3.0-or-later
// File-Version: 3
contract GiftableToken {
// Implements EIP173
address public owner;
// Implements Writer
mapping(address => bool) writer;
// Implements ERC20
string public name;
// Implements ERC20
string public symbol;
// Implements ERC20
uint8 public decimals;
// Implements ERC20
mapping (address => uint256) public balanceOf;
// Implements ERC20
mapping (address => mapping (address => uint256)) public allowance;
// Implements Burner
uint256 public totalMinted;
// Implements Burner
uint256 public totalBurned;
// Implements Expire
uint256 public expires;
bool expired;
// Implements ERC20
event Transfer(address indexed _from, address indexed _to, uint256 _value);
// Implements ERC20
event TransferFrom(address indexed _from, address indexed _to, address indexed _spender, uint256 _value);
// Implements ERC20
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
// Implements Minter
event Mint(address indexed _minter, address indexed _beneficiary, uint256 _value);
// Implement Expire
event Expired(uint256 _timestamp);
// EIP173
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // EIP173
// Implements Writer
event WriterAdded(address _writer);
// Implements Writer
event WriterRemoved(address _writer);
// Implements Burner
event Burn(uint256 _value);
constructor(string memory _name, string memory _symbol, uint8 _decimals, uint256 _expireTimestamp) {
owner = msg.sender;
name = _name;
symbol = _symbol;
decimals = _decimals;
expires = _expireTimestamp;
}
// Implements ERC20
function totalSupply() public view returns (uint256) {
return totalMinted - totalBurned;
}
mapping(address => bool) writers;
// Implements Minter
function mintTo(address _to, uint256 _value) public returns (bool) {
require(writers[msg.sender] || msg.sender == owner);
balanceOf[_to] += _value;
totalMinted += _value;
emit Mint(msg.sender, _to, _value);
return true;
}
// Implements Minter
// Implements ERC5679Ext20
function mint(address _to, uint256 _value, bytes calldata _data) public {
_data;
mintTo(_to, _value);
}
// Implements Writer
function addWriter(address _minter) public returns (bool) {
require(msg.sender == owner);
writers[_minter] = true;
return true;
}
// Implements Writer
function deleteWriter(address _minter) public returns (bool) {
require(msg.sender == owner || msg.sender == _minter);
writers[_minter] = false;
return true;
}
// Implements Writer
function isWriter(address _minter) public view returns(bool) {
return writers[_minter] || _minter == owner;
}
// Implements Expire
function applyExpiry() public returns(uint8) {
if (expires == 0) {
return 0;
}
if (expired) {
return 1;
}
if (block.timestamp >= expires) {
expired = true;
emit Expired(block.timestamp);
return 2;
}
return 0;
}
// Implements ERC20
function transfer(address _to, uint256 _value) public returns (bool) {
require(applyExpiry() == 0);
require(balanceOf[msg.sender] >= _value);
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
emit Transfer(msg.sender, _to, _value);
return true;
}
// Implements Burner
function burn(uint256 _value) public returns (bool) {
require(msg.sender == owner, 'ERR_ACCESS');
require(balanceOf[msg.sender] >= _value, 'ERR_FUNDS');
balanceOf[msg.sender] -= _value;
totalBurned += _value;
emit Burn(_value);
return true;
}
// Implements Burner
function burn() public returns(bool) {
return burn(balanceOf[msg.sender]);
}
// Implements Burner
// Implements ERC5679Ext20
function burn(address _from, uint256 _value, bytes calldata _data) public {
require(msg.sender == _from, 'ERR_NOT_SELF');
_data;
burn(_value);
}
// Implements ERC20
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(applyExpiry() == 0);
require(allowance[_from][msg.sender] >= _value);
require(balanceOf[_from] >= _value);
allowance[_from][msg.sender] = allowance[_from][msg.sender] - _value;
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
emit TransferFrom(_from, _to, msg.sender, _value);
return true;
}
// Implements ERC20
function approve(address _spender, uint256 _value) public returns (bool) {
require(applyExpiry() == 0);
if (_value > 0) {
require(allowance[msg.sender][_spender] == 0);
}
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
// Implements EIP173
function transferOwnership(address _newOwner) public returns (bool) {
address oldOwner;
require(msg.sender == owner);
oldOwner = owner;
owner = _newOwner;
emit OwnershipTransferred(oldOwner, owner);
return true;
}
// Implements EIP165
function supportsInterface(bytes4 _sum) public pure returns (bool) {
if (_sum == 0xb61bc941) { // ERC20
return true;
}
if (_sum == 0x449a52f8) { // Minter
return true;
}
if (_sum == 0x01ffc9a7) { // EIP165
return true;
}
if (_sum == 0x9493f8b2) { // EIP173
return true;
}
if (_sum == 0xabe1f1f5) { // Writer
return true;
}
if (_sum == 0xb1110c1b) { // Burner
return true;
}
if (_sum == 0x841a0e94) { // Expire
return true;
}
return false;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"uint256","name":"_expireTimestamp","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","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":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"TransferFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_writer","type":"address"}],"name":"WriterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_writer","type":"address"}],"name":"WriterRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
0x608060405234801561000f575f5ffd5b506040516110ec3803806110ec83398101604081905261002e9161012b565b5f80546001600160a01b03191633179055600261004b8582610232565b5060036100588482610232565b506004805460ff191660ff9390931692909217909155600955506102ec9050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261009c575f5ffd5b81516001600160401b038111156100b5576100b5610079565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100e3576100e3610079565b6040528181528382016020018510156100fa575f5ffd5b5f5b82811015610118576020818601810151838301820152016100fc565b505f918101602001919091529392505050565b5f5f5f5f6080858703121561013e575f5ffd5b84516001600160401b03811115610153575f5ffd5b61015f8782880161008d565b602087015190955090506001600160401b0381111561017c575f5ffd5b6101888782880161008d565b935050604085015160ff8116811461019e575f5ffd5b6060959095015193969295505050565b600181811c908216806101c257607f821691505b6020821081036101e057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022d57805f5260205f20601f840160051c8101602085101561020b5750805b601f840160051c820191505b8181101561022a575f8155600101610217565b50505b505050565b81516001600160401b0381111561024b5761024b610079565b61025f8161025984546101ae565b846101e6565b6020601f821160018114610291575f831561027a5750848201515b5f19600385901b1c1916600184901b17845561022a565b5f84815260208120601f198516915b828110156102c057878501518255602094850194600190920191016102a0565b50848210156102dd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b610df3806102f95f395ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c80635f408c04116100bf578063a9059cbb11610079578063a9059cbb146102cd578063b1cb0db3146102e0578063d89135cd146102e9578063da2824a8146102f2578063dd62ed3e14610305578063f2fde38b1461032f575f5ffd5b80635f408c041461025857806370a08231146102605780638da5cb5b1461027f57806394d008ef146102a957806395d89b41146102bc578063a2309ff8146102c4575f5ffd5b8063313ce56711610110578063313ce567146101e357806342966c6814610202578063449a52f81461021557806344d171871461022857806344df8e701461023d5780635ae06f7e14610245575f5ffd5b806301ffc9a71461015757806306fdde031461017f578063095ea7b31461019457806318160ddd146101a757806323b872dd146101bd5780632b29ba23146101d0575b5f5ffd5b61016a610165366004610b71565b610342565b60405190151581526020015b60405180910390f35b61018761042a565b6040516101769190610b9f565b61016a6101a2366004610c05565b6104b6565b6101af610562565b604051908152602001610176565b61016a6101cb366004610c2d565b610578565b61016a6101de366004610c67565b6106cd565b6004546101f09060ff1681565b60405160ff9091168152602001610176565b61016a610210366004610c80565b610702565b61016a610223366004610c05565b61080e565b61023b610236366004610c97565b6108bd565b005b61016a610914565b61016a610253366004610c67565b61092c565b6101f0610979565b6101af61026e366004610c67565b60056020525f908152604090205481565b5f54610291906001600160a01b031681565b6040516001600160a01b039091168152602001610176565b61023b6102b7366004610c97565b6109f4565b6101876109fe565b6101af60075481565b61016a6102db366004610c05565b610a0b565b6101af60095481565b6101af60085481565b61016a610300366004610c67565b610ac6565b6101af610313366004610d1a565b600660209081525f928352604080842090915290825290205481565b61016a61033d366004610c67565b610b04565b5f6001600160e01b0319821663b61bc94160e01b0361036357506001919050565b6001600160e01b031982166308934a5f60e31b0361038357506001919050565b6001600160e01b031982166301ffc9a760e01b036103a357506001919050565b6001600160e01b03198216634a49fc5960e11b036103c357506001919050565b6001600160e01b0319821663abe1f1f560e01b036103e357506001919050565b6001600160e01b0319821663b1110c1b60e01b0361040357506001919050565b6001600160e01b0319821663210683a560e21b0361042357506001919050565b505f919050565b6002805461043790610d4b565b80601f016020809104026020016040519081016040528092919081815260200182805461046390610d4b565b80156104ae5780601f10610485576101008083540402835291602001916104ae565b820191905f5260205f20905b81548152906001019060200180831161049157829003601f168201915b505050505081565b5f6104bf610979565b60ff16156104cb575f5ffd5b81156104fd57335f9081526006602090815260408083206001600160a01b0387168452909152902054156104fd575f5ffd5b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b5f6008546007546105739190610d97565b905090565b5f610581610979565b60ff161561058d575f5ffd5b6001600160a01b0384165f9081526006602090815260408083203384529091529020548211156105bb575f5ffd5b6001600160a01b0384165f908152600560205260409020548211156105de575f5ffd5b6001600160a01b0384165f90815260066020908152604080832033845290915290205461060c908390610d97565b6001600160a01b0385165f8181526006602090815260408083203384528252808320949094559181526005909152908120805484929061064d908490610d97565b90915550506001600160a01b0383165f9081526005602052604081208054849290610679908490610daa565b909155505060405182815233906001600160a01b0385811691908716907f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f9399060200160405180910390a45060019392505050565b6001600160a01b0381165f908152600b602052604081205460ff168061055c5750505f546001600160a01b0390811691161490565b5f80546001600160a01b0316331461074e5760405162461bcd60e51b815260206004820152600a6024820152694552525f41434345535360b01b60448201526064015b60405180910390fd5b335f908152600560205260409020548211156107985760405162461bcd60e51b81526020600482015260096024820152684552525f46554e445360b81b6044820152606401610745565b335f90815260056020526040812080548492906107b6908490610d97565b925050819055508160085f8282546107ce9190610daa565b90915550506040518281527fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9060200160405180910390a1506001919050565b335f908152600b602052604081205460ff168061083457505f546001600160a01b031633145b61083c575f5ffd5b6001600160a01b0383165f9081526005602052604081208054849290610863908490610daa565b925050819055508160075f82825461087b9190610daa565b90915550506040518281526001600160a01b0384169033907fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f890602001610550565b336001600160a01b038516146109045760405162461bcd60e51b815260206004820152600c60248201526b22a9292fa727aa2fa9a2a62360a11b6044820152606401610745565b61090d83610702565b5050505050565b335f9081526005602052604081205461057390610702565b5f80546001600160a01b031633148061094d5750336001600160a01b038316145b610955575f5ffd5b506001600160a01b03165f908152600b60205260409020805460ff19169055600190565b5f6009545f0361098857505f90565b600a5460ff16156109995750600190565b60095442106109ef57600a805460ff191660011790556040517ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe9906109e19042815260200190565b60405180910390a150600290565b505f90565b61090d848461080e565b6003805461043790610d4b565b5f610a14610979565b60ff1615610a20575f5ffd5b335f90815260056020526040902054821115610a3a575f5ffd5b335f9081526005602052604081208054849290610a58908490610d97565b90915550506001600160a01b0383165f9081526005602052604081208054849290610a84908490610daa565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610550565b5f80546001600160a01b03163314610adc575f5ffd5b506001600160a01b03165f908152600b60205260409020805460ff1916600190811790915590565b5f805481906001600160a01b03163314610b1c575f5ffd5b505f80546001600160a01b038481166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350600192915050565b5f60208284031215610b81575f5ffd5b81356001600160e01b031981168114610b98575f5ffd5b9392505050565b602081525f82518060208401525f5b81811015610bcb5760208186018101516040868401015201610bae565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610c00575f5ffd5b919050565b5f5f60408385031215610c16575f5ffd5b610c1f83610bea565b946020939093013593505050565b5f5f5f60608486031215610c3f575f5ffd5b610c4884610bea565b9250610c5660208501610bea565b929592945050506040919091013590565b5f60208284031215610c77575f5ffd5b610b9882610bea565b5f60208284031215610c90575f5ffd5b5035919050565b5f5f5f5f60608587031215610caa575f5ffd5b610cb385610bea565b935060208501359250604085013567ffffffffffffffff811115610cd5575f5ffd5b8501601f81018713610ce5575f5ffd5b803567ffffffffffffffff811115610cfb575f5ffd5b876020828401011115610d0c575f5ffd5b949793965060200194505050565b5f5f60408385031215610d2b575f5ffd5b610d3483610bea565b9150610d4260208401610bea565b90509250929050565b600181811c90821680610d5f57607f821691505b602082108103610d7d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561055c5761055c610d83565b8082018082111561055c5761055c610d8356fea26469706673582212208cfe9650d4224347e313bf7a1d6b14bbdf38178a52a5437914f7da607bba820464736f6c634300081e0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013416d696e61204d6f68756d65642041686d6564000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414d494e414100000000000000000000000000000000000000000000000000006decb85d010080000000000000000000000000d08913a93c2c28b2bf6717264378c57083a5ef5c0000000000000000000000005523058cdffe5f3c1eadadd5015e55c6e00fb43900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610153575f3560e01c80635f408c04116100bf578063a9059cbb11610079578063a9059cbb146102cd578063b1cb0db3146102e0578063d89135cd146102e9578063da2824a8146102f2578063dd62ed3e14610305578063f2fde38b1461032f575f5ffd5b80635f408c041461025857806370a08231146102605780638da5cb5b1461027f57806394d008ef146102a957806395d89b41146102bc578063a2309ff8146102c4575f5ffd5b8063313ce56711610110578063313ce567146101e357806342966c6814610202578063449a52f81461021557806344d171871461022857806344df8e701461023d5780635ae06f7e14610245575f5ffd5b806301ffc9a71461015757806306fdde031461017f578063095ea7b31461019457806318160ddd146101a757806323b872dd146101bd5780632b29ba23146101d0575b5f5ffd5b61016a610165366004610b71565b610342565b60405190151581526020015b60405180910390f35b61018761042a565b6040516101769190610b9f565b61016a6101a2366004610c05565b6104b6565b6101af610562565b604051908152602001610176565b61016a6101cb366004610c2d565b610578565b61016a6101de366004610c67565b6106cd565b6004546101f09060ff1681565b60405160ff9091168152602001610176565b61016a610210366004610c80565b610702565b61016a610223366004610c05565b61080e565b61023b610236366004610c97565b6108bd565b005b61016a610914565b61016a610253366004610c67565b61092c565b6101f0610979565b6101af61026e366004610c67565b60056020525f908152604090205481565b5f54610291906001600160a01b031681565b6040516001600160a01b039091168152602001610176565b61023b6102b7366004610c97565b6109f4565b6101876109fe565b6101af60075481565b61016a6102db366004610c05565b610a0b565b6101af60095481565b6101af60085481565b61016a610300366004610c67565b610ac6565b6101af610313366004610d1a565b600660209081525f928352604080842090915290825290205481565b61016a61033d366004610c67565b610b04565b5f6001600160e01b0319821663b61bc94160e01b0361036357506001919050565b6001600160e01b031982166308934a5f60e31b0361038357506001919050565b6001600160e01b031982166301ffc9a760e01b036103a357506001919050565b6001600160e01b03198216634a49fc5960e11b036103c357506001919050565b6001600160e01b0319821663abe1f1f560e01b036103e357506001919050565b6001600160e01b0319821663b1110c1b60e01b0361040357506001919050565b6001600160e01b0319821663210683a560e21b0361042357506001919050565b505f919050565b6002805461043790610d4b565b80601f016020809104026020016040519081016040528092919081815260200182805461046390610d4b565b80156104ae5780601f10610485576101008083540402835291602001916104ae565b820191905f5260205f20905b81548152906001019060200180831161049157829003601f168201915b505050505081565b5f6104bf610979565b60ff16156104cb575f5ffd5b81156104fd57335f9081526006602090815260408083206001600160a01b0387168452909152902054156104fd575f5ffd5b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b5f6008546007546105739190610d97565b905090565b5f610581610979565b60ff161561058d575f5ffd5b6001600160a01b0384165f9081526006602090815260408083203384529091529020548211156105bb575f5ffd5b6001600160a01b0384165f908152600560205260409020548211156105de575f5ffd5b6001600160a01b0384165f90815260066020908152604080832033845290915290205461060c908390610d97565b6001600160a01b0385165f8181526006602090815260408083203384528252808320949094559181526005909152908120805484929061064d908490610d97565b90915550506001600160a01b0383165f9081526005602052604081208054849290610679908490610daa565b909155505060405182815233906001600160a01b0385811691908716907f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f9399060200160405180910390a45060019392505050565b6001600160a01b0381165f908152600b602052604081205460ff168061055c5750505f546001600160a01b0390811691161490565b5f80546001600160a01b0316331461074e5760405162461bcd60e51b815260206004820152600a6024820152694552525f41434345535360b01b60448201526064015b60405180910390fd5b335f908152600560205260409020548211156107985760405162461bcd60e51b81526020600482015260096024820152684552525f46554e445360b81b6044820152606401610745565b335f90815260056020526040812080548492906107b6908490610d97565b925050819055508160085f8282546107ce9190610daa565b90915550506040518281527fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9060200160405180910390a1506001919050565b335f908152600b602052604081205460ff168061083457505f546001600160a01b031633145b61083c575f5ffd5b6001600160a01b0383165f9081526005602052604081208054849290610863908490610daa565b925050819055508160075f82825461087b9190610daa565b90915550506040518281526001600160a01b0384169033907fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f890602001610550565b336001600160a01b038516146109045760405162461bcd60e51b815260206004820152600c60248201526b22a9292fa727aa2fa9a2a62360a11b6044820152606401610745565b61090d83610702565b5050505050565b335f9081526005602052604081205461057390610702565b5f80546001600160a01b031633148061094d5750336001600160a01b038316145b610955575f5ffd5b506001600160a01b03165f908152600b60205260409020805460ff19169055600190565b5f6009545f0361098857505f90565b600a5460ff16156109995750600190565b60095442106109ef57600a805460ff191660011790556040517ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe9906109e19042815260200190565b60405180910390a150600290565b505f90565b61090d848461080e565b6003805461043790610d4b565b5f610a14610979565b60ff1615610a20575f5ffd5b335f90815260056020526040902054821115610a3a575f5ffd5b335f9081526005602052604081208054849290610a58908490610d97565b90915550506001600160a01b0383165f9081526005602052604081208054849290610a84908490610daa565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610550565b5f80546001600160a01b03163314610adc575f5ffd5b506001600160a01b03165f908152600b60205260409020805460ff1916600190811790915590565b5f805481906001600160a01b03163314610b1c575f5ffd5b505f80546001600160a01b038481166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350600192915050565b5f60208284031215610b81575f5ffd5b81356001600160e01b031981168114610b98575f5ffd5b9392505050565b602081525f82518060208401525f5b81811015610bcb5760208186018101516040868401015201610bae565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610c00575f5ffd5b919050565b5f5f60408385031215610c16575f5ffd5b610c1f83610bea565b946020939093013593505050565b5f5f5f60608486031215610c3f575f5ffd5b610c4884610bea565b9250610c5660208501610bea565b929592945050506040919091013590565b5f60208284031215610c77575f5ffd5b610b9882610bea565b5f60208284031215610c90575f5ffd5b5035919050565b5f5f5f5f60608587031215610caa575f5ffd5b610cb385610bea565b935060208501359250604085013567ffffffffffffffff811115610cd5575f5ffd5b8501601f81018713610ce5575f5ffd5b803567ffffffffffffffff811115610cfb575f5ffd5b876020828401011115610d0c575f5ffd5b949793965060200194505050565b5f5f60408385031215610d2b575f5ffd5b610d3483610bea565b9150610d4260208401610bea565b90509250929050565b600181811c90821680610d5f57607f821691505b602082108103610d7d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561055c5761055c610d83565b8082018082111561055c5761055c610d8356fea26469706673582212208cfe9650d4224347e313bf7a1d6b14bbdf38178a52a5437914f7da607bba820464736f6c634300081e0033
Deployed Bytecode Sourcemap
97:5578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5157:515;;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;5157:515:0;;;;;;;;257:18;;;:::i;:::-;;;;;;;:::i;4526:296::-;;;;;;:::i;:::-;;:::i;1762:95::-;;;:::i;:::-;;;1658:25:1;;;1646:2;1631:18;1762:95:0;1512:177:1;4078:421:0;;;;;;:::i;:::-;;:::i;2736:114::-;;;;;;:::i;:::-;;:::i;347:21::-;;;;;;;;;;;;2436:4:1;2424:17;;;2406:36;;2394:2;2379:18;347:21:0;2264:184:1;3464:266:0;;;;;;:::i;:::-;;:::i;1923:244::-;;;;;;:::i;:::-;;:::i;3896:155::-;;;;;;:::i;:::-;;:::i;:::-;;3758:81;;;:::i;2535:173::-;;;;;;:::i;:::-;;:::i;2878:255::-;;;:::i;394:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;149:20;;;;;-1:-1:-1;;;;;149:20:0;;;;;;-1:-1:-1;;;;;3627:32:1;;;3609:51;;3597:2;3582:18;149:20:0;3463:203:1;2224:111:0;;;;;;:::i;:::-;;:::i;301:20::-;;;:::i;560:26::-;;;;;;3160:276;;;;;;:::i;:::-;;:::i;668:22::-;;;;;;613:26;;;;;;2363:144;;;;;;:::i;:::-;;:::i;465:66::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4853:276;;;;;;:::i;:::-;;:::i;5157:515::-;5218:4;-1:-1:-1;;;;;;5233:18:0;;-1:-1:-1;;;5233:18:0;5229:56;;-1:-1:-1;5275:4:0;;5157:515;-1:-1:-1;5157:515:0:o;5229:56::-;-1:-1:-1;;;;;;5293:18:0;;-1:-1:-1;;;5293:18:0;5289:57;;-1:-1:-1;5336:4:0;;5157:515;-1:-1:-1;5157:515:0:o;5289:57::-;-1:-1:-1;;;;;;5354:18:0;;-1:-1:-1;;;5354:18:0;5350:57;;-1:-1:-1;5397:4:0;;5157:515;-1:-1:-1;5157:515:0:o;5350:57::-;-1:-1:-1;;;;;;5415:18:0;;-1:-1:-1;;;5415:18:0;5411:57;;-1:-1:-1;5458:4:0;;5157:515;-1:-1:-1;5157:515:0:o;5411:57::-;-1:-1:-1;;;;;;5476:18:0;;-1:-1:-1;;;5476:18:0;5472:57;;-1:-1:-1;5519:4:0;;5157:515;-1:-1:-1;5157:515:0:o;5472:57::-;-1:-1:-1;;;;;;5537:18:0;;-1:-1:-1;;;5537:18:0;5533:57;;-1:-1:-1;5580:4:0;;5157:515;-1:-1:-1;5157:515:0:o;5533:57::-;-1:-1:-1;;;;;;5598:18:0;;-1:-1:-1;;;5598:18:0;5594:57;;-1:-1:-1;5641:4:0;;5157:515;-1:-1:-1;5157:515:0:o;5594:57::-;-1:-1:-1;5662:5:0;;5157:515;-1:-1:-1;5157:515:0:o;257:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4526:296::-;4593:4;4612:13;:11;:13::i;:::-;:18;;;4604:27;;;;;;4640:10;;4636:73;;4676:10;4666:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;4666:31:0;;;;;;;;;;:36;4658:45;;;;;;4723:10;4713:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;4713:31:0;;;;;;;;;;;;:40;;;4763:38;1658:25:1;;;4713:31:0;;4723:10;4763:38;;1631:18:1;4763:38:0;;;;;;;;-1:-1:-1;4813:4:0;4526:296;;;;;:::o;1762:95::-;1806:7;1841:11;;1827;;:25;;;;:::i;:::-;1820:32;;1762:95;:::o;4078:421::-;4160:4;4179:13;:11;:13::i;:::-;:18;;;4171:27;;;;;;-1:-1:-1;;;;;4211:16:0;;;;;;:9;:16;;;;;;;;4228:10;4211:28;;;;;;;;:38;-1:-1:-1;4211:38:0;4203:47;;;;;;-1:-1:-1;;;;;4263:16:0;;;;;;:9;:16;;;;;;:26;-1:-1:-1;4263:26:0;4255:35;;;;;;-1:-1:-1;;;;;4326:16:0;;;;;;:9;:16;;;;;;;;4343:10;4326:28;;;;;;;;:37;;4357:6;;4326:37;:::i;:::-;-1:-1:-1;;;;;4295:16:0;;;;;;:9;:16;;;;;;;;4312:10;4295:28;;;;;;;:68;;;;4368:16;;;:9;:16;;;;;;:26;;4388:6;;4295:16;4368:26;;4388:6;;4368:26;:::i;:::-;;;;-1:-1:-1;;;;;;;4400:14:0;;;;;;:9;:14;;;;;:24;;4418:6;;4400:14;:24;;4418:6;;4400:24;:::i;:::-;;;;-1:-1:-1;;4434:44:0;;1658:25:1;;;4459:10:0;;-1:-1:-1;;;;;4434:44:0;;;;;;;;;;1646:2:1;1631:18;4434:44:0;;;;;;;-1:-1:-1;4490:4:0;4078:421;;;;;:::o;2736:114::-;-1:-1:-1;;;;;2809:16:0;;2791:4;2809:16;;;:7;:16;;;;;;;;;:36;;-1:-1:-1;;2840:5:0;;-1:-1:-1;;;;;2840:5:0;;;2829:16;;;;2736:114::o;3464:266::-;3510:4;3543:5;;-1:-1:-1;;;;;3543:5:0;3529:10;:19;3521:42;;;;-1:-1:-1;;;3521:42:0;;4918:2:1;3521:42:0;;;4900:21:1;4957:2;4937:18;;;4930:30;-1:-1:-1;;;4976:18:1;;;4969:40;5026:18;;3521:42:0;;;;;;;;;3586:10;3576:21;;;;:9;:21;;;;;;:31;-1:-1:-1;3576:31:0;3568:53;;;;-1:-1:-1;;;3568:53:0;;5257:2:1;3568:53:0;;;5239:21:1;5296:1;5276:18;;;5269:29;-1:-1:-1;;;5314:18:1;;;5307:39;5363:18;;3568:53:0;5055:332:1;3568:53:0;3638:10;3628:21;;;;:9;:21;;;;;:31;;3653:6;;3628:21;:31;;3653:6;;3628:31;:::i;:::-;;;;;;;;3679:6;3664:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;3697:12:0;;1658:25:1;;;3697:12:0;;1646:2:1;1631:18;3697:12:0;;;;;;;-1:-1:-1;3721:4:0;;3464:266;-1:-1:-1;3464:266:0:o;1923:244::-;2011:10;1984:4;2003:19;;;:7;:19;;;;;;;;;:42;;-1:-1:-1;2040:5:0;;-1:-1:-1;;;;;2040:5:0;2026:10;:19;2003:42;1995:51;;;;;;-1:-1:-1;;;;;2053:14:0;;;;;;:9;:14;;;;;:24;;2071:6;;2053:14;:24;;2071:6;;2053:24;:::i;:::-;;;;;;;;2097:6;2082:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;2115:29:0;;1658:25:1;;;-1:-1:-1;;;;;2115:29:0;;;2120:10;;2115:29;;1646:2:1;1631:18;2115:29:0;1512:177:1;3896:155:0;3983:10;-1:-1:-1;;;;;3983:19:0;;;3975:44;;;;-1:-1:-1;;;3975:44:0;;5594:2:1;3975:44:0;;;5576:21:1;5633:2;5613:18;;;5606:30;-1:-1:-1;;;5652:18:1;;;5645:42;5704:18;;3975:44:0;5392:336:1;3975:44:0;4034:12;4039:6;4034:4;:12::i;:::-;;3896:155;;;;:::o;3758:81::-;3822:10;3789:4;3812:21;;;:9;:21;;;;;;3807:27;;:4;:27::i;2535:173::-;2590:4;2623:5;;-1:-1:-1;;;;;2623:5:0;2609:10;:19;;:44;;-1:-1:-1;2632:10:0;-1:-1:-1;;;;;2632:21:0;;;2609:44;2601:53;;;;;;-1:-1:-1;;;;;;2661:16:0;2680:5;2661:16;;;:7;:16;;;;;:24;;-1:-1:-1;;2661:24:0;;;;;2535:173::o;2878:255::-;2916:5;2932:7;;2943:1;2932:12;2928:38;;-1:-1:-1;2959:1:0;;2878:255::o;2928:38::-;2974:7;;;;2970:33;;;-1:-1:-1;2996:1:0;;2878:255::o;2970:33::-;3030:7;;3011:15;:26;3007:107;;3045:7;:14;;-1:-1:-1;;3045:14:0;3055:4;3045:14;;;3070:24;;;;;;3078:15;1658:25:1;;1646:2;1631:18;;1512:177;3070:24:0;;;;;;;;-1:-1:-1;3107:1:0;;2878:255::o;3007:107::-;-1:-1:-1;3125:1:0;;2878:255::o;2224:111::-;2311:19;2318:3;2323:6;2311;:19::i;301:20::-;;;;;;;:::i;3160:276::-;3223:4;3242:13;:11;:13::i;:::-;:18;;;3234:27;;;;;;3284:10;3274:21;;;;:9;:21;;;;;;:31;-1:-1:-1;3274:31:0;3266:40;;;;;;3321:10;3311:21;;;;:9;:21;;;;;:31;;3336:6;;3311:21;:31;;3336:6;;3311:31;:::i;:::-;;;;-1:-1:-1;;;;;;;3348:14:0;;;;;;:9;:14;;;;;:24;;3366:6;;3348:14;:24;;3366:6;;3348:24;:::i;:::-;;;;-1:-1:-1;;3382:33:0;;1658:25:1;;;-1:-1:-1;;;;;3382:33:0;;;3391:10;;3382:33;;1646:2:1;1631:18;3382:33:0;1512:177:1;2363:144:0;2415:4;2448:5;;-1:-1:-1;;;;;2448:5:0;2434:10;:19;2426:28;;;;;;-1:-1:-1;;;;;;2461:16:0;;;;;:7;:16;;;;;:23;;-1:-1:-1;;2461:23:0;2480:4;2461:23;;;;;;2480:4;2363:144::o;4853:276::-;4915:4;4983:5;;4915:4;;-1:-1:-1;;;;;4983:5:0;4969:10;:19;4961:28;;;;;;-1:-1:-1;5011:5:0;;;-1:-1:-1;;;;;5027:17:0;;;-1:-1:-1;;;;;;5027:17:0;;;;;;5062:37;;5011:5;;;;;;;5062:37;;5011:5;5062:37;-1:-1:-1;5117:4:0;;4853:276;-1:-1:-1;;4853:276:0:o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:1:o;497:527::-;646:2;635:9;628:21;609:4;678:6;672:13;721:6;716:2;705:9;701:18;694:34;746:1;756:140;770:6;767:1;764:13;756:140;;;881:2;865:14;;;861:23;;855:30;850:2;831:17;;;827:26;820:66;785:10;756:140;;;760:3;945:1;940:2;931:6;920:9;916:22;912:31;905:42;1015:2;1008;1004:7;999:2;991:6;987:15;983:29;972:9;968:45;964:54;956:62;;;497:527;;;;:::o;1029:173::-;1097:20;;-1:-1:-1;;;;;1146:31:1;;1136:42;;1126:70;;1192:1;1189;1182:12;1126:70;1029:173;;;:::o;1207:300::-;1275:6;1283;1336:2;1324:9;1315:7;1311:23;1307:32;1304:52;;;1352:1;1349;1342:12;1304:52;1375:29;1394:9;1375:29;:::i;:::-;1365:39;1473:2;1458:18;;;;1445:32;;-1:-1:-1;;;1207:300:1:o;1694:374::-;1771:6;1779;1787;1840:2;1828:9;1819:7;1815:23;1811:32;1808:52;;;1856:1;1853;1846:12;1808:52;1879:29;1898:9;1879:29;:::i;:::-;1869:39;;1927:38;1961:2;1950:9;1946:18;1927:38;:::i;:::-;1694:374;;1917:48;;-1:-1:-1;;;2034:2:1;2019:18;;;;2006:32;;1694:374::o;2073:186::-;2132:6;2185:2;2173:9;2164:7;2160:23;2156:32;2153:52;;;2201:1;2198;2191:12;2153:52;2224:29;2243:9;2224:29;:::i;2453:226::-;2512:6;2565:2;2553:9;2544:7;2540:23;2536:32;2533:52;;;2581:1;2578;2571:12;2533:52;-1:-1:-1;2626:23:1;;2453:226;-1:-1:-1;2453:226:1:o;2684:774::-;2772:6;2780;2788;2796;2849:2;2837:9;2828:7;2824:23;2820:32;2817:52;;;2865:1;2862;2855:12;2817:52;2888:29;2907:9;2888:29;:::i;:::-;2878:39;-1:-1:-1;2986:2:1;2971:18;;2958:32;;-1:-1:-1;3065:2:1;3050:18;;3037:32;3092:18;3081:30;;3078:50;;;3124:1;3121;3114:12;3078:50;3147:22;;3200:4;3192:13;;3188:27;-1:-1:-1;3178:55:1;;3229:1;3226;3219:12;3178:55;3269:2;3256:16;3295:18;3287:6;3284:30;3281:50;;;3327:1;3324;3317:12;3281:50;3372:7;3367:2;3358:6;3354:2;3350:15;3346:24;3343:37;3340:57;;;3393:1;3390;3383:12;3340:57;2684:774;;;;-1:-1:-1;3424:2:1;3416:11;;-1:-1:-1;;;2684:774:1:o;3671:260::-;3739:6;3747;3800:2;3788:9;3779:7;3775:23;3771:32;3768:52;;;3816:1;3813;3806:12;3768:52;3839:29;3858:9;3839:29;:::i;:::-;3829:39;;3887:38;3921:2;3910:9;3906:18;3887:38;:::i;:::-;3877:48;;3671:260;;;;;:::o;3936:380::-;4015:1;4011:12;;;;4058;;;4079:61;;4133:4;4125:6;4121:17;4111:27;;4079:61;4186:2;4178:6;4175:14;4155:18;4152:38;4149:161;;4232:10;4227:3;4223:20;4220:1;4213:31;4267:4;4264:1;4257:15;4295:4;4292:1;4285:15;4149:161;;3936:380;;;:::o;4321:127::-;4382:10;4377:3;4373:20;4370:1;4363:31;4413:4;4410:1;4403:15;4437:4;4434:1;4427:15;4453:128;4520:9;;;4541:11;;;4538:37;;;4555:18;;:::i;4586:125::-;4651:9;;;4672:10;;;4669:36;;;4685:18;;:::i
Swarm Source
ipfs://8cfe9650d4224347e313bf7a1d6b14bbdf38178a52a5437914f7da607bba8204
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.