ERC-20
Deflationary Token
Overview
Max Total Supply
965,209.135310597603573954 ASH
Holders
880 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,896.78016 ASHValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AshToken
Compiler Version
v0.5.11+commit.c082d0b4
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-08-26 */ /** This token is based on the original work of Shuffle Monster token https://shuffle.monster/ (0x3A9FfF453d50D4Ac52A6890647b823379ba36B9E) */ pragma solidity ^0.5.10; // File: contracts/commons/Ownable.sol contract Ownable { address public owner; event TransferOwnership(address _from, address _to); constructor() public { owner = msg.sender; emit TransferOwnership(address(0), msg.sender); } modifier onlyOwner() { require(msg.sender == owner, "only owner"); _; } function setOwner(address _owner) external onlyOwner { emit TransferOwnership(owner, _owner); owner = _owner; } } // File: contracts/commons/StorageUnit.sol pragma solidity ^0.5.10; contract StorageUnit { address private owner; mapping(bytes32 => bytes32) private store; constructor() public { owner = msg.sender; } function write(bytes32 _key, bytes32 _value) external { /* solium-disable-next-line */ require(msg.sender == owner); store[_key] = _value; } function read(bytes32 _key) external view returns (bytes32) { return store[_key]; } } // File: contracts/utils/IsContract.sol pragma solidity ^0.5.10; library IsContract { function isContract(address _addr) internal view returns (bool) { bytes32 codehash; /* solium-disable-next-line */ assembly { codehash := extcodehash(_addr) } return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470); } } // File: contracts/utils/DistributedStorage.sol pragma solidity ^0.5.10; library DistributedStorage { function contractSlot(bytes32 _struct) private view returns (address) { return address( uint256( keccak256( abi.encodePacked( byte(0xff), address(this), _struct, keccak256(type(StorageUnit).creationCode) ) ) ) ); } function deploy(bytes32 _struct) private { bytes memory slotcode = type(StorageUnit).creationCode; /* solium-disable-next-line */ assembly{ pop(create2(0, add(slotcode, 0x20), mload(slotcode), _struct)) } } function write( bytes32 _struct, bytes32 _key, bytes32 _value ) internal { StorageUnit store = StorageUnit(contractSlot(_struct)); if (!IsContract.isContract(address(store))) { deploy(_struct); } /* solium-disable-next-line */ (bool success, ) = address(store).call( abi.encodeWithSelector( store.write.selector, _key, _value ) ); require(success, "error writing storage"); } function read( bytes32 _struct, bytes32 _key ) internal view returns (bytes32) { StorageUnit store = StorageUnit(contractSlot(_struct)); if (!IsContract.isContract(address(store))) { return bytes32(0); } /* solium-disable-next-line */ (bool success, bytes memory data) = address(store).staticcall( abi.encodeWithSelector( store.read.selector, _key ) ); require(success, "error reading storage"); return abi.decode(data, (bytes32)); } } // File: contracts/utils/SafeMath.sol pragma solidity ^0.5.10; library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256) { uint256 z = x + y; require(z >= x, "Add overflow"); return z; } function sub(uint256 x, uint256 y) internal pure returns (uint256) { require(x >= y, "Sub underflow"); return x - y; } function mult(uint256 x, uint256 y) internal pure returns (uint256) { if (x == 0) { return 0; } uint256 z = x * y; require(z / x == y, "Mult overflow"); return z; } function div(uint256 x, uint256 y) internal pure returns (uint256) { require(y != 0, "Div by zero"); return x / y; } function divRound(uint256 x, uint256 y) internal pure returns (uint256) { require(y != 0, "Div by zero"); uint256 r = x / y; if (x % y != 0) { r = r + 1; } return r; } } // File: contracts/utils/Math.sol pragma solidity ^0.5.10; library Math { function orderOfMagnitude(uint256 input) internal pure returns (uint256){ uint256 counter = uint(-1); uint256 temp = input; do { temp /= 10; counter++; } while (temp != 0); return counter; } function min(uint256 _a, uint256 _b) internal pure returns (uint256) { if (_a < _b) { return _a; } else { return _b; } } function max(uint256 _a, uint256 _b) internal pure returns (uint256) { if (_a > _b) { return _a; } else { return _b; } } } // File: contracts/utils/GasPump.sol pragma solidity ^0.5.10; contract GasPump { bytes32 private stub; modifier requestGas(uint256 _factor) { if (tx.gasprice == 0 || gasleft() > block.gaslimit) { uint256 startgas = gasleft(); _; uint256 delta = startgas - gasleft(); uint256 target = (delta * _factor) / 100; startgas = gasleft(); while (startgas - gasleft() < target) { // Burn gas stub = keccak256(abi.encodePacked(stub)); } } else { _; } } } // File: contracts/interfaces/IERC20.sol pragma solidity ^0.5.10; interface IERC20 { event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); function transfer(address _to, uint _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function approve(address _spender, uint256 _value) external returns (bool success); function balanceOf(address _owner) external view returns (uint256 balance); } // File: contracts/commons/AddressMinHeap.sol pragma solidity ^0.5.10; /* @author Agustin Aguilar <[email protected]> */ library AddressMinHeap { using AddressMinHeap for AddressMinHeap.Heap; struct Heap { uint256[] entries; mapping(address => uint256) index; } function initialize(Heap storage _heap) internal { require(_heap.entries.length == 0, "already initialized"); _heap.entries.push(0); } function encode(address _addr, uint256 _value) internal pure returns (uint256 _entry) { /* solium-disable-next-line */ assembly { _entry := not(or(and(0xffffffffffffffffffffffffffffffffffffffff, _addr), shl(160, _value))) } } function decode(uint256 _entry) internal pure returns (address _addr, uint256 _value) { /* solium-disable-next-line */ assembly { let entry := not(_entry) _addr := and(entry, 0xffffffffffffffffffffffffffffffffffffffff) _value := shr(160, entry) } } function decodeAddress(uint256 _entry) internal pure returns (address _addr) { /* solium-disable-next-line */ assembly { _addr := and(not(_entry), 0xffffffffffffffffffffffffffffffffffffffff) } } function top(Heap storage _heap) internal view returns(address, uint256) { if (_heap.entries.length < 2) { return (address(0), 0); } return decode(_heap.entries[1]); } function has(Heap storage _heap, address _addr) internal view returns (bool) { return _heap.index[_addr] != 0; } function size(Heap storage _heap) internal view returns (uint256) { return _heap.entries.length - 1; } function entry(Heap storage _heap, uint256 _i) internal view returns (address, uint256) { return decode(_heap.entries[_i + 1]); } // RemoveMax pops off the root element of the heap (the highest value here) and rebalances the heap function popTop(Heap storage _heap) internal returns(address _addr, uint256 _value) { // Ensure the heap exists uint256 heapLength = _heap.entries.length; require(heapLength > 1, "The heap does not exists"); // take the root value of the heap (_addr, _value) = decode(_heap.entries[1]); _heap.index[_addr] = 0; if (heapLength == 2) { _heap.entries.length = 1; } else { // Takes the last element of the array and put it at the root uint256 val = _heap.entries[heapLength - 1]; _heap.entries[1] = val; // Delete the last element from the array _heap.entries.length = heapLength - 1; // Start at the top uint256 ind = 1; // Bubble down ind = _heap.bubbleDown(ind, val); // Update index _heap.index[decodeAddress(val)] = ind; } } // Inserts adds in a value to our heap. function insert(Heap storage _heap, address _addr, uint256 _value) internal { require(_heap.index[_addr] == 0, "The entry already exists"); // Add the value to the end of our array uint256 encoded = encode(_addr, _value); _heap.entries.push(encoded); // Start at the end of the array uint256 currentIndex = _heap.entries.length - 1; // Bubble Up currentIndex = _heap.bubbleUp(currentIndex, encoded); // Update index _heap.index[_addr] = currentIndex; } function update(Heap storage _heap, address _addr, uint256 _value) internal { uint256 ind = _heap.index[_addr]; require(ind != 0, "The entry does not exists"); uint256 can = encode(_addr, _value); uint256 val = _heap.entries[ind]; uint256 newInd; if (can < val) { // Bubble down newInd = _heap.bubbleDown(ind, can); } else if (can > val) { // Bubble up newInd = _heap.bubbleUp(ind, can); } else { // no changes needed return; } // Update entry _heap.entries[newInd] = can; // Update index if (newInd != ind) { _heap.index[_addr] = newInd; } } function bubbleUp(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) { // Bubble up ind = _ind; if (ind != 1) { uint256 parent = _heap.entries[ind / 2]; while (parent < _val) { // If the parent value is lower than our current value, we swap them (_heap.entries[ind / 2], _heap.entries[ind]) = (_val, parent); // Update moved Index _heap.index[decodeAddress(parent)] = ind; // change our current Index to go up to the parent ind = ind / 2; if (ind == 1) { break; } // Update parent parent = _heap.entries[ind / 2]; } } } function bubbleDown(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) { // Bubble down ind = _ind; uint256 lenght = _heap.entries.length; uint256 target = lenght - 1; while (ind * 2 < lenght) { // get the current index of the children uint256 j = ind * 2; // left child value uint256 leftChild = _heap.entries[j]; // Store the value of the child uint256 childValue; if (target > j) { // The parent has two childs 👨👧👦 // Load right child value uint256 rightChild = _heap.entries[j + 1]; // Compare the left and right child. // if the rightChild is greater, then point j to it's index // and save the value if (leftChild < rightChild) { childValue = rightChild; j = j + 1; } else { // The left child is greater childValue = leftChild; } } else { // The parent has a single child 👨👦 childValue = leftChild; } // Check if the child has a lower value if (_val > childValue) { break; } // else swap the value (_heap.entries[ind], _heap.entries[j]) = (childValue, _val); // Update moved Index _heap.index[decodeAddress(childValue)] = ind; // and let's keep going down the heap ind = j; } } } // File: contracts/Heap.sol pragma solidity ^0.5.10; contract Heap is Ownable { using AddressMinHeap for AddressMinHeap.Heap; // heap AddressMinHeap.Heap private heap; // Heap events event JoinHeap(address indexed _address, uint256 _balance, uint256 _prevSize); event LeaveHeap(address indexed _address, uint256 _balance, uint256 _prevSize); uint256 public constant TOP_SIZE = 512; constructor() public { heap.initialize(); } function topSize() external pure returns (uint256) { return TOP_SIZE; } function addressAt(uint256 _i) external view returns (address addr) { (addr, ) = heap.entry(_i); } function indexOf(address _addr) external view returns (uint256) { return heap.index[_addr]; } function entry(uint256 _i) external view returns (address, uint256) { return heap.entry(_i); } function top() external view returns (address, uint256) { return heap.top(); } function size() external view returns (uint256) { return heap.size(); } function update(address _addr, uint256 _new) external onlyOwner { uint256 _size = heap.size(); // If the heap is empty // join the _addr if (_size == 0) { emit JoinHeap(_addr, _new, 0); heap.insert(_addr, _new); return; } // Load top value of the heap (, uint256 lastBal) = heap.top(); // If our target address already is in the heap if (heap.has(_addr)) { // Update the target address value heap.update(_addr, _new); // If the new value is 0 // always pop the heap // we updated the heap, so our address should be on top if (_new == 0) { heap.popTop(); emit LeaveHeap(_addr, 0, _size); } } else { // IF heap is full or new balance is higher than pop heap if (_new != 0 && (_size < TOP_SIZE || lastBal < _new)) { // If heap is full pop heap if (_size >= TOP_SIZE) { (address _poped, uint256 _balance) = heap.popTop(); emit LeaveHeap(_poped, _balance, _size); } // Insert new value heap.insert(_addr, _new); emit JoinHeap(_addr, _new, _size); } } } } // File: contracts/AshToken.sol pragma solidity ^0.5.10; contract AshToken is Ownable, GasPump, IERC20 { using DistributedStorage for bytes32; using SafeMath for uint256; // Ash events event Winner(address indexed _addr, uint256 _value); // Managment events event SetName(string _prev, string _new); event SetExtraGas(uint256 _prev, uint256 _new); event SetHeap(address _prev, address _new); event WhitelistFrom(address _addr, bool _whitelisted); event WhitelistTo(address _addr, bool _whitelisted); uint256 public totalSupply; bytes32 private constant BALANCE_KEY = keccak256("balance"); // game uint256 public constant FEE = 100; // metadata string public name = "Ash"; string public constant symbol = "ASH"; uint8 public constant decimals = 18; string public about = "This token is based on the original work of Shuffle Monster token https://shuffle.monster/ (0x3A9FfF453d50D4Ac52A6890647b823379ba36B9E)"; // fee whitelist mapping(address => bool) public whitelistFrom; mapping(address => bool) public whitelistTo; // heap Heap public heap; // internal uint256 public extraGas; bool inited; function init( address[] calldata _addrs, uint256[] calldata _amounts ) external { // Only init once assert(!inited); inited = true; // Sanity checks assert(totalSupply == 0); assert(address(heap) == address(0)); // Create Heap heap = new Heap(); emit SetHeap(address(0), address(heap)); // Init contract variables and mint // entire token balance extraGas = 15; emit SetExtraGas(0, extraGas); // Emit initial supply assert(_addrs.length == _amounts.length); for (uint256 i = 0; i < _addrs.length; i++) { address _to = _addrs[i]; uint256 _amount = _amounts[i]; emit Transfer(address(0), _to, _amount); _setBalance(_to, _amount); totalSupply = totalSupply.add(_amount); } } /// // Storage access functions /// // Getters function _toKey(address a) internal pure returns (bytes32) { return bytes32(uint256(a)); } function _balanceOf(address _addr) internal view returns (uint256) { return uint256(_toKey(_addr).read(BALANCE_KEY)); } function _allowance(address _addr, address _spender) internal view returns (uint256) { return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("allowance", _spender)))); } function _nonce(address _addr, uint256 _cat) internal view returns (uint256) { return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("nonce", _cat)))); } // Setters function _setAllowance(address _addr, address _spender, uint256 _value) internal { _toKey(_addr).write(keccak256(abi.encodePacked("allowance", _spender)), bytes32(_value)); } function _setNonce(address _addr, uint256 _cat, uint256 _value) internal { _toKey(_addr).write(keccak256(abi.encodePacked("nonce", _cat)), bytes32(_value)); } function _setBalance(address _addr, uint256 _balance) internal { _toKey(_addr).write(BALANCE_KEY, bytes32(_balance)); heap.update(_addr, _balance); } /// // Internal methods /// function _isWhitelisted(address _from, address _to) internal view returns (bool) { return whitelistFrom[_from]||whitelistTo[_to]; } function _random(address _s1, uint256 _s2, uint256 _s3, uint256 _max) internal pure returns (uint256) { uint256 rand = uint256(keccak256(abi.encodePacked(_s1, _s2, _s3))); return rand % (_max + 1); } function _pickWinner(address _from, uint256 _value) internal returns (address winner) { // Get order of magnitude of the tx uint256 magnitude = Math.orderOfMagnitude(_value); // Pull nonce for a given order of magnitude uint256 nonce = _nonce(_from, magnitude); _setNonce(_from, magnitude, nonce + 1); // pick entry from heap winner = heap.addressAt(_random(_from, nonce, magnitude, heap.size() - 1)); } function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _payFee) internal { // If transfer amount is zero // emit event and stop execution if (_value == 0) { emit Transfer(_from, _to, 0); return; } // Load sender balance uint256 balanceFrom = _balanceOf(_from); require(balanceFrom >= _value, "balance not enough"); // Check if operator is sender if (_from != _operator) { // If not, validate allowance uint256 allowanceFrom = _allowance(_from, _operator); // If allowance is not 2 ** 256 - 1, consume allowance if (allowanceFrom != uint(-1)) { // Check allowance and save new one require(allowanceFrom >= _value, "allowance not enough"); _setAllowance(_from, _operator, allowanceFrom.sub(_value)); } } // Calculate receiver balance // initial receive is full value uint256 receive = _value; uint256 burn = 0; uint256 shuf = 0; // Change sender balance _setBalance(_from, balanceFrom.sub(_value)); // If the transaction is not whitelisted // or if sender requested to pay the fee // calculate fees if (_payFee || !_isWhitelisted(_from, _to)) { // Fee is the same for BURN and SHUF // If we are sending value one // give priority to BURN burn = _value.divRound(FEE); shuf = _value == 1 ? 0 : burn; // Subtract fees from receiver amount receive = receive.sub(burn.add(shuf)); // Burn tokens totalSupply = totalSupply.sub(burn); emit Transfer(_from, address(0), burn); // Ash tokens // Pick winner pseudo-randomly address winner = _pickWinner(_from, _value); // Transfer balance to winner _setBalance(winner, _balanceOf(winner).add(shuf)); emit Winner(winner, shuf); emit Transfer(_from, winner, shuf); } // Sanity checks // no tokens where created assert(burn.add(shuf).add(receive) == _value); // Add tokens to receiver _setBalance(_to, _balanceOf(_to).add(receive)); emit Transfer(_from, _to, receive); } /// // Managment /// function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner { emit WhitelistTo(_addr, _whitelisted); whitelistTo[_addr] = _whitelisted; } function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner { emit WhitelistFrom(_addr, _whitelisted); whitelistFrom[_addr] = _whitelisted; } function setName(string calldata _name) external onlyOwner { emit SetName(name, _name); name = _name; } function setExtraGas(uint256 _gas) external onlyOwner { emit SetExtraGas(extraGas, _gas); extraGas = _gas; } function setHeap(Heap _heap) external onlyOwner { emit SetHeap(address(heap), address(_heap)); heap = _heap; } ///// // Heap methods ///// function topSize() external view returns (uint256) { return heap.topSize(); } function heapSize() external view returns (uint256) { return heap.size(); } function heapEntry(uint256 _i) external view returns (address, uint256) { return heap.entry(_i); } function heapTop() external view returns (address, uint256) { return heap.top(); } function heapIndex(address _addr) external view returns (uint256) { return heap.indexOf(_addr); } function getNonce(address _addr, uint256 _cat) external view returns (uint256) { return _nonce(_addr, _cat); } ///// // ERC20 ///// function balanceOf(address _addr) external view returns (uint256) { return _balanceOf(_addr); } function allowance(address _addr, address _spender) external view returns (uint256) { return _allowance(_addr, _spender); } function approve(address _spender, uint256 _value) external returns (bool) { emit Approval(msg.sender, _spender, _value); _setAllowance(msg.sender, _spender, _value); return true; } function transfer(address _to, uint256 _value) external requestGas(extraGas) returns (bool) { _transferFrom(msg.sender, msg.sender, _to, _value, false); return true; } function transferWithFee(address _to, uint256 _value) external requestGas(extraGas) returns (bool) { _transferFrom(msg.sender, msg.sender, _to, _value, true); return true; } function transferFrom(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) { _transferFrom(msg.sender, _from, _to, _value, false); return true; } function transferFromWithFee(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) { _transferFrom(msg.sender, _from, _to, _value, true); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_i","type":"uint256"}],"name":"heapEntry","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"extraGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapTop","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"about","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"topSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFromWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"setExtraGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heap","outputs":[{"internalType":"contract Heap","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"heapIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract Heap","name":"_heap","type":"address"}],"name":"setHeap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Winner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_prev","type":"string"},{"indexed":false,"internalType":"string","name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_prev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_prev","type":"address"},{"indexed":false,"internalType":"address","name":"_new","type":"address"}],"name":"SetHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","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":"_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":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"}]
Contract Creation Code
60c0604052600360808190527f417368000000000000000000000000000000000000000000000000000000000060a09081526200003e919081620000c5565b506040518060c0016040528060878152602001620031426087913980516200006f91600491602090910190620000c5565b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a16200016a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010857805160ff191683800117855562000138565b8280016001018555821562000138579182015b82811115620001385782518255916020019190600101906200011b565b50620001469291506200014a565b5090565b6200016791905b8082111562000146576000815560010162000151565b90565b612fc8806200017a6000396000f3fe60806040523480156200001157600080fd5b5060043610620002145760003560e01c80637c32cdd11162000129578063a9059cbb11620000b1578063c57981b5116200007b578063c57981b51462000748578063dd62ed3e1462000752578063fa7e8dc71462000783578063ff12bbf4146200078d5762000214565b8063a9059cbb1462000651578063b00cf0491462000680578063bbac119314620006a9578063c47f002714620006d25762000214565b80638da5cb5b11620000f35780638da5cb5b14620005e657806395d89b41146200060c578063a12ab7701462000616578063a486309d14620006205762000214565b80637c32cdd1146200055457806389535803146200055e57806389f35468146200058d5780638cec999314620005c65762000214565b806323b872dd11620001ad57806343684b21116200017757806343684b2114620004ee5780634849f5c814620005175780635e1d5482146200052157806370a08231146200052b5762000214565b806323b872dd14620003c0578063313ce56714620003f9578063371aa15814620004195780633767e33914620004e45762000214565b8063095ea7b311620001ef578063095ea7b3146200032157806313af4035146200035057806316b627d1146200037b57806318160ddd14620003a45762000214565b806306fdde03146200021957806308acece2146200029b57806308eaae4d14620002de575b600080fd5b62000223620007be565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200025f57818101518382015260200162000245565b50505050905090810190601f1680156200028d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002ca60048036036040811015620002b357600080fd5b506001600160a01b03813516906020013562000850565b604080519115158252519081900360200190f35b620002fe60048036036020811015620002f657600080fd5b5035620008f1565b604080516001600160a01b03909316835260208301919091528051918290030190f35b620002ca600480360360408110156200033957600080fd5b506001600160a01b0381351690602001356200097d565b62000379600480360360208110156200036857600080fd5b50356001600160a01b0316620009d8565b005b620002ca600480360360208110156200039357600080fd5b50356001600160a01b031662000a8f565b620003ae62000aa4565b60408051918252519081900360200190f35b620002ca60048036036060811015620003d857600080fd5b506001600160a01b0381358116916020810135909116906040013562000aaa565b6200040362000b4c565b6040805160ff9092168252519081900360200190f35b62000379600480360360408110156200043157600080fd5b8101906020810181356401000000008111156200044d57600080fd5b8201836020820111156200046057600080fd5b803590602001918460208302840111640100000000831117156200048357600080fd5b919390929091602081019035640100000000811115620004a257600080fd5b820183602082011115620004b557600080fd5b80359060200191846020830284011164010000000083111715620004d857600080fd5b50909250905062000b51565b620003ae62000d16565b620002ca600480360360208110156200050657600080fd5b50356001600160a01b031662000d1c565b620002fe62000d31565b6200022362000db5565b620003ae600480360360208110156200054357600080fd5b50356001600160a01b031662000e13565b620003ae62000e20565b620003ae600480360360408110156200057657600080fd5b506001600160a01b03813516906020013562000e9a565b620002ca60048036036060811015620005a557600080fd5b506001600160a01b0381358116916020810135909116906040013562000eaf565b6200037960048036036020811015620005de57600080fd5b503562000eee565b620005f062000f7d565b604080516001600160a01b039092168252519081900360200190f35b6200022362000f8c565b620005f062000fab565b62000379600480360360408110156200063857600080fd5b506001600160a01b038135169060200135151562000fba565b620002ca600480360360408110156200066957600080fd5b506001600160a01b03813516906020013562001077565b620003ae600480360360208110156200069857600080fd5b50356001600160a01b0316620010b6565b6200037960048036036020811015620006c157600080fd5b50356001600160a01b03166200113c565b6200037960048036036020811015620006ea57600080fd5b8101906020810181356401000000008111156200070657600080fd5b8201836020820111156200071957600080fd5b803590602001918460018302840111640100000000831117156200073c57600080fd5b509092509050620011f3565b620003ae62001335565b620003ae600480360360408110156200076a57600080fd5b506001600160a01b03813581169160200135166200133a565b620003ae62001348565b6200037960048036036040811015620007a557600080fd5b506001600160a01b03813516906020013515156200138e565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015620008485780601f106200081c5761010080835404028352916020019162000848565b820191906000526020600020905b8154815290600101906020018083116200082a57829003601f168201915b505050505081565b60006008543a60001480620008645750455a115b15620008d55760005a90506200087f3333878760016200144b565b6001925060005a820390506064838202045a92505b805a84031015620008cc5760018054604080516020808201939093528151808203840181529082019091528051910120905562000894565b505050620008ea565b620008e53333868660016200144b565b600191505b5092915050565b6007546040805163e2095c0760e01b815260048101849052815160009384936001600160a01b039091169263e2095c079260248083019392829003018186803b1580156200093e57600080fd5b505afa15801562000953573d6000803e3d6000fd5b505050506040513d60408110156200096a57600080fd5b5080516020909101519092509050915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a3620009ce3384846200178a565b5060015b92915050565b6000546001600160a01b0316331462000a25576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60066020526000908152604090205460ff1681565b60025481565b60006008543a6000148062000abe5750455a115b1562000b2f5760005a905062000ad93387878760006200144b565b6001925060005a820390506064838202045a92505b805a8403101562000b265760018054604080516020808201939093528151808203840181529082019091528051910120905562000aee565b50505062000b44565b62000b3f3386868660006200144b565b600191505b509392505050565b601281565b60095460ff161562000b5f57fe5b6009805460ff191660011790556002541562000b7757fe5b6007546001600160a01b03161562000b8b57fe5b60405162000b99906200208f565b604051809103906000f08015801562000bb6573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b039283161790819055604080516000815291909216602082015281517f4b388b1aa01b2653af632da9d80cca5cfe489300086d04070fca9dc860629d4f929181900390910190a1600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a182811462000c6057fe5b60005b8381101562000d0f57600085858381811062000c7b57fe5b905060200201356001600160a01b03169050600084848481811062000c9c57fe5b905060200201359050816001600160a01b031660006001600160a01b031660008051602062002f74833981519152836040518082815260200191505060405180910390a362000cec8282620017ee565b60025462000d01908263ffffffff6200188e16565b600255505060010162000c63565b5050505050565b60085481565b60056020526000908152604090205460ff1681565b60075460408051637f36e6dd60e11b8152815160009384936001600160a01b039091169263fe6dcdba9260048083019392829003018186803b15801562000d7757600080fd5b505afa15801562000d8c573d6000803e3d6000fd5b505050506040513d604081101562000da357600080fd5b50805160209091015190925090509091565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015620008485780601f106200081c5761010080835404028352916020019162000848565b6000620009d282620018d8565b60075460408051637c32cdd160e01b815290516000926001600160a01b031691637c32cdd1916004808301926020929190829003018186803b15801562000e6657600080fd5b505afa15801562000e7b573d6000803e3d6000fd5b505050506040513d602081101562000e9257600080fd5b505190505b90565b600062000ea8838362001914565b9392505050565b60006008543a6000148062000ec35750455a115b1562000ede5760005a905062000ad93387878760016200144b565b62000b3f3386868660016200144b565b6000546001600160a01b0316331462000f3b576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b60405180604001604052806003815260200162082a6960eb1b81525081565b6007546001600160a01b031681565b6000546001600160a01b0316331462001007576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60006008543a600014806200108b5750455a115b15620010a65760005a90506200087f3333878760006200144b565b620008e53333868660006200144b565b6007546040805163fd6aad2560e01b81526001600160a01b0384811660048301529151600093929092169163fd6aad2591602480820192602092909190829003018186803b1580156200110857600080fd5b505afa1580156200111d573d6000803e3d6000fd5b505050506040513d60208110156200113457600080fd5b505192915050565b6000546001600160a01b0316331462001189576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600754604080516001600160a01b039283168152918316602083015280517f4b388b1aa01b2653af632da9d80cca5cfe489300086d04070fca9dc860629d4f9281900390910190a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001240576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260038054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015620012ec5780601f10620012c057610100808354040283529160200191620012ec565b820191906000526020600020905b815481529060010190602001808311620012ce57829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a162001330600383836200209d565b505050565b606481565b600062000ea883836200195c565b6007546040805163949d225d60e01b815290516000926001600160a01b03169163949d225d916004808301926020929190829003018186803b15801562000e6657600080fd5b6000546001600160a01b03163314620013db576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b816200149257826001600160a01b0316846001600160a01b031660008051602062002f7483398151915260006040518082815260200191505060405180910390a362000d0f565b60006200149f85620018d8565b905082811015620014ec576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b0316146200158d5760006200151486886200195c565b905060001981146200158b57838110156200156d576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b6200158b868862001585848863ffffffff620019bd16565b6200178a565b505b82600080620015ae88620015a8868663ffffffff620019bd16565b620017ee565b8480620015c45750620015c2888862001a0b565b155b156200171057620015dd86606463ffffffff62001a4f16565b915085600114620015ef5781620015f2565b60005b9050620016186200160a838363ffffffff6200188e16565b849063ffffffff620019bd16565b60025490935062001630908363ffffffff620019bd16565b6002556040805183815290516000916001600160a01b038b169160008051602062002f748339815191529181900360200190a3600062001671898862001abc565b90506200169581620015a8846200168885620018d8565b9063ffffffff6200188e16565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602062002f74833981519152846040518082815260200191505060405180910390a3505b85620017288462001688858563ffffffff6200188e16565b146200173057fe5b6200174587620015a885620016888b620018d8565b866001600160a01b0316886001600160a01b031660008051602062002f74833981519152856040518082815260200191505060405180910390a3505050505050505050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120620013309082620017e08662001be8565b919063ffffffff62001bf416565b604080516662616c616e636560c81b815290519081900360070190206200181b9082620017e08562001be8565b6007546040805163516c1daf60e11b81526001600160a01b038581166004830152602482018590529151919092169163a2d83b5e91604480830192600092919082900301818387803b1580156200187157600080fd5b505af115801562001886573d6000803e3d6000fd5b505050505050565b60008282018381101562000ea8576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b604080516662616c616e636560c81b81529051908190036007019020600090620009d290620019078462001be8565b9063ffffffff62001d5016565b600062000ea8826040516020018080646e6f6e636560d81b81525060050182815260200191505060405160208183030381529060405280519060200120620019078562001be8565b600062000ea882604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120620019078562001be8565b60008183101562001a05576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526005602052604081205460ff168062000ea85750506001600160a01b031660009081526006602052604090205460ff16919050565b60008162001a92576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848162001a9e57fe5b04905082848162001aab57fe5b061562000ea8576001019392505050565b60008062001aca8362001ecb565b9050600062001ada858362001914565b905062001aec85838360010162001eea565b6007546040805163949d225d60e01b815290516001600160a01b0390921691630af2b3e59162001b7c91899186918891600191889163949d225d916004808301926020929190829003018186803b15801562001b4757600080fd5b505afa15801562001b5c573d6000803e3d6000fd5b505050506040513d602081101562001b7357600080fd5b50510362001f34565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562001bb157600080fd5b505afa15801562001bc6573d6000803e3d6000fd5b505050506040513d602081101562001bdd57600080fd5b505195945050505050565b6001600160a01b031690565b600062001c018462001f91565b905062001c0e816200201e565b62001c1e5762001c1e8462002056565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831062001c985780518252601f19909201916020918201910162001c77565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001cfc576040519150601f19603f3d011682016040523d82523d6000602084013e62001d01565b606091505b505090508062000d0f576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b60008062001d5e8462001f91565b905062001d6b816200201e565b62001d7b575060009050620009d2565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831062001df25780518252601f19909201916020918201910162001dd1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811462001e54576040519150601f19603f3d011682016040523d82523d6000602084013e62001e59565b606091505b50915091508162001ea9576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101562001ebf57600080fd5b50519695505050505050565b6000600019825b60019190910190600a90048062001ed2575092915050565b62001330826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b620017e08662001be8565b604080516001600160601b0319606087901b16602080830191909152603482018690526054808301869052835180840390910181526074909201909252805191012060009060018301818162001f8657fe5b069695505050505050565b600060ff60f81b30836040518060200162001fac9062002122565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f801580159062000ea857507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b6060604051806020016200206a9062002122565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b610d01806200214e83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620020e05782800160ff1982351617855562002110565b8280016001018555821562002110579182015b8281111562002110578235825591602001919060010190620020f3565b506200211e92915062002130565b5090565b6101258062002e4f83390190565b62000e9791905b808211156200211e57600081556001016200213756fe608060405234801561001057600080fd5b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1610074600161007960201b610b621760201c565b6100fc565b8054156100e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b80546001810182556000918252602082200155565b610bf68061010b6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d1461012e578063a2d83b5e14610136578063e2095c0714610162578063fd6aad25146101a2578063fe6dcdba146101c85761009e565b80630af2b3e5146100a357806313af4035146100dc57806331fb7127146101045780637c32cdd11461011e5780638da5cb5b14610126575b600080fd5b6100c0600480360360208110156100b957600080fd5b50356101d0565b604080516001600160a01b039092168252519081900360200190f35b610102600480360360208110156100f257600080fd5b50356001600160a01b03166101ea565b005b61010c6102a0565b60408051918252519081900360200190f35b61010c6102a6565b6100c06102ad565b61010c6102bc565b6101026004803603604081101561014c57600080fd5b506001600160a01b0381351690602001356102cd565b61017f6004803603602081101561017857600080fd5b50356104fb565b604080516001600160a01b03909316835260208301919091528051918290030190f35b61010c600480360360208110156101b857600080fd5b50356001600160a01b0316610519565b61017f610534565b60006101e360018363ffffffff61054916565b5092915050565b6000546001600160a01b03163314610236576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b61020081565b6102005b90565b6000546001600160a01b031681565b60006102c8600161057c565b905090565b6000546001600160a01b03163314610319576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6000610325600161057c565b90508061038757604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a26103816001848463ffffffff61058416565b506104f7565b6000610393600161064f565b91506103a8905060018563ffffffff61067c16565b1561041a576103bf6001858563ffffffff61069d16565b82610415576103ce60016107c5565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b6104f4565b8215801590610433575061020082108061043357508281105b156104f457610200821061049e5760008061044e60016107c5565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b6104b06001858563ffffffff61058416565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a25b50505b5050565b60008061050f60018463ffffffff61054916565b915091505b915091565b6001600160a01b031660009081526002602052604090205490565b600080610541600161064f565b915091509091565b60008061057184600001846001018154811061056157fe5b9060005260206000200154610905565b915091509250929050565b546000190190565b6001600160a01b0382166000908152600184016020526040902054156105f1576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006105fd838361091a565b84546001810186556000868152602090200181905584549091506000190161062c85828463ffffffff61092e16565b6001600160a01b0390941660009081526001909501602052505060409092205550565b805460009081906002111561066957506000905080610514565b61050f8360000160018154811061056157fe5b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b03821660009081526001840160205260409020548061070a576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000610716848461091a565b9050600085600001838154811061072957fe5b906000526020600020015490506000818310156107585761075187858563ffffffff610a0516565b905061077a565b818311156107715761075187858563ffffffff61092e16565b505050506107c0565b8287600001828154811061078a57fe5b6000918252602090912001558084146107bb576001600160a01b038616600090815260018801602052604090208190555b505050505b505050565b8054600090819060018111610821576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b6108348460000160018154811061056157fe5b6001600160a01b03821660009081526001870160205260408120559093509150600281141561086f5760016108698582610b25565b506108ff565b600084600001600183038154811061088357fe5b9060005260206000200154905080856000016001815481106108a157fe5b60009182526020909120015560001982016108bc8682610b25565b5060016108d086828463ffffffff610a0516565b9050808660010160006108e285610b18565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b196001600160a01b0381169160a09190911c90565b60a01b6001600160a01b0391909116171990565b81600181146109fe57600084600283048154811061094857fe5b906000526020600020015490505b828110156109fc57828186600285048154811061096f57fe5b90600052602060002001600088600001868154811061098a57fe5b60009182526020822001939093555091909155829060018701906109ad84610b18565b6001600160a01b0316815260208101919091526040016000205560028204915081600114156109db576109fc565b8460028304815481106109ea57fe5b90600052602060002001549050610956565b505b9392505050565b8254829060001981015b81836002021015610b0f5785546002840290600090889083908110610a3057fe5b90600052602060002001549050600082841115610a88576000896000018460010181548110610a5b57fe5b9060005260206000200154905080831015610a7e57809150836001019350610a82565b8291505b50610a8b565b50805b80871115610a9b57505050610b0f565b80878a6000018881548110610aac57fe5b9060005260206000200160008c6000018781548110610ac757fe5b60009182526020822001939093555091909155869060018b0190610aea84610b18565b6001600160a01b0316815260208101919091526040016000205550909350610a0f9050565b50509392505050565b196001600160a01b031690565b8154818355818111156107c0576000838152602090206107c09181019083016102aa91905b80821115610b5e5760008155600101610b4a565b5090565b805415610bac576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8054600181018255600091825260208220015556fea265627a7a72315820922a34b1af4165a89bd81cf906b5d6a94091a909b4af774a819ad057be98cd2e64736f6c634300050b0032608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a72315820b3961a28834a0983f25217f833e9e446bb4dd739dc4dd3f4b010860f5e574aa164736f6c634300050b0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a723158205e3ed3a14fec4b3b662eeea7a71434f24aae01b45da6e92522890fc89fd8ff8d64736f6c634300050b00325468697320746f6b656e206973206261736564206f6e20746865206f726967696e616c20776f726b206f662053687566666c65204d6f6e7374657220746f6b656e2068747470733a2f2f73687566666c652e6d6f6e737465722f202830783341394666463435336435304434416335324136383930363437623832333337396261333642394529
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620002145760003560e01c80637c32cdd11162000129578063a9059cbb11620000b1578063c57981b5116200007b578063c57981b51462000748578063dd62ed3e1462000752578063fa7e8dc71462000783578063ff12bbf4146200078d5762000214565b8063a9059cbb1462000651578063b00cf0491462000680578063bbac119314620006a9578063c47f002714620006d25762000214565b80638da5cb5b11620000f35780638da5cb5b14620005e657806395d89b41146200060c578063a12ab7701462000616578063a486309d14620006205762000214565b80637c32cdd1146200055457806389535803146200055e57806389f35468146200058d5780638cec999314620005c65762000214565b806323b872dd11620001ad57806343684b21116200017757806343684b2114620004ee5780634849f5c814620005175780635e1d5482146200052157806370a08231146200052b5762000214565b806323b872dd14620003c0578063313ce56714620003f9578063371aa15814620004195780633767e33914620004e45762000214565b8063095ea7b311620001ef578063095ea7b3146200032157806313af4035146200035057806316b627d1146200037b57806318160ddd14620003a45762000214565b806306fdde03146200021957806308acece2146200029b57806308eaae4d14620002de575b600080fd5b62000223620007be565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200025f57818101518382015260200162000245565b50505050905090810190601f1680156200028d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002ca60048036036040811015620002b357600080fd5b506001600160a01b03813516906020013562000850565b604080519115158252519081900360200190f35b620002fe60048036036020811015620002f657600080fd5b5035620008f1565b604080516001600160a01b03909316835260208301919091528051918290030190f35b620002ca600480360360408110156200033957600080fd5b506001600160a01b0381351690602001356200097d565b62000379600480360360208110156200036857600080fd5b50356001600160a01b0316620009d8565b005b620002ca600480360360208110156200039357600080fd5b50356001600160a01b031662000a8f565b620003ae62000aa4565b60408051918252519081900360200190f35b620002ca60048036036060811015620003d857600080fd5b506001600160a01b0381358116916020810135909116906040013562000aaa565b6200040362000b4c565b6040805160ff9092168252519081900360200190f35b62000379600480360360408110156200043157600080fd5b8101906020810181356401000000008111156200044d57600080fd5b8201836020820111156200046057600080fd5b803590602001918460208302840111640100000000831117156200048357600080fd5b919390929091602081019035640100000000811115620004a257600080fd5b820183602082011115620004b557600080fd5b80359060200191846020830284011164010000000083111715620004d857600080fd5b50909250905062000b51565b620003ae62000d16565b620002ca600480360360208110156200050657600080fd5b50356001600160a01b031662000d1c565b620002fe62000d31565b6200022362000db5565b620003ae600480360360208110156200054357600080fd5b50356001600160a01b031662000e13565b620003ae62000e20565b620003ae600480360360408110156200057657600080fd5b506001600160a01b03813516906020013562000e9a565b620002ca60048036036060811015620005a557600080fd5b506001600160a01b0381358116916020810135909116906040013562000eaf565b6200037960048036036020811015620005de57600080fd5b503562000eee565b620005f062000f7d565b604080516001600160a01b039092168252519081900360200190f35b6200022362000f8c565b620005f062000fab565b62000379600480360360408110156200063857600080fd5b506001600160a01b038135169060200135151562000fba565b620002ca600480360360408110156200066957600080fd5b506001600160a01b03813516906020013562001077565b620003ae600480360360208110156200069857600080fd5b50356001600160a01b0316620010b6565b6200037960048036036020811015620006c157600080fd5b50356001600160a01b03166200113c565b6200037960048036036020811015620006ea57600080fd5b8101906020810181356401000000008111156200070657600080fd5b8201836020820111156200071957600080fd5b803590602001918460018302840111640100000000831117156200073c57600080fd5b509092509050620011f3565b620003ae62001335565b620003ae600480360360408110156200076a57600080fd5b506001600160a01b03813581169160200135166200133a565b620003ae62001348565b6200037960048036036040811015620007a557600080fd5b506001600160a01b03813516906020013515156200138e565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015620008485780601f106200081c5761010080835404028352916020019162000848565b820191906000526020600020905b8154815290600101906020018083116200082a57829003601f168201915b505050505081565b60006008543a60001480620008645750455a115b15620008d55760005a90506200087f3333878760016200144b565b6001925060005a820390506064838202045a92505b805a84031015620008cc5760018054604080516020808201939093528151808203840181529082019091528051910120905562000894565b505050620008ea565b620008e53333868660016200144b565b600191505b5092915050565b6007546040805163e2095c0760e01b815260048101849052815160009384936001600160a01b039091169263e2095c079260248083019392829003018186803b1580156200093e57600080fd5b505afa15801562000953573d6000803e3d6000fd5b505050506040513d60408110156200096a57600080fd5b5080516020909101519092509050915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a3620009ce3384846200178a565b5060015b92915050565b6000546001600160a01b0316331462000a25576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60066020526000908152604090205460ff1681565b60025481565b60006008543a6000148062000abe5750455a115b1562000b2f5760005a905062000ad93387878760006200144b565b6001925060005a820390506064838202045a92505b805a8403101562000b265760018054604080516020808201939093528151808203840181529082019091528051910120905562000aee565b50505062000b44565b62000b3f3386868660006200144b565b600191505b509392505050565b601281565b60095460ff161562000b5f57fe5b6009805460ff191660011790556002541562000b7757fe5b6007546001600160a01b03161562000b8b57fe5b60405162000b99906200208f565b604051809103906000f08015801562000bb6573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b039283161790819055604080516000815291909216602082015281517f4b388b1aa01b2653af632da9d80cca5cfe489300086d04070fca9dc860629d4f929181900390910190a1600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a182811462000c6057fe5b60005b8381101562000d0f57600085858381811062000c7b57fe5b905060200201356001600160a01b03169050600084848481811062000c9c57fe5b905060200201359050816001600160a01b031660006001600160a01b031660008051602062002f74833981519152836040518082815260200191505060405180910390a362000cec8282620017ee565b60025462000d01908263ffffffff6200188e16565b600255505060010162000c63565b5050505050565b60085481565b60056020526000908152604090205460ff1681565b60075460408051637f36e6dd60e11b8152815160009384936001600160a01b039091169263fe6dcdba9260048083019392829003018186803b15801562000d7757600080fd5b505afa15801562000d8c573d6000803e3d6000fd5b505050506040513d604081101562000da357600080fd5b50805160209091015190925090509091565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015620008485780601f106200081c5761010080835404028352916020019162000848565b6000620009d282620018d8565b60075460408051637c32cdd160e01b815290516000926001600160a01b031691637c32cdd1916004808301926020929190829003018186803b15801562000e6657600080fd5b505afa15801562000e7b573d6000803e3d6000fd5b505050506040513d602081101562000e9257600080fd5b505190505b90565b600062000ea8838362001914565b9392505050565b60006008543a6000148062000ec35750455a115b1562000ede5760005a905062000ad93387878760016200144b565b62000b3f3386868660016200144b565b6000546001600160a01b0316331462000f3b576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b60405180604001604052806003815260200162082a6960eb1b81525081565b6007546001600160a01b031681565b6000546001600160a01b0316331462001007576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60006008543a600014806200108b5750455a115b15620010a65760005a90506200087f3333878760006200144b565b620008e53333868660006200144b565b6007546040805163fd6aad2560e01b81526001600160a01b0384811660048301529151600093929092169163fd6aad2591602480820192602092909190829003018186803b1580156200110857600080fd5b505afa1580156200111d573d6000803e3d6000fd5b505050506040513d60208110156200113457600080fd5b505192915050565b6000546001600160a01b0316331462001189576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600754604080516001600160a01b039283168152918316602083015280517f4b388b1aa01b2653af632da9d80cca5cfe489300086d04070fca9dc860629d4f9281900390910190a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001240576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260038054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015620012ec5780601f10620012c057610100808354040283529160200191620012ec565b820191906000526020600020905b815481529060010190602001808311620012ce57829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a162001330600383836200209d565b505050565b606481565b600062000ea883836200195c565b6007546040805163949d225d60e01b815290516000926001600160a01b03169163949d225d916004808301926020929190829003018186803b15801562000e6657600080fd5b6000546001600160a01b03163314620013db576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b816200149257826001600160a01b0316846001600160a01b031660008051602062002f7483398151915260006040518082815260200191505060405180910390a362000d0f565b60006200149f85620018d8565b905082811015620014ec576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b0316146200158d5760006200151486886200195c565b905060001981146200158b57838110156200156d576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b6200158b868862001585848863ffffffff620019bd16565b6200178a565b505b82600080620015ae88620015a8868663ffffffff620019bd16565b620017ee565b8480620015c45750620015c2888862001a0b565b155b156200171057620015dd86606463ffffffff62001a4f16565b915085600114620015ef5781620015f2565b60005b9050620016186200160a838363ffffffff6200188e16565b849063ffffffff620019bd16565b60025490935062001630908363ffffffff620019bd16565b6002556040805183815290516000916001600160a01b038b169160008051602062002f748339815191529181900360200190a3600062001671898862001abc565b90506200169581620015a8846200168885620018d8565b9063ffffffff6200188e16565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602062002f74833981519152846040518082815260200191505060405180910390a3505b85620017288462001688858563ffffffff6200188e16565b146200173057fe5b6200174587620015a885620016888b620018d8565b866001600160a01b0316886001600160a01b031660008051602062002f74833981519152856040518082815260200191505060405180910390a3505050505050505050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120620013309082620017e08662001be8565b919063ffffffff62001bf416565b604080516662616c616e636560c81b815290519081900360070190206200181b9082620017e08562001be8565b6007546040805163516c1daf60e11b81526001600160a01b038581166004830152602482018590529151919092169163a2d83b5e91604480830192600092919082900301818387803b1580156200187157600080fd5b505af115801562001886573d6000803e3d6000fd5b505050505050565b60008282018381101562000ea8576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b604080516662616c616e636560c81b81529051908190036007019020600090620009d290620019078462001be8565b9063ffffffff62001d5016565b600062000ea8826040516020018080646e6f6e636560d81b81525060050182815260200191505060405160208183030381529060405280519060200120620019078562001be8565b600062000ea882604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120620019078562001be8565b60008183101562001a05576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526005602052604081205460ff168062000ea85750506001600160a01b031660009081526006602052604090205460ff16919050565b60008162001a92576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848162001a9e57fe5b04905082848162001aab57fe5b061562000ea8576001019392505050565b60008062001aca8362001ecb565b9050600062001ada858362001914565b905062001aec85838360010162001eea565b6007546040805163949d225d60e01b815290516001600160a01b0390921691630af2b3e59162001b7c91899186918891600191889163949d225d916004808301926020929190829003018186803b15801562001b4757600080fd5b505afa15801562001b5c573d6000803e3d6000fd5b505050506040513d602081101562001b7357600080fd5b50510362001f34565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562001bb157600080fd5b505afa15801562001bc6573d6000803e3d6000fd5b505050506040513d602081101562001bdd57600080fd5b505195945050505050565b6001600160a01b031690565b600062001c018462001f91565b905062001c0e816200201e565b62001c1e5762001c1e8462002056565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831062001c985780518252601f19909201916020918201910162001c77565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001cfc576040519150601f19603f3d011682016040523d82523d6000602084013e62001d01565b606091505b505090508062000d0f576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b60008062001d5e8462001f91565b905062001d6b816200201e565b62001d7b575060009050620009d2565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831062001df25780518252601f19909201916020918201910162001dd1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811462001e54576040519150601f19603f3d011682016040523d82523d6000602084013e62001e59565b606091505b50915091508162001ea9576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101562001ebf57600080fd5b50519695505050505050565b6000600019825b60019190910190600a90048062001ed2575092915050565b62001330826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b620017e08662001be8565b604080516001600160601b0319606087901b16602080830191909152603482018690526054808301869052835180840390910181526074909201909252805191012060009060018301818162001f8657fe5b069695505050505050565b600060ff60f81b30836040518060200162001fac9062002122565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f801580159062000ea857507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b6060604051806020016200206a9062002122565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b610d01806200214e83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620020e05782800160ff1982351617855562002110565b8280016001018555821562002110579182015b8281111562002110578235825591602001919060010190620020f3565b506200211e92915062002130565b5090565b6101258062002e4f83390190565b62000e9791905b808211156200211e57600081556001016200213756fe608060405234801561001057600080fd5b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1610074600161007960201b610b621760201c565b6100fc565b8054156100e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b80546001810182556000918252602082200155565b610bf68061010b6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d1461012e578063a2d83b5e14610136578063e2095c0714610162578063fd6aad25146101a2578063fe6dcdba146101c85761009e565b80630af2b3e5146100a357806313af4035146100dc57806331fb7127146101045780637c32cdd11461011e5780638da5cb5b14610126575b600080fd5b6100c0600480360360208110156100b957600080fd5b50356101d0565b604080516001600160a01b039092168252519081900360200190f35b610102600480360360208110156100f257600080fd5b50356001600160a01b03166101ea565b005b61010c6102a0565b60408051918252519081900360200190f35b61010c6102a6565b6100c06102ad565b61010c6102bc565b6101026004803603604081101561014c57600080fd5b506001600160a01b0381351690602001356102cd565b61017f6004803603602081101561017857600080fd5b50356104fb565b604080516001600160a01b03909316835260208301919091528051918290030190f35b61010c600480360360208110156101b857600080fd5b50356001600160a01b0316610519565b61017f610534565b60006101e360018363ffffffff61054916565b5092915050565b6000546001600160a01b03163314610236576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b61020081565b6102005b90565b6000546001600160a01b031681565b60006102c8600161057c565b905090565b6000546001600160a01b03163314610319576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6000610325600161057c565b90508061038757604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a26103816001848463ffffffff61058416565b506104f7565b6000610393600161064f565b91506103a8905060018563ffffffff61067c16565b1561041a576103bf6001858563ffffffff61069d16565b82610415576103ce60016107c5565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b6104f4565b8215801590610433575061020082108061043357508281105b156104f457610200821061049e5760008061044e60016107c5565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b6104b06001858563ffffffff61058416565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a25b50505b5050565b60008061050f60018463ffffffff61054916565b915091505b915091565b6001600160a01b031660009081526002602052604090205490565b600080610541600161064f565b915091509091565b60008061057184600001846001018154811061056157fe5b9060005260206000200154610905565b915091509250929050565b546000190190565b6001600160a01b0382166000908152600184016020526040902054156105f1576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006105fd838361091a565b84546001810186556000868152602090200181905584549091506000190161062c85828463ffffffff61092e16565b6001600160a01b0390941660009081526001909501602052505060409092205550565b805460009081906002111561066957506000905080610514565b61050f8360000160018154811061056157fe5b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b03821660009081526001840160205260409020548061070a576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000610716848461091a565b9050600085600001838154811061072957fe5b906000526020600020015490506000818310156107585761075187858563ffffffff610a0516565b905061077a565b818311156107715761075187858563ffffffff61092e16565b505050506107c0565b8287600001828154811061078a57fe5b6000918252602090912001558084146107bb576001600160a01b038616600090815260018801602052604090208190555b505050505b505050565b8054600090819060018111610821576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b6108348460000160018154811061056157fe5b6001600160a01b03821660009081526001870160205260408120559093509150600281141561086f5760016108698582610b25565b506108ff565b600084600001600183038154811061088357fe5b9060005260206000200154905080856000016001815481106108a157fe5b60009182526020909120015560001982016108bc8682610b25565b5060016108d086828463ffffffff610a0516565b9050808660010160006108e285610b18565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b196001600160a01b0381169160a09190911c90565b60a01b6001600160a01b0391909116171990565b81600181146109fe57600084600283048154811061094857fe5b906000526020600020015490505b828110156109fc57828186600285048154811061096f57fe5b90600052602060002001600088600001868154811061098a57fe5b60009182526020822001939093555091909155829060018701906109ad84610b18565b6001600160a01b0316815260208101919091526040016000205560028204915081600114156109db576109fc565b8460028304815481106109ea57fe5b90600052602060002001549050610956565b505b9392505050565b8254829060001981015b81836002021015610b0f5785546002840290600090889083908110610a3057fe5b90600052602060002001549050600082841115610a88576000896000018460010181548110610a5b57fe5b9060005260206000200154905080831015610a7e57809150836001019350610a82565b8291505b50610a8b565b50805b80871115610a9b57505050610b0f565b80878a6000018881548110610aac57fe5b9060005260206000200160008c6000018781548110610ac757fe5b60009182526020822001939093555091909155869060018b0190610aea84610b18565b6001600160a01b0316815260208101919091526040016000205550909350610a0f9050565b50509392505050565b196001600160a01b031690565b8154818355818111156107c0576000838152602090206107c09181019083016102aa91905b80821115610b5e5760008155600101610b4a565b5090565b805415610bac576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8054600181018255600091825260208220015556fea265627a7a72315820922a34b1af4165a89bd81cf906b5d6a94091a909b4af774a819ad057be98cd2e64736f6c634300050b0032608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a72315820b3961a28834a0983f25217f833e9e446bb4dd739dc4dd3f4b010860f5e574aa164736f6c634300050b0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a723158205e3ed3a14fec4b3b662eeea7a71434f24aae01b45da6e92522890fc89fd8ff8d64736f6c634300050b0032
Deployed Bytecode Sourcemap
16471:9709:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16471:9709:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17150:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17150:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25551:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25551:196:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;24357:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24357:112:0;;:::i;:::-;;;;-1:-1:-1;;;;;24357:112:0;;;;;;;;;;;;;;;;;;;;;25132:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25132:213:0;;;;;;;;:::i;566:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;566:134:0;-1:-1:-1;;;;;566:134:0;;:::i;:::-;;17513:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17513:43:0;-1:-1:-1;;;;;17513:43:0;;:::i;16975:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;25755:204;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25755:204:0;;;;;;;;;;;;;;;;;:::i;17227:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17670:934;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17670:934:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17670:934:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17670:934:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;17670:934:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17670:934:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17670:934:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;17670:934:0;;-1:-1:-1;17670:934:0;-1:-1:-1;17670:934:0;:::i;17620:23::-;;;:::i;17461:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17461:45:0;-1:-1:-1;;;;;17461:45:0;;:::i;24477:96::-;;;:::i;17271:159::-;;;:::i;24870:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24870:109:0;-1:-1:-1;;;;;24870:109:0;;:::i;24161:91::-;;;:::i;24700:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24700:124:0;;;;;;;;:::i;25967:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25967:210:0;;;;;;;;;;;;;;;;;:::i;23836:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23836:131:0;;:::i;252:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;252:20:0;;;;;;;;;;;;;;17183:37;;;:::i;17578:16::-;;;:::i;23322:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23322:179:0;;;;;;;;;;:::i;25353:190::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25353:190:0;;;;;;;;:::i;24581:111::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24581:111:0;-1:-1:-1;;;;;24581:111:0;;:::i;23975:133::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23975:133:0;-1:-1:-1;;;;;23975:133:0;;:::i;23702:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23702:126:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;23702:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23702:126:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;23702:126:0;;-1:-1:-1;23702:126:0;-1:-1:-1;23702:126:0;:::i;17091:33::-;;;:::i;24987:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24987:137:0;;;;;;;;;;:::i;24260:89::-;;;:::i;23509:185::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23509:185:0;;;;;;;;;;:::i;17150:26::-;;;;;;;;;;;;;;;-1:-1:-1;;17150:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25551:196::-;25644:4;25625:8;;5624:11;5639:1;5624:16;:46;;;;5656:14;5644:9;:26;5624:46;5620:454;;;5687:16;5706:9;5687:28;;25661:56;25675:10;25687;25699:3;25704:6;25712:4;25661:13;:56::i;:::-;25735:4;25728:11;;5746:13;5773:9;5762:20;;;-1:-1:-1;5834:3:0;5815:15;;;5814:23;5863:9;5852:20;;5887:142;5917:6;5905:9;5894:8;:20;:29;5887:142;;;6007:4;;;5990:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;5990:22:0;;;;;;5980:33;;;;;5973:40;;5887:142;;;5620:454;;;;;;25661:56;25675:10;25687;25699:3;25704:6;25712:4;25661:13;:56::i;:::-;25735:4;25728:11;;6061:1;25551:196;;;;;:::o;24357:112::-;24447:4;;:14;;;-1:-1:-1;;;24447:14:0;;;;;;;;;;24411:7;;;;-1:-1:-1;;;;;24447:4:0;;;;:10;;:14;;;;;;;;;;;:4;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;24447:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24447:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24447:14:0;;;;;;;;;-1:-1:-1;24447:14:0;-1:-1:-1;24357:112:0;;;:::o;25132:213::-;25223:38;;;;;;;;25201:4;;-1:-1:-1;;;;;25223:38:0;;;25232:10;;25223:38;;;;;;;;;;25272:43;25286:10;25298:8;25308:6;25272:13;:43::i;:::-;-1:-1:-1;25333:4:0;25132:213;;;;;:::o;566:134::-;518:5;;-1:-1:-1;;;;;518:5:0;504:10;:19;496:42;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;;;;653:5;;635:32;;;-1:-1:-1;;;;;653:5:0;;;635:32;;;;;;;;;;;;;;;;;;;;;678:5;:14;;-1:-1:-1;;;;;;678:14:0;-1:-1:-1;;;;;678:14:0;;;;;;;;;;566:134::o;17513:43::-;;;;;;;;;;;;;;;:::o;16975:26::-;;;;:::o;25755:204::-;25860:4;25841:8;;5624:11;5639:1;5624:16;:46;;;;5656:14;5644:9;:26;5624:46;5620:454;;;5687:16;5706:9;5687:28;;25877:52;25891:10;25903:5;25910:3;25915:6;25923:5;25877:13;:52::i;:::-;25947:4;25940:11;;5746:13;5773:9;5762:20;;;-1:-1:-1;5834:3:0;5815:15;;;5814:23;5863:9;5852:20;;5887:142;5917:6;5905:9;5894:8;:20;:29;5887:142;;;6007:4;;;5990:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;5990:22:0;;;;;;5980:33;;;;;5973:40;;5887:142;;;5620:454;;;;;;25877:52;25891:10;25903:5;25910:3;25915:6;25923:5;25877:13;:52::i;:::-;25947:4;25940:11;;6061:1;25755:204;;;;;;:::o;17227:35::-;17260:2;17227:35;:::o;17670:934::-;17820:6;;;;17819:7;17812:15;;;;17838:6;:13;;-1:-1:-1;;17838:13:0;17847:4;17838:13;;;17897:11;;:16;17890:24;;;;17940:4;;-1:-1:-1;;;;;17940:4:0;17932:27;17925:35;;;;18004:10;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;17997:4:0;:17;;-1:-1:-1;;;;;;17997:17:0;-1:-1:-1;;;;;17997:17:0;;;;;;;;18030:34;;;-1:-1:-1;18030:34:0;;18058:4;;;;18030:34;;;;;;;;;;;;;;;;;18166:2;18155:8;:13;;;18184:24;;;18196:1;18184:24;;;;;;;;;;;;;;;;;;;;;18268:32;;;18261:40;;;;18317:9;18312:285;18332:17;;;18312:285;;;18371:11;18385:6;;18392:1;18385:9;;;;;;;;;;;;;-1:-1:-1;;;;;18385:9:0;18371:23;;18409:15;18427:8;;18436:1;18427:11;;;;;;;;;;;;;18409:29;;18479:3;-1:-1:-1;;;;;18458:34:0;18475:1;-1:-1:-1;;;;;18458:34:0;-1:-1:-1;;;;;;;;;;;18484:7:0;18458:34;;;;;;;;;;;;;;;;;;18507:25;18519:3;18524:7;18507:11;:25::i;:::-;18561:11;;:24;;18577:7;18561:24;:15;:24;:::i;:::-;18547:11;:38;-1:-1:-1;;18351:3:0;;18312:285;;;;17670:934;;;;:::o;17620:23::-;;;;:::o;17461:45::-;;;;;;;;;;;;;;;:::o;24477:96::-;24555:4;;:10;;;-1:-1:-1;;;24555:10:0;;;;24519:7;;;;-1:-1:-1;;;;;24555:4:0;;;;:8;;:10;;;;;;;;;;;:4;:10;;;5:2:-1;;;;30:1;27;20:12;5:2;24555:10:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24555:10:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24555:10:0;;;;;;;;;-1:-1:-1;24555:10:0;-1:-1:-1;24477:96:0;;:::o;17271:159::-;;;;;;;;;;;;;;;-1:-1:-1;;17271:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24870:109;24927:7;24954:17;24965:5;24954:10;:17::i;24161:91::-;24230:4;;:14;;;-1:-1:-1;;;24230:14:0;;;;24203:7;;-1:-1:-1;;;;;24230:4:0;;:12;;:14;;;;;;;;;;;;;;:4;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;24230:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24230:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24230:14:0;;-1:-1:-1;24161:91:0;;:::o;24700:124::-;24770:7;24797:19;24804:5;24811:4;24797:6;:19::i;:::-;24790:26;24700:124;-1:-1:-1;;;24700:124:0:o;25967:210::-;26079:4;26060:8;;5624:11;5639:1;5624:16;:46;;;;5656:14;5644:9;:26;5624:46;5620:454;;;5687:16;5706:9;5687:28;;26096:51;26110:10;26122:5;26129:3;26134:6;26142:4;26096:13;:51::i;5620:454::-;26096:51;26110:10;26122:5;26129:3;26134:6;26142:4;26096:13;:51::i;23836:131::-;518:5;;-1:-1:-1;;;;;518:5:0;504:10;:19;496:42;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;;;;23918:8;;23906:27;;;;;;;;;;;;;;;;;;;;;;;;23944:8;:15;23836:131::o;252:20::-;;;-1:-1:-1;;;;;252:20:0;;:::o;17183:37::-;;;;;;;;;;;;;;-1:-1:-1;;;17183:37:0;;;;:::o;17578:16::-;;;-1:-1:-1;;;;;17578:16:0;;:::o;23322:179::-;518:5;;-1:-1:-1;;;;;518:5:0;504:10;:19;496:42;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;;;;23417:32;;;-1:-1:-1;;;;;23417:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23460:18:0;;;;;;;;:11;:18;;;;;:33;;-1:-1:-1;;23460:33:0;;;;;;;;;;23322:179::o;25353:190::-;25439:4;25420:8;;5624:11;5639:1;5624:16;:46;;;;5656:14;5644:9;:26;5624:46;5620:454;;;5687:16;5706:9;5687:28;;25456:57;25470:10;25482;25494:3;25499:6;25507:5;25456:13;:57::i;5620:454::-;25456:57;25470:10;25482;25494:3;25499:6;25507:5;25456:13;:57::i;24581:111::-;24665:4;;:19;;;-1:-1:-1;;;24665:19:0;;-1:-1:-1;;;;;24665:19:0;;;;;;;;;24638:7;;24665:4;;;;;:12;;:19;;;;;;;;;;;;;;;:4;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;24665:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24665:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24665:19:0;;24581:111;-1:-1:-1;;24581:111:0:o;23975:133::-;518:5;;-1:-1:-1;;;;;518:5:0;504:10;:19;496:42;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;;;;24055:4;;24039:38;;;-1:-1:-1;;;;;24055:4:0;;;24039:38;;;;;;;;;;;;;;;;;;;;;24088:4;:12;;-1:-1:-1;;;;;;24088:12:0;-1:-1:-1;;;;;24088:12:0;;;;;;;;;;23975:133::o;23702:126::-;518:5;;-1:-1:-1;;;;;518:5:0;504:10;:19;496:42;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;;;;23777:20;;;;;;23785:4;23777:20;;;-1:-1:-1;;23777:20:0;;;;;;;;;;;;;;;;;;;23785:4;;23791:5;;;;23777:20;;;;;;;;;;;23785:4;;23777:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23777:20:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;23777:20:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;23777:20:0;;;;-1:-1:-1;23777:20:0;;-1:-1:-1;;;;;;23777:20:0;23808:12;:4;23815:5;;23808:12;:::i;:::-;;23702:126;;:::o;17091:33::-;17121:3;17091:33;:::o;24987:137::-;25062:7;25089:27;25100:5;25107:8;25089:10;:27::i;24260:89::-;24330:4;;:11;;;-1:-1:-1;;;24330:11:0;;;;24303:7;;-1:-1:-1;;;;;24330:4:0;;:9;;:11;;;;;;;;;;;;;;:4;:11;;;5:2:-1;;;;30:1;27;20:12;23509:185:0;518:5;;-1:-1:-1;;;;;518:5:0;504:10;:19;496:42;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;-1:-1:-1;;;496:42:0;;;;;;;;;;;;;;;23606:34;;;-1:-1:-1;;;;;23606:34:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23651:20:0;;;;;;;;:13;:20;;;;;:35;;-1:-1:-1;;23651:35:0;;;;;;;;;;23509:185::o;20797:2479::-;21002:11;20998:93;;21051:3;-1:-1:-1;;;;;21035:23:0;21044:5;-1:-1:-1;;;;;21035:23:0;-1:-1:-1;;;;;;;;;;;21056:1:0;21035:23;;;;;;;;;;;;;;;;;;21073:7;;20998:93;21135:19;21157:17;21168:5;21157:10;:17::i;:::-;21135:39;;21208:6;21193:11;:21;;21185:52;;;;;-1:-1:-1;;;21185:52:0;;;;;;;;;;;;-1:-1:-1;;;21185:52:0;;;;;;;;;;;;;;;21303:9;-1:-1:-1;;;;;21294:18:0;:5;-1:-1:-1;;;;;21294:18:0;;21290:480;;21372:21;21396:28;21407:5;21414:9;21396:10;:28::i;:::-;21372:52;;-1:-1:-1;;21511:13:0;:25;21507:252;;21635:6;21618:13;:23;;21610:56;;;;;-1:-1:-1;;;21610:56:0;;;;;;;;;;;;-1:-1:-1;;;21610:56:0;;;;;;;;;;;;;;;21685:58;21699:5;21706:9;21717:25;:13;21735:6;21717:25;:17;:25;:::i;:::-;21685:13;:58::i;:::-;21290:480;;21881:6;21863:15;;21988:43;22000:5;22007:23;:11;21881:6;22007:23;:15;:23;:::i;:::-;21988:11;:43::i;:::-;22175:7;:38;;;;22187:26;22202:5;22209:3;22187:14;:26::i;:::-;22186:27;22175:38;22171:839;;;22369:20;:6;17121:3;22369:20;:15;:20;:::i;:::-;22362:27;;22411:6;22421:1;22411:11;:22;;22429:4;22411:22;;;22425:1;22411:22;22404:29;-1:-1:-1;22511:27:0;22523:14;:4;22404:29;22523:14;:8;:14;:::i;:::-;22511:7;;:27;:11;:27;:::i;:::-;22597:11;;22501:37;;-1:-1:-1;22597:21:0;;22613:4;22597:21;:15;:21;:::i;:::-;22583:11;:35;22638:33;;;;;;;;22662:1;;-1:-1:-1;;;;;22638:33:0;;;-1:-1:-1;;;;;;;;;;;22638:33:0;;;;;;;;22759:14;22776:26;22788:5;22795:6;22776:11;:26::i;:::-;22759:43;;22860:49;22872:6;22880:28;22903:4;22880:18;22891:6;22880:10;:18::i;:::-;:22;:28;:22;:28;:::i;22860:49::-;22929:20;;;;;;;;-1:-1:-1;;;;;22929:20:0;;;;;;;;;;;;;22985:6;-1:-1:-1;;;;;22969:29:0;22978:5;-1:-1:-1;;;;;22969:29:0;-1:-1:-1;;;;;;;;;;;22993:4:0;22969:29;;;;;;;;;;;;;;;;;;22171:839;;23122:6;23091:27;23110:7;23091:14;:4;23100;23091:14;:8;:14;:::i;:27::-;:37;23084:45;;;;23177:46;23189:3;23194:28;23214:7;23194:15;23205:3;23194:10;:15::i;23177:46::-;23255:3;-1:-1:-1;;;;;23239:29:0;23248:5;-1:-1:-1;;;;;23239:29:0;-1:-1:-1;;;;;;;;;;;23260:7:0;23239:29;;;;;;;;;;;;;;;;;;20797:2479;;;;;;;;;:::o;19334:188::-;19456:39;;;-1:-1:-1;;;19456:39:0;;;;;;;;-1:-1:-1;;;;;;19456:39:0;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;19456:39:0;;;;;;;19446:50;;;;;19426:88;;19506:6;19426:13;19433:5;19426:6;:13::i;:::-;:19;:88;;:19;:88;:::i;19710:172::-;17049:20;;;-1:-1:-1;;;17049:20:0;;;;;;;;;;;;19784:51;;19825:8;19784:13;19791:5;19784:6;:13::i;:51::-;19846:4;;:28;;;-1:-1:-1;;;19846:28:0;;-1:-1:-1;;;;;19846:28:0;;;;;;;;;;;;;;;:4;;;;;:11;;:28;;;;;:4;;:28;;;;;;;:4;;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;19846:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19846:28:0;;;;19710:172;;:::o;3769:164::-;3827:7;3859:5;;;3883:6;;;;3875:31;;;;;-1:-1:-1;;;3875:31:0;;;;;;;;;;;;-1:-1:-1;;;3875:31:0;;;;;;;;;;;;;;18795:133;17049:20;;;-1:-1:-1;;;17049:20:0;;;;;;;;;;;;18853:7;;18888:31;;:13;18895:5;18888:6;:13::i;:::-;:18;:31;:18;:31;:::i;19134:174::-;19202:7;19237:62;19292:4;19266:31;;;;;;-1:-1:-1;;;19266:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19266:31:0;;;19256:42;;;;;;19237:13;19244:5;19237:6;:13::i;18936:190::-;19012:7;19047:70;19106:8;19076:39;;;;;;-1:-1:-1;;;19076:39:0;;;;;;-1:-1:-1;;;;;19076:39:0;-1:-1:-1;;;;;19076:39:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19076:39:0;;;19066:50;;;;;;19047:13;19054:5;19047:6;:13::i;3941:141::-;3999:7;4032:1;4027;:6;;4019:32;;;;;-1:-1:-1;;;4019:32:0;;;;;;;;;;;;-1:-1:-1;;;4019:32:0;;;;;;;;;;;;;;;-1:-1:-1;4069:5:0;;;3941:141::o;19935:145::-;-1:-1:-1;;;;;20034:20:0;;20010:4;20034:20;;;:13;:20;;;;;;;;;:38;;-1:-1:-1;;;;;;;20056:16:0;;;;;:11;:16;;;;;;;;;19935:145;-1:-1:-1;19935:145:0:o;4474:232::-;4537:7;4565:6;4557:30;;;;;-1:-1:-1;;;4557:30:0;;;;;;;;;;;;-1:-1:-1;;;4557:30:0;;;;;;;;;;;;;;;4598:9;4614:1;4610;:5;;;;;;4598:17;;4634:1;4630;:5;;;;;;:10;4626:52;;4665:1;4661:5;;4474:232;-1:-1:-1;;;4474:232:0:o;20318:471::-;20388:14;20460:17;20480:29;20502:6;20480:21;:29::i;:::-;20460:49;;20574:13;20590:24;20597:5;20604:9;20590:6;:24::i;:::-;20574:40;;20625:38;20635:5;20642:9;20653:5;20661:1;20653:9;20625;:38::i;:::-;20716:4;;20764:11;;;-1:-1:-1;;;20764:11:0;;;;-1:-1:-1;;;;;20716:4:0;;;;:14;;20731:49;;20739:5;;20746;;20753:9;;20716:4;;;;20764:9;;:11;;;;;;;;;;;;;;20716:4;20764:11;;;5:2:-1;;;;30:1;27;20:12;5:2;20764:11:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20764:11:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20764:11:0;:15;20731:7;:49::i;:::-;20716:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20716:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20716:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20716:65:0;;20318:471;-1:-1:-1;;;;;20318:471:0:o;18683:104::-;-1:-1:-1;;;;;18768:10:0;;18683:104::o;2480:569::-;2596:17;2628:21;2641:7;2628:12;:21::i;:::-;2596:54;;2666:37;2696:5;2666:21;:37::i;:::-;2661:86;;2720:15;2727:7;2720:6;:15::i;:::-;2852:124;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2852:124:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;2818:169:0;;;;2800:12;;-1:-1:-1;;;;;2818:19:0;;;2852:124;2818:169;;;25:18:-1;2818:169:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2818:169:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2799:188:0;;;3008:7;3000:41;;;;;-1:-1:-1;;;3000:41:0;;;;;;;;;;;;-1:-1:-1;;;3000:41:0;;;;;;;;;;;;;;3057:610;3150:7;3170:17;3202:21;3215:7;3202:12;:21::i;:::-;3170:54;;3240:37;3270:5;3240:21;:37::i;:::-;3235:88;;-1:-1:-1;3309:1:0;;-1:-1:-1;3294:17:0;;3235:88;3451:98;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3451:98:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3411:149:0;;;;3376:12;;3390:17;;-1:-1:-1;;;;;3411:25:0;;;3451:98;;3411:149;;;;;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3411:149:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3375:185:0;;;;3581:7;3573:41;;;;;-1:-1:-1;;;3573:41:0;;;;;;;;;;;;-1:-1:-1;;;3573:41:0;;;;;;;;;;;;;;;3643:4;3632:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3632:27:0;;3057:610;-1:-1:-1;;;;;;3057:610:0:o;4800:270::-;4864:7;-1:-1:-1;;4935:5:0;4953:83;4996:9;;;;;;4979:2;4971:10;;;4953:83;;-1:-1:-1;5055:7:0;4800:270;-1:-1:-1;;4800:270:0:o;19530:172::-;19614:80;19670:4;19644:31;;;;;;-1:-1:-1;;;19644:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19644:31:0;;;19634:42;;;;;;19686:6;19678:15;;19614:13;19621:5;19614:6;:13::i;20088:222::-;20234:31;;;-1:-1:-1;;;;;;20234:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20234:31:0;;;;;;;20224:42;;;;;20181:7;;20300:1;20293:8;;20224:42;20293:8;20285:17;;;;;;20088:222;-1:-1:-1;;;;;;20088:222:0:o;1787:439::-;1848:7;2003:4;1998:10;;2043:4;2075:7;2119:30;;;;;;;;:::i;:::-;21:26:-1;;;-1:-1;;21:26;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;2109:41:0;;41:4:-1;30:16;;;2109:41:0;-1:-1:-1;;;;;;1955:218:0;;;;;;;;;;;;;-1:-1:-1;;;;;;1955:218:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1955:218:0;;;;;;;1923:269;;;;;;1787:439;-1:-1:-1;;1787:439:0:o;1338:323::-;1396:4;1503:18;;1540:22;;;;;:113;;-1:-1:-1;1586:66:0;1566:87;;;1533:120;-1:-1:-1;;1338:323:0:o;2234:238::-;2286:21;2310:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;2310:30:0;2286:54;;2454:7;2443:8;2437:15;2430:4;2420:8;2416:19;2413:1;2405:57;2401:62;2399:66;;:::o;16471:9709::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16471:9709:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16471:9709:0;;;-1:-1:-1;16471:9709:0;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://5e3ed3a14fec4b3b662eeea7a71434f24aae01b45da6e92522890fc89fd8ff8d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.