ERC-20
Overview
Max Total Supply
91,166,666 TM
Holders
95
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SecurityToken
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-08-09 */ /** * This smart contract code is Copyright 2018, 2019 TokenMarket Ltd. For more information see https://tokenmarket.net * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ interface SecurityTransferAgent { function verify(address from, address to, uint256 value) external view returns (uint256 newValue); } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } interface ERC677Receiver { function tokenFallback(address from, uint256 amount, bytes data) returns (bool success); } interface ERC677 { // TODO: Have a different event name to make sure that tools with bad APIs do not mix this with ERC-20 Transfer() event that lacks data parameter event ERC677Transfer(address from, address receiver, uint256 amount, bytes data); function transferAndCall(ERC677Receiver receiver, uint amount, bytes data) returns (bool success); } contract ERC677Token is ERC20, ERC677 { function transferAndCall(ERC677Receiver receiver, uint amount, bytes data) returns (bool success) { require(transfer(address(receiver), amount)); ERC677Transfer(msg.sender, address(receiver), amount, data); require(receiver.tokenFallback(msg.sender, amount, data)); } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @author TokenMarket / Ville Sundell <ville at tokenmarket.net> */ contract CheckpointToken is ERC677Token { using SafeMath for uint256; // We use only uint256 for safety reasons (no boxing) /// @dev Name of the token, usually the company and/or series (like "TokenMeerkat Ltd. Series A"): string public name; /// @dev Ticker symbol, usually bases on the "name" above (like "MEER"): string public symbol; /// @dev Decimals are usually set to 18 for EIP-20 tokens: uint256 public decimals; /// @dev If transactionVerifier is set, that contract will be queried upon every token transaction: SecurityTransferAgent public transactionVerifier; /// @dev Checkpoint is the fundamental unit for our internal accounting /// (who owns what, and at what moment in time) struct Checkpoint { uint256 blockNumber; uint256 value; } /// @dev This mapping contains checkpoints for every address: mapping (address => Checkpoint[]) public tokenBalances; /// @dev This is a one dimensional Checkpoint mapping of the overall token supply: Checkpoint[] public tokensTotal; /// @dev This mapping keeps account for approve() -> fransferFrom() pattern: mapping (address => mapping (address => uint256)) public allowed; /** * @dev Constructor for CheckpointToken, initializing the token * * Here we define initial values for name, symbol and decimals. * * @param _name Initial name of the token * @param _symbol Initial symbol of the token * @param _decimals Number of decimals for the token, industry standard is 18 */ function CheckpointToken(string _name, string _symbol, uint256 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } /** PUBLIC FUNCTIONS ****************************************/ /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view returns (uint256) { return allowed[owner][spender]; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. * @return true if the call function was executed successfully */ function approve(address spender, uint256 value) public returns (bool) { allowed[msg.sender][spender] = value; Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred * @return true if the call function was executed successfully */ function transferFrom(address from, address to, uint256 value) public returns (bool) { require(value <= allowed[from][msg.sender]); transferInternal(from, to, value); Transfer(from, to, value); return true; } /** * @dev transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. * @return true if the call function was executed successfully */ function transfer(address to, uint256 value) public returns (bool) { transferInternal(msg.sender, to, value); Transfer(msg.sender, to, value); return true; } /** * @dev total number of tokens in existence * @return A uint256 specifying the total number of tokens in existence */ function totalSupply() public view returns (uint256 tokenCount) { tokenCount = balanceAtBlock(tokensTotal, block.number); } /** * @dev total number of tokens in existence at the given block * @param blockNumber The block number we want to query for the total supply * @return A uint256 specifying the total number of tokens at a given block */ function totalSupplyAt(uint256 blockNumber) public view returns (uint256 tokenCount) { tokenCount = balanceAtBlock(tokensTotal, blockNumber); } /** * @dev Gets the balance of the specified address. * @param owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256 balance) { balance = balanceAtBlock(tokenBalances[owner], block.number); } /** * @dev Gets the balance of the specified address. * @param owner The address to query the the balance of. * @param blockNumber The block number we want to query for the balance. * @return An uint256 representing the amount owned by the passed address. */ function balanceAt(address owner, uint256 blockNumber) public view returns (uint256 balance) { balance = balanceAtBlock(tokenBalances[owner], blockNumber); } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address spender, uint addedValue) public returns (bool) { allowed[msg.sender][spender] = allowed[msg.sender][spender].add(addedValue); Approval(msg.sender, spender, allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address spender, uint subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][spender]; if (subtractedValue > oldValue) { allowed[msg.sender][spender] = 0; } else { allowed[msg.sender][spender] = oldValue.sub(subtractedValue); } Approval(msg.sender, spender, allowed[msg.sender][spender]); return true; } /** * @dev Addition to StandardToken methods. Increase the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * This is originally from OpenZeppelin. * * approve should be called when allowed[spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. * @param data ABI-encoded contract call to call `spender` address. */ function increaseApproval(address spender, uint addedValue, bytes data) public returns (bool) { require(spender != address(this)); increaseApproval(spender, addedValue); require(spender.call(data)); return true; } /** * @dev Addition to StandardToken methods. Decrease the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * This is originally from OpenZeppelin. * * approve should be called when allowed[spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. * @param data ABI-encoded contract call to call `spender` address. */ function decreaseApproval(address spender, uint subtractedValue, bytes data) public returns (bool) { require(spender != address(this)); decreaseApproval(spender, subtractedValue); require(spender.call(data)); return true; } /** INTERNALS ****************************************/ function balanceAtBlock(Checkpoint[] storage checkpoints, uint256 blockNumber) internal returns (uint256 balance) { uint256 currentBlockNumber; (currentBlockNumber, balance) = getCheckpoint(checkpoints, blockNumber); } function transferInternal(address from, address to, uint256 value) internal { uint256 fromBalance = balanceOf(from); uint256 toBalance = balanceOf(to); if (address(transactionVerifier) != address(0)) { value = transactionVerifier.verify(from, to, value); require(value > 0); } setCheckpoint(tokenBalances[from], fromBalance.sub(value)); setCheckpoint(tokenBalances[to], toBalance.add(value)); } /** CORE ** The Magic happens below: ***************************************/ function setCheckpoint(Checkpoint[] storage checkpoints, uint256 newValue) internal { if ((checkpoints.length == 0) || (checkpoints[checkpoints.length.sub(1)].blockNumber < block.number)) { checkpoints.push(Checkpoint(block.number, newValue)); } else { checkpoints[checkpoints.length.sub(1)] = Checkpoint(block.number, newValue); } } function getCheckpoint(Checkpoint[] storage checkpoints, uint256 blockNumber) internal returns (uint256 blockNumber_, uint256 value) { if (checkpoints.length == 0) { return (0, 0); } // Shortcut for the actual value if (blockNumber >= checkpoints[checkpoints.length.sub(1)].blockNumber) { return (checkpoints[checkpoints.length.sub(1)].blockNumber, checkpoints[checkpoints.length.sub(1)].value); } if (blockNumber < checkpoints[0].blockNumber) { return (0, 0); } // Binary search of the value in the array uint256 min = 0; uint256 max = checkpoints.length.sub(1); while (max > min) { uint256 mid = (max.add(min.add(1))).div(2); if (checkpoints[mid].blockNumber <= blockNumber) { min = mid; } else { max = mid.sub(1); } } return (checkpoints[min].blockNumber, checkpoints[min].value); } } /* Largely copied from https://github.com/OpenZeppelin/openzeppelin-solidity/pull/741/files */ contract ERC865 is CheckpointToken { /** @dev This is used to prevent nonce reuse: */ mapping(bytes => bool) signatures; event TransferPreSigned(address indexed from, address indexed to, address indexed delegate, uint256 amount, uint256 fee); event Debug(address from, bytes32 hash); /** * @notice Submit a presigned transfer * @param _signature bytes The signature, issued by the owner. * @param _to address The address which you want to transfer to. * @param _value uint256 The amount of tokens to be transferred. * @param _fee uint256 The amount of tokens paid to msg.sender, by the person who used to own the tokens. * @param _nonce uint256 Presigned transaction number */ function transferPreSigned( bytes _signature, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public returns (bool) { require(_to != address(0)); require(signatures[_signature] == false); bytes32 hashedTx = transferPreSignedHashing(address(this), _to, _value, _fee, _nonce); address from = recover(hashedTx, _signature); require(from != address(0)); transferInternal(from, _to, _value); transferInternal(from, msg.sender, _fee); signatures[_signature] = true; TransferPreSigned(from, _to, msg.sender, _value, _fee); Transfer(from, _to, _value); Transfer(from, msg.sender, _fee); return true; } /** * @notice Hash (keccak256) of the payload used by transferPreSigned * @param _token address The address of the token. * @param _to address The address which you want to transfer to. * @param _value uint256 The amount of tokens to be transferred. * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner. * @param _nonce uint256 Presigned transaction number. */ function transferPreSignedHashing( address _token, address _to, uint256 _value, uint256 _fee, uint256 _nonce ) public pure returns (bytes32) { /* "48664c16": transferPreSignedHashing(address,address,address,uint256,uint256,uint256) */ return keccak256(bytes4(0x48664c16), _token, _to, _value, _fee, _nonce); } /** * @notice Recover signer address from a message by using his signature. * Signature is delivered as a byte array, hence need for this * implementation. * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address. * @param sig bytes signature, the signature is generated using web3.eth.sign() */ function recover(bytes32 hash, bytes sig) public pure returns (address) { bytes32 r; bytes32 s; uint8 v; /* Check the signature length */ if (sig.length != 65) { return (address(0)); } /* Divide the signature in r, s and v variables */ assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } /* Version of signature should be 27 or 28, but 0 and 1 are also possible versions */ if (v < 27) { v += 27; } /* If the version is correct return the signer address */ if (v != 27 && v != 28) { return (address(0)); } else { return ecrecover(hash, v, r, s); } } } /** * @dev Interface for general announcements about the security. * * Announcements can be for instance for dividend sharing, voting, or * just for general announcements. */ interface Announcement { function announcementName() public view returns (bytes32); function announcementURI() public view returns (bytes32); function announcementType() public view returns (uint256); function announcementHash() public view returns (uint256); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Recoverable is Ownable { /// @dev Empty constructor (for now) function Recoverable() { } /// @dev This will be invoked by the owner, when owner wants to rescue tokens /// @param token Token which will we rescue to the owner from the contract function recoverTokens(ERC20Basic token) onlyOwner public { token.transfer(owner, tokensToBeReturned(token)); } /// @dev Interface function, can be overwritten by the superclass /// @param token Token which balance we will check and return /// @return The amount of tokens (in smallest denominator) the contract owns function tokensToBeReturned(ERC20Basic token) public returns (uint) { return token.balanceOf(this); } } /** * @title Roles * @author Francisco Giordano (@frangio) * @dev Library for managing addresses assigned to a Role. * See RBAC.sol for example usage. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an address access to this role */ function add(Role storage role, address addr) internal { role.bearer[addr] = true; } /** * @dev remove an address' access to this role */ function remove(Role storage role, address addr) internal { role.bearer[addr] = false; } /** * @dev check if an address has this role * // reverts */ function check(Role storage role, address addr) view internal { require(has(role, addr)); } /** * @dev check if an address has this role * @return bool */ function has(Role storage role, address addr) view internal returns (bool) { return role.bearer[addr]; } } /** * @title RBAC (Role-Based Access Control) * @author Matt Condon (@Shrugs) * @dev Stores and provides setters and getters for roles and addresses. * Supports unlimited numbers of roles and addresses. * See //contracts/mocks/RBACMock.sol for an example of usage. * This RBAC method uses strings to key roles. It may be beneficial * for you to write your own implementation of this interface using Enums or similar. * It's also recommended that you define constants in the contract, like ROLE_ADMIN below, * to avoid typos. */ contract RBAC { using Roles for Roles.Role; mapping (string => Roles.Role) private roles; event RoleAdded(address addr, string roleName); event RoleRemoved(address addr, string roleName); /** * A constant role name for indicating admins. */ string public constant ROLE_ADMIN = "admin"; /** * @dev constructor. Sets msg.sender as admin by default */ function RBAC() public { addRole(msg.sender, ROLE_ADMIN); } /** * @dev reverts if addr does not have role * @param addr address * @param roleName the name of the role * // reverts */ function checkRole(address addr, string roleName) view public { roles[roleName].check(addr); } /** * @dev determine if addr has role * @param addr address * @param roleName the name of the role * @return bool */ function hasRole(address addr, string roleName) view public returns (bool) { return roles[roleName].has(addr); } /** * @dev add a role to an address * @param addr address * @param roleName the name of the role */ function adminAddRole(address addr, string roleName) onlyAdmin public { addRole(addr, roleName); } /** * @dev remove a role from an address * @param addr address * @param roleName the name of the role */ function adminRemoveRole(address addr, string roleName) onlyAdmin public { removeRole(addr, roleName); } /** * @dev add a role to an address * @param addr address * @param roleName the name of the role */ function addRole(address addr, string roleName) internal { roles[roleName].add(addr); RoleAdded(addr, roleName); } /** * @dev remove a role from an address * @param addr address * @param roleName the name of the role */ function removeRole(address addr, string roleName) internal { roles[roleName].remove(addr); RoleRemoved(addr, roleName); } /** * @dev modifier to scope access to a single role (uses msg.sender as addr) * @param roleName the name of the role * // reverts */ modifier onlyRole(string roleName) { checkRole(msg.sender, roleName); _; } /** * @dev modifier to scope access to admins * // reverts */ modifier onlyAdmin() { checkRole(msg.sender, ROLE_ADMIN); _; } /** * @dev modifier to scope access to a set of roles (uses msg.sender as addr) * @param roleNames the names of the roles to scope access to * // reverts * * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this * see: https://github.com/ethereum/solidity/issues/2467 */ // modifier onlyRoles(string[] roleNames) { // bool hasAnyRole = false; // for (uint8 i = 0; i < roleNames.length; i++) { // if (hasRole(msg.sender, roleNames[i])) { // hasAnyRole = true; // break; // } // } // require(hasAnyRole); // _; // } } /** * @author TokenMarket / Ville Sundell <ville at tokenmarket.net> */ contract SecurityToken is CheckpointToken, RBAC, Recoverable, ERC865 { using SafeMath for uint256; // We use only uint256 for safety reasons (no boxing) string public constant ROLE_ANNOUNCE = "announce()"; string public constant ROLE_FORCE = "forceTransfer()"; string public constant ROLE_ISSUE = "issueTokens()"; string public constant ROLE_BURN = "burnTokens()"; string public constant ROLE_INFO = "setTokenInformation()"; string public constant ROLE_SETVERIFIER = "setTransactionVerifier()"; /// @dev Version string telling the token is TM-01, and its version: string public version = 'TM-01 0.1'; /// @dev URL where you can get more information about the security /// (for example company website or investor interface): string public url; /** SecurityToken specific events **/ /// @dev This is emitted when new tokens are created: event Issued(address indexed to, uint256 value); /// @dev This is emitted when tokens are burned from token's own stash: event Burned(address indexed burner, uint256 value); /// @dev This is emitted upon forceful transfer of tokens by the Board: event Forced(address indexed from, address indexed to, uint256 value); /// @dev This is emitted when new announcements (like dividends, voting, etc.) are issued by the Board: event Announced(address indexed announcement, uint256 indexed announcementType, bytes32 indexed announcementName, bytes32 announcementURI, uint256 announcementHash); /// @dev This is emitted when token information is changed: event UpdatedTokenInformation(string newName, string newSymbol, string newUrl); /// @dev This is emitted when transaction verifier (the contract which would check KYC, etc.): event UpdatedTransactionVerifier(address newVerifier); /// @dev Address list of Announcements (see "interface Announcement"). /// Announcements are things like votings, dividends, or any kind of /// smart contract: address[] public announcements; /// @dev For performance reasons, we also maintain address based mapping of /// Announcements: mapping(address => uint256) public announcementsByAddress; /** * @dev Contructor to create SecurityToken, and subsequent CheckpointToken. * * CheckpointToken will be created with hardcoded 18 decimals. * * @param _name Initial name of the token * @param _symbol Initial symbol of the token */ function SecurityToken(string _name, string _symbol, string _url) CheckpointToken(_name, _symbol, 18) public { url = _url; addRole(msg.sender, ROLE_ANNOUNCE); addRole(msg.sender, ROLE_FORCE); addRole(msg.sender, ROLE_ISSUE); addRole(msg.sender, ROLE_BURN); addRole(msg.sender, ROLE_INFO); addRole(msg.sender, ROLE_SETVERIFIER); } /** * @dev Function to announce Announcements. * * Announcements can be for instance for dividend sharing, voting, or * just for general announcements. * * Instead of storing the announcement details, we just broadcast them as an * event, and store only the address. * * @param announcement Address of the Announcement */ function announce(Announcement announcement) external onlyRole(ROLE_ANNOUNCE) { announcements.push(announcement); announcementsByAddress[address(announcement)] = announcements.length; Announced(address(announcement), announcement.announcementType(), announcement.announcementName(), announcement.announcementURI(), announcement.announcementHash()); } /** * @dev Function to forcefully transfer tokens from A to B by board decission * * This must be implemented carefully, since this is a very critical part * to ensure investor safety. * * This is intended to be called by the BAC (The Board). * The BAC must have the RBAC role ROLE_FORCE. * * @param from Address of the account to confisticate the tokens from * @param to Address to deposit the confisticated token to * @param value amount of tokens to be confisticated */ function forceTransfer(address from, address to, uint256 value) external onlyRole(ROLE_FORCE) { transferInternal(from, to, value); Forced(from, to, value); } /** * @dev Issue new tokens to the board by a board decission * * Issue new tokens. This is intended to be called by the BAC (The Board). * The BAC must have the RBAC role ROLE_ISSUE. * * @param value Token amount to issue */ function issueTokens(uint256 value) external onlyRole(ROLE_ISSUE) { address issuer = msg.sender; uint256 blackHoleBalance = balanceOf(address(0)); uint256 totalSupplyNow = totalSupply(); setCheckpoint(tokenBalances[address(0)], blackHoleBalance.add(value)); transferInternal(address(0), issuer, value); setCheckpoint(tokensTotal, totalSupplyNow.add(value)); Issued(issuer, value); } /** * @dev Burn tokens from contract's own balance by a board decission * * Burn tokens from contract's own balance to prevent accidental burnings. * This is intended to be called by the BAC (The Board). * The BAC must have the RBAC role ROLE_BURN. * * @param value Token amount to burn from this contract's balance */ function burnTokens(uint256 value) external onlyRole(ROLE_BURN) { address burner = address(this); uint256 burnerBalance = balanceOf(burner); uint256 totalSupplyNow = totalSupply(); transferInternal(burner, address(0), value); setCheckpoint(tokenBalances[address(0)], burnerBalance.sub(value)); setCheckpoint(tokensTotal, totalSupplyNow.sub(value)); Burned(burner, value); } /** * @dev Permissioned users (The Board, BAC) can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. * * The BAC must have the RBAC role ROLE_INFO. * * @param _name New name of the token * @param _symbol New symbol of the token * @param _url New URL of the token */ function setTokenInformation(string _name, string _symbol, string _url) external onlyRole(ROLE_INFO) { name = _name; symbol = _symbol; url = _url; UpdatedTokenInformation(name, symbol, url); } /** * @dev Set transaction verifier * * This sets a SecurityTransferAgent to be used as a transaction verifier for * each transfer. This is implemented for possible regulatory requirements. * * @param newVerifier Address of the SecurityTransferAgent used as verifier */ function setTransactionVerifier(SecurityTransferAgent newVerifier) external onlyRole(ROLE_SETVERIFIER) { transactionVerifier = newVerifier; UpdatedTransactionVerifier(newVerifier); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"recoverTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"},{"name":"data","type":"bytes"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"tokenCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"announcement","type":"address"}],"name":"announce","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"recover","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"announcements","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_ISSUE","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"forceTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"blockNumber","type":"uint256"}],"name":"balanceAt","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"announcementsByAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"tokenBalances","outputs":[{"name":"blockNumber","type":"uint256"},{"name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_INFO","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokensTotal","outputs":[{"name":"blockNumber","type":"uint256"},{"name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"url","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_url","type":"string"}],"name":"setTokenInformation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"burnTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"},{"name":"data","type":"bytes"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"adminRemoveRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_FORCE","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"tokenCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_SETVERIFIER","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transactionVerifier","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"issueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"adminAddRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_BURN","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"tokensToBeReturned","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_ADMIN","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newVerifier","type":"address"}],"name":"setTransactionVerifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_ANNOUNCE","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_url","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Issued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Forced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"announcement","type":"address"},{"indexed":true,"name":"announcementType","type":"uint256"},{"indexed":true,"name":"announcementName","type":"bytes32"},{"indexed":false,"name":"announcementURI","type":"bytes32"},{"indexed":false,"name":"announcementHash","type":"uint256"}],"name":"Announced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newName","type":"string"},{"indexed":false,"name":"newSymbol","type":"string"},{"indexed":false,"name":"newUrl","type":"string"}],"name":"UpdatedTokenInformation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newVerifier","type":"address"}],"name":"UpdatedTransactionVerifier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"delegate","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"TransferPreSigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"hash","type":"bytes32"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ERC677Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60c0604052600960808190527f544d2d303120302e31000000000000000000000000000000000000000000000060a09081526200004091600a91906200046c565b503480156200004e57600080fd5b506040516200314f3803806200314f83398101604090815281516020808401519284015191840180519094938401939290920191849184916012916200009a916000918601906200046c565b508151620000b09060019060208501906200046c565b50600255505060408051808201909152600581527f61646d696e00000000000000000000000000000000000000000000000000000060208201526200010090339064010000000062000311810204565b60088054600160a060020a0319163317905580516200012790600b9060208401906200046c565b5062000178336040805190810160405280600a81526020017f616e6e6f756e636528290000000000000000000000000000000000000000000081525062000311640100000000026401000000009004565b620001c8336040805190810160405280600f81526020017f666f7263655472616e736665722829000000000000000000000000000000000081525062000311640100000000026401000000009004565b62000218336040805190810160405280600d81526020017f6973737565546f6b656e7328290000000000000000000000000000000000000081525062000311640100000000026401000000009004565b62000268336040805190810160405280600c81526020017f6275726e546f6b656e732829000000000000000000000000000000000000000081525062000311640100000000026401000000009004565b620002b8336040805190810160405280601581526020017f736574546f6b656e496e666f726d6174696f6e2829000000000000000000000081525062000311640100000000026401000000009004565b62000308336040805190810160405280601881526020017f7365745472616e73616374696f6e56657269666965722829000000000000000081525062000311640100000000026401000000009004565b50505062000511565b6200038d826007836040518082805190602001908083835b602083106200034a5780518252601f19909201916020918201910162000329565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505064010000000062000447810262002b2b1704565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b70048982826040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101562000407578181015183820152602001620003ed565b50505050905090810190601f168015620004355780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004af57805160ff1916838001178555620004df565b82800160010185558215620004df579182015b82811115620004df578251825591602001919060010190620004c2565b50620004ed929150620004f1565b5090565b6200050e91905b80821115620004ed5760008155600101620004f8565b90565b612c2e80620005216000396000f3006080604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461024a578063095ea7b3146102d45780630988ca8c1461030c5780631296830d1461037557806315420b71146103e857806316114acd1461042a57806316ca3b631461044b57806318160ddd146104b457806318913e21146104c957806319045a25146104ea5780631bcfbe3114610564578063217fe6c61461057c57806322fab24c146105e357806323b872dd146105f8578063313ce5671461062257806333bebb77146106375780633b8e6f2e146106615780633f9ed88c146106855780634000aea0146106a657806348ff56651461070f5780634c8e83bd1461074c5780634f0092ab1461076157806354fd4d50146107795780635600f04f1461078e5780635c658165146107a35780635c7181bc146107ca57806366188463146108025780636d1b229d1461082657806370a082311461083e5780637272ad491461085f57806388cee87e146108c85780638da5cb5b1461092f578063949615fd1461094457806395d89b4114610959578063981b24d01461096e5780639930536714610986578063a53d5c631461099b578063a5820daa146109b0578063a9059cbb146109c8578063b25fa92c146109ec578063bb34e57c14610a53578063c45d19db14610a68578063d391014b14610a89578063d73dd62314610a9e578063dd62ed3e14610ac2578063eeac096914610ae9578063f2fde38b14610b0a578063f82a841e14610b2b575b600080fd5b34801561025657600080fd5b5061025f610b40565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610299578181015183820152602001610281565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e057600080fd5b506102f8600160a060020a0360043516602435610bce565b604080519115158252519081900360200190f35b34801561031857600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610373958335600160a060020a0316953695604494919390910191908190840183828082843750949750610c349650505050505050565b005b34801561038157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102f894369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610ca2565b3480156103f457600080fd5b50610418600160a060020a0360043581169060243516604435606435608435610ec2565b60408051918252519081900360200190f35b34801561043657600080fd5b50610373600160a060020a0360043516610f34565b34801561045757600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102f8948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506110049650505050505050565b3480156104c057600080fd5b506104186110b4565b3480156104d557600080fd5b50610373600160a060020a03600435166110c6565b3480156104f657600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526105489583359536956044949193909101919081908401838280828437509497506113bb9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b34801561057057600080fd5b50610548600435611490565b34801561058857600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102f8958335600160a060020a03169536956044949193909101919081908401838280828437509497506114b89650505050505050565b3480156105ef57600080fd5b5061025f611524565b34801561060457600080fd5b506102f8600160a060020a036004358116906024351660443561155b565b34801561062e57600080fd5b506104186115eb565b34801561064357600080fd5b50610373600160a060020a03600435811690602435166044356115f1565b34801561066d57600080fd5b50610418600160a060020a036004351660243561168b565b34801561069157600080fd5b50610418600160a060020a03600435166116ad565b3480156106b257600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102f8948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506116bf9650505050505050565b34801561071b57600080fd5b50610733600160a060020a03600435166024356118c8565b6040805192835260208301919091528051918290030190f35b34801561075857600080fd5b5061025f611903565b34801561076d57600080fd5b5061073360043561193a565b34801561078557600080fd5b5061025f611966565b34801561079a57600080fd5b5061025f6119c1565b3480156107af57600080fd5b50610418600160a060020a0360043581169060243516611a1c565b3480156107d657600080fd5b506103736024600480358281019290820135918135808301929082013591604435918201910135611a39565b34801561080e57600080fd5b506102f8600160a060020a0360043516602435611c59565b34801561083257600080fd5b50610373600435611d49565b34801561084a57600080fd5b50610418600160a060020a0360043516611e4f565b34801561086b57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102f8948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611e779650505050505050565b3480156108d457600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610373958335600160a060020a0316953695604494919390910191908190840183828082843750949750611e999650505050505050565b34801561093b57600080fd5b50610548611ee2565b34801561095057600080fd5b5061025f611ef1565b34801561096557600080fd5b5061025f611f28565b34801561097a57600080fd5b50610418600435611f82565b34801561099257600080fd5b5061025f611f8f565b3480156109a757600080fd5b50610548611fc6565b3480156109bc57600080fd5b50610373600435611fd5565b3480156109d457600080fd5b506102f8600160a060020a03600435166024356120d7565b3480156109f857600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610373958335600160a060020a031695369560449491939091019190819084018382808284375094975061212d9650505050505050565b348015610a5f57600080fd5b5061025f612176565b348015610a7457600080fd5b50610418600160a060020a03600435166121ad565b348015610a9557600080fd5b5061025f612243565b348015610aaa57600080fd5b506102f8600160a060020a036004351660243561227a565b348015610ace57600080fd5b50610418600160a060020a0360043581169060243516612313565b348015610af557600080fd5b50610373600160a060020a036004351661233e565b348015610b1657600080fd5b50610373600160a060020a03600435166123de565b348015610b3757600080fd5b5061025f612473565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b336000818152600660209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b610c9e826007836040518082805190602001908083835b60208310610c6a5780518252601f199092019160209182019101610c4b565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506124aa565b5050565b60008080600160a060020a0387161515610cbb57600080fd5b6009886040518082805190602001908083835b60208310610ced5780518252601f199092019160209182019101610cce565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150610d2a905057600080fd5b610d373088888888610ec2565b9150610d4382896113bb565b9050600160a060020a0381161515610d5a57600080fd5b610d658188886124bf565b610d708133876124bf565b60016009896040518082805190602001908083835b60208310610da45780518252601f199092019160209182019101610d85565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a84528301899052505081513392600160a060020a038b811693908616927fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a4929181900390910190a486600160a060020a031681600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a36040805186815290513391600160a060020a038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001979650505050505050565b604080517f48664c160000000000000000000000000000000000000000000000000000000081526c01000000000000000000000000600160a060020a0397881681026004830152959096169094026018860152602c850192909252604c840152606c8301525190819003608c01902090565b600854600160a060020a03163314610f4b57600080fd5b600854600160a060020a038083169163a9059cbb9116610f6a846121ad565b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050506040513d6020811015610fff57600080fd5b505050565b6000600160a060020a03841630141561101c57600080fd5b611026848461227a565b5083600160a060020a03168260405180828051906020019080838360005b8381101561105c578181015183820152602001611044565b50505050905090810190601f1680156110895780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af191505015156110a957600080fd5b5060015b9392505050565b60006110c16005436125fb565b905090565b60408051808201909152600a81527f616e6e6f756e636528290000000000000000000000000000000000000000000060208201526111043382610c34565b600c80546001810182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851690811790915590546000828152600d602090815260408083209390935582517f9ea0c08c0000000000000000000000000000000000000000000000000000000081529251639ea0c08c93600480820194918390030190829087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050506040513d60208110156111e457600080fd5b5051604080517f5fcce2790000000000000000000000000000000000000000000000000000000081529051600160a060020a03851691635fcce2799160048083019260209291908290030181600087803b15801561124157600080fd5b505af1158015611255573d6000803e3d6000fd5b505050506040513d602081101561126b57600080fd5b5051604080517ff31294a40000000000000000000000000000000000000000000000000000000081529051600160a060020a038616917fecae36ae461af9b3746319bfdbfefc7de682e71e22dd901cbec95ad177c33db491839163f31294a49160048083019260209291908290030181600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050506040513d602081101561131657600080fd5b5051604080517f1274c3f30000000000000000000000000000000000000000000000000000000081529051600160a060020a03891691631274c3f39160048083019260209291908290030181600087803b15801561137357600080fd5b505af1158015611387573d6000803e3d6000fd5b505050506040513d602081101561139d57600080fd5b50516040805192835260208301919091528051918290030190a45050565b600080600080845160411415156113d55760009350611487565b50505060208201516040830151606084015160001a601b60ff821610156113fa57601b015b8060ff16601b1415801561141257508060ff16601c14155b156114205760009350611487565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af115801561147a573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b600c80548290811061149e57fe5b600091825260209091200154600160a060020a0316905081565b60006110ad836007846040518082805190602001908083835b602083106114f05780518252601f1990920191602091820191016114d1565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612611565b60408051808201909152600d81527f6973737565546f6b656e73282900000000000000000000000000000000000000602082015281565b600160a060020a038316600090815260066020908152604080832033845290915281205482111561158b57600080fd5b6115968484846124bf565b82600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35060019392505050565b60025481565b60408051808201909152600f81527f666f7263655472616e7366657228290000000000000000000000000000000000602082015261162f3382610c34565b61163a8484846124bf565b82600160a060020a031684600160a060020a03167f768ff242747198c58dcb1136fb640adf7a199de1789b75bc95b6f787668b51b7846040518082815260200191505060405180910390a350505050565b600160a060020a03821660009081526004602052604081206110ad90836125fb565b600d6020526000908152604090205481565b60006116cb84846120d7565b15156116d657600080fd5b7f72db2339068fd324bbc28f2944e01064da539ac76064b6ce4a97a5f81de43dd6338585856040518085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561176e578181015183820152602001611756565b50505050905090810190601f16801561179b5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a183600160a060020a031663c0ee0b8a3385856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561184357818101518382015260200161182b565b50505050905090810190601f1680156118705780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b505050506040513d60208110156118bb57600080fd5b505115156110ad57600080fd5b6004602052816000526040600020818154811015156118e357fe5b600091825260209091206002909102018054600190910154909250905082565b60408051808201909152601581527f736574546f6b656e496e666f726d6174696f6e28290000000000000000000000602082015281565b600580548290811061194857fe5b60009182526020909120600290910201805460019091015490915082565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b600660209081526000928352604080842090915290825290205481565b60408051808201909152601581527f736574546f6b656e496e666f726d6174696f6e282900000000000000000000006020820152611a773382610c34565b611a8360008888612b67565b50611a9060018686612b67565b50611a9d600b8484612b67565b507fe7be9e386976ab29f9c6b6277a4bb92fe29d2ce986625e4bd063d90b5b4e986960006001600b60405180806020018060200180602001848103845287818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b5050848103835286546002600019610100600184161502019091160480825260209091019087908015611bca5780601f10611b9f57610100808354040283529160200191611bca565b820191906000526020600020905b815481529060010190602001808311611bad57829003601f168201915b5050848103825285546002600019610100600184161502019091160480825260209091019086908015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b5050965050505050505060405180910390a150505050505050565b336000908152600660209081526040808320600160a060020a038616845290915281205480831115611cae57336000908152600660209081526040808320600160a060020a0388168452909152812055611ce3565b611cbe818463ffffffff61263016565b336000908152600660209081526040808320600160a060020a03891684529091529020555b336000818152600660209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008060006040805190810160405280600c81526020017f6275726e546f6b656e7328290000000000000000000000000000000000000000815250611d8e3382610c34565b309350611d9a84611e4f565b9250611da46110b4565b9150611db2846000876124bf565b600080526004602052611df47f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec611def858863ffffffff61263016565b612642565b611e096005611def848863ffffffff61263016565b604080518681529051600160a060020a038616917f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7919081900360200190a25050505050565b600160a060020a0381166000908152600460205260408120611e7190436125fb565b92915050565b6000600160a060020a038416301415611e8f57600080fd5b6110268484611c59565b611ed8336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610c34565b610c9e8282612718565b600854600160a060020a031681565b60408051808201909152600f81527f666f7263655472616e7366657228290000000000000000000000000000000000602082015281565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b6000611e716005836125fb565b60408051808201909152601881527f7365745472616e73616374696f6e566572696669657228290000000000000000602082015281565b600354600160a060020a031681565b60008060006040805190810160405280600d81526020017f6973737565546f6b656e7328290000000000000000000000000000000000000081525061201a3382610c34565b3393506120276000611e4f565b92506120316110b4565b60008052600460205291506120707f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec611def858863ffffffff61283916565b61207c600085876124bf565b6120916005611def848863ffffffff61283916565b604080518681529051600160a060020a038616917fa59f12e354e8cd10bb74c559844c2dd69a5458e31fe56c7594c62ca57480509a919081900360200190a25050505050565b60006120e43384846124bf565b604080518381529051600160a060020a0385169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600192915050565b61216c336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610c34565b610c9e8282612848565b60408051808201909152600c81527f6275726e546f6b656e7328290000000000000000000000000000000000000000602082015281565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a082319160248082019260209290919082900301818787803b15801561221157600080fd5b505af1158015612225573d6000803e3d6000fd5b505050506040513d602081101561223b57600080fd5b505192915050565b60408051808201909152600581527f61646d696e000000000000000000000000000000000000000000000000000000602082015281565b336000908152600660209081526040808320600160a060020a03861684529091528120546122ae908363ffffffff61283916565b336000818152600660209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60408051808201909152601881527f7365745472616e73616374696f6e566572696669657228290000000000000000602082015261237c3382610c34565b60038054600160a060020a03841673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe87a0b647188a1482a1a619a8d3eaba4275e36eed81b5247a12e24a4df2032fb9181900360200190a15050565b600854600160a060020a031633146123f557600080fd5b600160a060020a038116151561240a57600080fd5b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60408051808201909152600a81527f616e6e6f756e6365282900000000000000000000000000000000000000000000602082015281565b6124b48282612611565b1515610c9e57600080fd5b6000806124cb85611e4f565b91506124d684611e4f565b600354909150600160a060020a03161561259c57600354604080517fad076994000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301528781166024830152604482018790529151919092169163ad0769949160648083019260209291908290030181600087803b15801561256157600080fd5b505af1158015612575573d6000803e3d6000fd5b505050506040513d602081101561258b57600080fd5b505192506000831161259c57600080fd5b600160a060020a03851660009081526004602052604090206125c890611def848663ffffffff61263016565b600160a060020a03841660009081526004602052604090206125f490611def838663ffffffff61283916565b5050505050565b6000806126088484612929565b95945050505050565b600160a060020a03166000908152602091909152604090205460ff1690565b60008282111561263c57fe5b50900390565b81541580612680575081544390839061266290600163ffffffff61263016565b8154811061266c57fe5b906000526020600020906002020160000154105b156126c2576040805180820190915243815260208082018381528454600181810187556000878152939093209351600290910290930192835551910155610c9e565b6040805180820190915243815260208101829052825483906126eb90600163ffffffff61263016565b815481106126f557fe5b600091825260209182902083516002909202019081559101516001909101555050565b612782826007836040518082805190602001908083835b6020831061274e5780518252601f19909201916020918201910161272f565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612b09565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a82826040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156127fa5781810151838201526020016127e2565b50505050905090810190601f1680156128275780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6000828201838110156110ad57fe5b6128b2826007836040518082805190602001908083835b6020831061287e5780518252601f19909201916020918201910161285f565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612b2b565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b70048982826040518083600160a060020a0316600160a060020a031681526020018060200182810382528381815181526020019150805190602001908083836000838110156127fa5781810151838201526020016127e2565b600080600080600086805490506000141561294a5760009450849350612aff565b8654879061295f90600163ffffffff61263016565b8154811061296957fe5b600091825260209091206002909102015486106129ea578654879061299590600163ffffffff61263016565b8154811061299f57fe5b6000918252602090912060029091020154875488906129c590600163ffffffff61263016565b815481106129cf57fe5b90600052602060002090600202016001015494509450612aff565b8660008154811015156129f957fe5b906000526020600020906002020160000154861015612a1e5760009450849350612aff565b865460009350612a3590600163ffffffff61263016565b91505b82821115612aba57612a726002612a66612a5986600163ffffffff61283916565b859063ffffffff61283916565b9063ffffffff612b5016565b9050858782815481101515612a8357fe5b600091825260209091206002909102015411612aa157809250612ab5565b612ab281600163ffffffff61263016565b91505b612a38565b8683815481101515612ac857fe5b9060005260206000209060020201600001548784815481101515612ae857fe5b906000526020600020906002020160010154945094505b5050509250929050565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000808284811515612b5e57fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ba85782800160ff19823516178555612bd5565b82800160010185558215612bd5579182015b82811115612bd5578235825591602001919060010190612bba565b50612be1929150612be5565b5090565b612bff91905b80821115612be15760008155600101612beb565b905600a165627a7a723058201579eee8a75ce55eaa347a2e7d8a1928a66a6fdb5efeaf3e2387a94ff481d1b80029000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000019546f6b656e4d61726b6574204c74642e204120736861726573000000000000000000000000000000000000000000000000000000000000000000000000000002544d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f746f6b656e6d61726b65742e6e65742f0000000000000000
Deployed Bytecode
0x6080604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461024a578063095ea7b3146102d45780630988ca8c1461030c5780631296830d1461037557806315420b71146103e857806316114acd1461042a57806316ca3b631461044b57806318160ddd146104b457806318913e21146104c957806319045a25146104ea5780631bcfbe3114610564578063217fe6c61461057c57806322fab24c146105e357806323b872dd146105f8578063313ce5671461062257806333bebb77146106375780633b8e6f2e146106615780633f9ed88c146106855780634000aea0146106a657806348ff56651461070f5780634c8e83bd1461074c5780634f0092ab1461076157806354fd4d50146107795780635600f04f1461078e5780635c658165146107a35780635c7181bc146107ca57806366188463146108025780636d1b229d1461082657806370a082311461083e5780637272ad491461085f57806388cee87e146108c85780638da5cb5b1461092f578063949615fd1461094457806395d89b4114610959578063981b24d01461096e5780639930536714610986578063a53d5c631461099b578063a5820daa146109b0578063a9059cbb146109c8578063b25fa92c146109ec578063bb34e57c14610a53578063c45d19db14610a68578063d391014b14610a89578063d73dd62314610a9e578063dd62ed3e14610ac2578063eeac096914610ae9578063f2fde38b14610b0a578063f82a841e14610b2b575b600080fd5b34801561025657600080fd5b5061025f610b40565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610299578181015183820152602001610281565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e057600080fd5b506102f8600160a060020a0360043516602435610bce565b604080519115158252519081900360200190f35b34801561031857600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610373958335600160a060020a0316953695604494919390910191908190840183828082843750949750610c349650505050505050565b005b34801561038157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102f894369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610ca2565b3480156103f457600080fd5b50610418600160a060020a0360043581169060243516604435606435608435610ec2565b60408051918252519081900360200190f35b34801561043657600080fd5b50610373600160a060020a0360043516610f34565b34801561045757600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102f8948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506110049650505050505050565b3480156104c057600080fd5b506104186110b4565b3480156104d557600080fd5b50610373600160a060020a03600435166110c6565b3480156104f657600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526105489583359536956044949193909101919081908401838280828437509497506113bb9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b34801561057057600080fd5b50610548600435611490565b34801561058857600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102f8958335600160a060020a03169536956044949193909101919081908401838280828437509497506114b89650505050505050565b3480156105ef57600080fd5b5061025f611524565b34801561060457600080fd5b506102f8600160a060020a036004358116906024351660443561155b565b34801561062e57600080fd5b506104186115eb565b34801561064357600080fd5b50610373600160a060020a03600435811690602435166044356115f1565b34801561066d57600080fd5b50610418600160a060020a036004351660243561168b565b34801561069157600080fd5b50610418600160a060020a03600435166116ad565b3480156106b257600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102f8948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506116bf9650505050505050565b34801561071b57600080fd5b50610733600160a060020a03600435166024356118c8565b6040805192835260208301919091528051918290030190f35b34801561075857600080fd5b5061025f611903565b34801561076d57600080fd5b5061073360043561193a565b34801561078557600080fd5b5061025f611966565b34801561079a57600080fd5b5061025f6119c1565b3480156107af57600080fd5b50610418600160a060020a0360043581169060243516611a1c565b3480156107d657600080fd5b506103736024600480358281019290820135918135808301929082013591604435918201910135611a39565b34801561080e57600080fd5b506102f8600160a060020a0360043516602435611c59565b34801561083257600080fd5b50610373600435611d49565b34801561084a57600080fd5b50610418600160a060020a0360043516611e4f565b34801561086b57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102f8948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611e779650505050505050565b3480156108d457600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610373958335600160a060020a0316953695604494919390910191908190840183828082843750949750611e999650505050505050565b34801561093b57600080fd5b50610548611ee2565b34801561095057600080fd5b5061025f611ef1565b34801561096557600080fd5b5061025f611f28565b34801561097a57600080fd5b50610418600435611f82565b34801561099257600080fd5b5061025f611f8f565b3480156109a757600080fd5b50610548611fc6565b3480156109bc57600080fd5b50610373600435611fd5565b3480156109d457600080fd5b506102f8600160a060020a03600435166024356120d7565b3480156109f857600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610373958335600160a060020a031695369560449491939091019190819084018382808284375094975061212d9650505050505050565b348015610a5f57600080fd5b5061025f612176565b348015610a7457600080fd5b50610418600160a060020a03600435166121ad565b348015610a9557600080fd5b5061025f612243565b348015610aaa57600080fd5b506102f8600160a060020a036004351660243561227a565b348015610ace57600080fd5b50610418600160a060020a0360043581169060243516612313565b348015610af557600080fd5b50610373600160a060020a036004351661233e565b348015610b1657600080fd5b50610373600160a060020a03600435166123de565b348015610b3757600080fd5b5061025f612473565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b336000818152600660209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b610c9e826007836040518082805190602001908083835b60208310610c6a5780518252601f199092019160209182019101610c4b565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506124aa565b5050565b60008080600160a060020a0387161515610cbb57600080fd5b6009886040518082805190602001908083835b60208310610ced5780518252601f199092019160209182019101610cce565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150610d2a905057600080fd5b610d373088888888610ec2565b9150610d4382896113bb565b9050600160a060020a0381161515610d5a57600080fd5b610d658188886124bf565b610d708133876124bf565b60016009896040518082805190602001908083835b60208310610da45780518252601f199092019160209182019101610d85565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff1916961515969096179095558a84528301899052505081513392600160a060020a038b811693908616927fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a4929181900390910190a486600160a060020a031681600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a36040805186815290513391600160a060020a038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001979650505050505050565b604080517f48664c160000000000000000000000000000000000000000000000000000000081526c01000000000000000000000000600160a060020a0397881681026004830152959096169094026018860152602c850192909252604c840152606c8301525190819003608c01902090565b600854600160a060020a03163314610f4b57600080fd5b600854600160a060020a038083169163a9059cbb9116610f6a846121ad565b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050506040513d6020811015610fff57600080fd5b505050565b6000600160a060020a03841630141561101c57600080fd5b611026848461227a565b5083600160a060020a03168260405180828051906020019080838360005b8381101561105c578181015183820152602001611044565b50505050905090810190601f1680156110895780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af191505015156110a957600080fd5b5060015b9392505050565b60006110c16005436125fb565b905090565b60408051808201909152600a81527f616e6e6f756e636528290000000000000000000000000000000000000000000060208201526111043382610c34565b600c80546001810182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851690811790915590546000828152600d602090815260408083209390935582517f9ea0c08c0000000000000000000000000000000000000000000000000000000081529251639ea0c08c93600480820194918390030190829087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050506040513d60208110156111e457600080fd5b5051604080517f5fcce2790000000000000000000000000000000000000000000000000000000081529051600160a060020a03851691635fcce2799160048083019260209291908290030181600087803b15801561124157600080fd5b505af1158015611255573d6000803e3d6000fd5b505050506040513d602081101561126b57600080fd5b5051604080517ff31294a40000000000000000000000000000000000000000000000000000000081529051600160a060020a038616917fecae36ae461af9b3746319bfdbfefc7de682e71e22dd901cbec95ad177c33db491839163f31294a49160048083019260209291908290030181600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050506040513d602081101561131657600080fd5b5051604080517f1274c3f30000000000000000000000000000000000000000000000000000000081529051600160a060020a03891691631274c3f39160048083019260209291908290030181600087803b15801561137357600080fd5b505af1158015611387573d6000803e3d6000fd5b505050506040513d602081101561139d57600080fd5b50516040805192835260208301919091528051918290030190a45050565b600080600080845160411415156113d55760009350611487565b50505060208201516040830151606084015160001a601b60ff821610156113fa57601b015b8060ff16601b1415801561141257508060ff16601c14155b156114205760009350611487565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af115801561147a573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b600c80548290811061149e57fe5b600091825260209091200154600160a060020a0316905081565b60006110ad836007846040518082805190602001908083835b602083106114f05780518252601f1990920191602091820191016114d1565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612611565b60408051808201909152600d81527f6973737565546f6b656e73282900000000000000000000000000000000000000602082015281565b600160a060020a038316600090815260066020908152604080832033845290915281205482111561158b57600080fd5b6115968484846124bf565b82600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35060019392505050565b60025481565b60408051808201909152600f81527f666f7263655472616e7366657228290000000000000000000000000000000000602082015261162f3382610c34565b61163a8484846124bf565b82600160a060020a031684600160a060020a03167f768ff242747198c58dcb1136fb640adf7a199de1789b75bc95b6f787668b51b7846040518082815260200191505060405180910390a350505050565b600160a060020a03821660009081526004602052604081206110ad90836125fb565b600d6020526000908152604090205481565b60006116cb84846120d7565b15156116d657600080fd5b7f72db2339068fd324bbc28f2944e01064da539ac76064b6ce4a97a5f81de43dd6338585856040518085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561176e578181015183820152602001611756565b50505050905090810190601f16801561179b5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a183600160a060020a031663c0ee0b8a3385856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561184357818101518382015260200161182b565b50505050905090810190601f1680156118705780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b505050506040513d60208110156118bb57600080fd5b505115156110ad57600080fd5b6004602052816000526040600020818154811015156118e357fe5b600091825260209091206002909102018054600190910154909250905082565b60408051808201909152601581527f736574546f6b656e496e666f726d6174696f6e28290000000000000000000000602082015281565b600580548290811061194857fe5b60009182526020909120600290910201805460019091015490915082565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b600660209081526000928352604080842090915290825290205481565b60408051808201909152601581527f736574546f6b656e496e666f726d6174696f6e282900000000000000000000006020820152611a773382610c34565b611a8360008888612b67565b50611a9060018686612b67565b50611a9d600b8484612b67565b507fe7be9e386976ab29f9c6b6277a4bb92fe29d2ce986625e4bd063d90b5b4e986960006001600b60405180806020018060200180602001848103845287818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b5050848103835286546002600019610100600184161502019091160480825260209091019087908015611bca5780601f10611b9f57610100808354040283529160200191611bca565b820191906000526020600020905b815481529060010190602001808311611bad57829003601f168201915b5050848103825285546002600019610100600184161502019091160480825260209091019086908015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b5050965050505050505060405180910390a150505050505050565b336000908152600660209081526040808320600160a060020a038616845290915281205480831115611cae57336000908152600660209081526040808320600160a060020a0388168452909152812055611ce3565b611cbe818463ffffffff61263016565b336000908152600660209081526040808320600160a060020a03891684529091529020555b336000818152600660209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008060006040805190810160405280600c81526020017f6275726e546f6b656e7328290000000000000000000000000000000000000000815250611d8e3382610c34565b309350611d9a84611e4f565b9250611da46110b4565b9150611db2846000876124bf565b600080526004602052611df47f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec611def858863ffffffff61263016565b612642565b611e096005611def848863ffffffff61263016565b604080518681529051600160a060020a038616917f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7919081900360200190a25050505050565b600160a060020a0381166000908152600460205260408120611e7190436125fb565b92915050565b6000600160a060020a038416301415611e8f57600080fd5b6110268484611c59565b611ed8336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610c34565b610c9e8282612718565b600854600160a060020a031681565b60408051808201909152600f81527f666f7263655472616e7366657228290000000000000000000000000000000000602082015281565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b6000611e716005836125fb565b60408051808201909152601881527f7365745472616e73616374696f6e566572696669657228290000000000000000602082015281565b600354600160a060020a031681565b60008060006040805190810160405280600d81526020017f6973737565546f6b656e7328290000000000000000000000000000000000000081525061201a3382610c34565b3393506120276000611e4f565b92506120316110b4565b60008052600460205291506120707f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec611def858863ffffffff61283916565b61207c600085876124bf565b6120916005611def848863ffffffff61283916565b604080518681529051600160a060020a038616917fa59f12e354e8cd10bb74c559844c2dd69a5458e31fe56c7594c62ca57480509a919081900360200190a25050505050565b60006120e43384846124bf565b604080518381529051600160a060020a0385169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600192915050565b61216c336040805190810160405280600581526020017f61646d696e000000000000000000000000000000000000000000000000000000815250610c34565b610c9e8282612848565b60408051808201909152600c81527f6275726e546f6b656e7328290000000000000000000000000000000000000000602082015281565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a082319160248082019260209290919082900301818787803b15801561221157600080fd5b505af1158015612225573d6000803e3d6000fd5b505050506040513d602081101561223b57600080fd5b505192915050565b60408051808201909152600581527f61646d696e000000000000000000000000000000000000000000000000000000602082015281565b336000908152600660209081526040808320600160a060020a03861684529091528120546122ae908363ffffffff61283916565b336000818152600660209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60408051808201909152601881527f7365745472616e73616374696f6e566572696669657228290000000000000000602082015261237c3382610c34565b60038054600160a060020a03841673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe87a0b647188a1482a1a619a8d3eaba4275e36eed81b5247a12e24a4df2032fb9181900360200190a15050565b600854600160a060020a031633146123f557600080fd5b600160a060020a038116151561240a57600080fd5b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60408051808201909152600a81527f616e6e6f756e6365282900000000000000000000000000000000000000000000602082015281565b6124b48282612611565b1515610c9e57600080fd5b6000806124cb85611e4f565b91506124d684611e4f565b600354909150600160a060020a03161561259c57600354604080517fad076994000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301528781166024830152604482018790529151919092169163ad0769949160648083019260209291908290030181600087803b15801561256157600080fd5b505af1158015612575573d6000803e3d6000fd5b505050506040513d602081101561258b57600080fd5b505192506000831161259c57600080fd5b600160a060020a03851660009081526004602052604090206125c890611def848663ffffffff61263016565b600160a060020a03841660009081526004602052604090206125f490611def838663ffffffff61283916565b5050505050565b6000806126088484612929565b95945050505050565b600160a060020a03166000908152602091909152604090205460ff1690565b60008282111561263c57fe5b50900390565b81541580612680575081544390839061266290600163ffffffff61263016565b8154811061266c57fe5b906000526020600020906002020160000154105b156126c2576040805180820190915243815260208082018381528454600181810187556000878152939093209351600290910290930192835551910155610c9e565b6040805180820190915243815260208101829052825483906126eb90600163ffffffff61263016565b815481106126f557fe5b600091825260209182902083516002909202019081559101516001909101555050565b612782826007836040518082805190602001908083835b6020831061274e5780518252601f19909201916020918201910161272f565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612b09565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a82826040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156127fa5781810151838201526020016127e2565b50505050905090810190601f1680156128275780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6000828201838110156110ad57fe5b6128b2826007836040518082805190602001908083835b6020831061287e5780518252601f19909201916020918201910161285f565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612b2b565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b70048982826040518083600160a060020a0316600160a060020a031681526020018060200182810382528381815181526020019150805190602001908083836000838110156127fa5781810151838201526020016127e2565b600080600080600086805490506000141561294a5760009450849350612aff565b8654879061295f90600163ffffffff61263016565b8154811061296957fe5b600091825260209091206002909102015486106129ea578654879061299590600163ffffffff61263016565b8154811061299f57fe5b6000918252602090912060029091020154875488906129c590600163ffffffff61263016565b815481106129cf57fe5b90600052602060002090600202016001015494509450612aff565b8660008154811015156129f957fe5b906000526020600020906002020160000154861015612a1e5760009450849350612aff565b865460009350612a3590600163ffffffff61263016565b91505b82821115612aba57612a726002612a66612a5986600163ffffffff61283916565b859063ffffffff61283916565b9063ffffffff612b5016565b9050858782815481101515612a8357fe5b600091825260209091206002909102015411612aa157809250612ab5565b612ab281600163ffffffff61263016565b91505b612a38565b8683815481101515612ac857fe5b9060005260206000209060020201600001548784815481101515612ae857fe5b906000526020600020906002020160010154945094505b5050509250929050565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000808284811515612b5e57fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ba85782800160ff19823516178555612bd5565b82800160010185558215612bd5579182015b82811115612bd5578235825591602001919060010190612bba565b50612be1929150612be5565b5090565b612bff91905b80821115612be15760008155600101612beb565b905600a165627a7a723058201579eee8a75ce55eaa347a2e7d8a1928a66a6fdb5efeaf3e2387a94ff481d1b80029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000019546f6b656e4d61726b6574204c74642e204120736861726573000000000000000000000000000000000000000000000000000000000000000000000000000002544d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f746f6b656e6d61726b65742e6e65742f0000000000000000
-----Decoded View---------------
Arg [0] : _name (string): TokenMarket Ltd. A shares
Arg [1] : _symbol (string): TM
Arg [2] : _url (string): https://tokenmarket.net/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [4] : 546f6b656e4d61726b6574204c74642e20412073686172657300000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 544d000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [8] : 68747470733a2f2f746f6b656e6d61726b65742e6e65742f0000000000000000
Deployed Bytecode Sourcemap
25259:7073:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3589:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3589:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;3589:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6276:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6276:181:0;-1:-1:-1;;;;;6276:181:0;;;;;;;;;;;;;;;;;;;;;;;;;22652:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22652:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22652:115:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22652:115:0;;-1:-1:-1;22652:115:0;;-1:-1:-1;;;;;;;22652:115:0;;;15336:713;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15336:713:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15336:713:0;;-1:-1:-1;;;15336:713:0;;-1:-1:-1;;;;;15336:713:0;;-1:-1:-1;;;15336:713:0;;;;;;;;;;-1:-1:-1;15336:713:0;;;;;16477:368;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16477:368:0;-1:-1:-1;;;;;16477:368:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19998:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19998:119:0;-1:-1:-1;;;;;19998:119:0;;;;;11174:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11174:242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11174:242:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11174:242:0;;-1:-1:-1;11174:242:0;;-1:-1:-1;;;;;;;11174:242:0;7582:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7582:131:0;;;;28454:368;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28454:368:0;-1:-1:-1;;;;;28454:368:0;;;;;17242:734;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17242:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17242:734:0;;-1:-1:-1;17242:734:0;;-1:-1:-1;;;;;;;17242:734:0;;;;;-1:-1:-1;;;;;17242:734:0;;;;;;;;;;;;;;27244:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27244:30:0;;;;;22913:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22913:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22913:138:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22913:138:0;;-1:-1:-1;22913:138:0;;-1:-1:-1;;;;;;;22913:138:0;25534:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25534:51:0;;;;6803:233;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6803:233:0;-1:-1:-1;;;;;6803:233:0;;;;;;;;;;;;3775:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3775:23:0;;;;29352:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29352:172:0;-1:-1:-1;;;;;29352:172:0;;;;;;;;;;;;8754:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8754:165:0;-1:-1:-1;;;;;8754:165:0;;;;;;;27385:57;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27385:57:0;-1:-1:-1;;;;;27385:57:0;;;;;1816:289;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1816:289:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1816:289:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1816:289:0;;-1:-1:-1;1816:289:0;;-1:-1:-1;;;;;;;1816:289:0;4231:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4231:54:0;-1:-1:-1;;;;;4231:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25644:58;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25644:58:0;;;;4376:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4376:31:0;;;;;25854:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25854:35:0;;;;26031:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26031:17:0;;;;4494:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4494:64:0;-1:-1:-1;;;;;4494:64:0;;;;;;;;;;31608:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31608:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10110:398;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10110:398:0;-1:-1:-1;;;;;10110:398:0;;;;;;;30571:415;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30571:415:0;;;;;8321:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8321:145:0;-1:-1:-1;;;;;8321:145:0;;;;;12087:252;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12087:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12087:252:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12087:252:0;;-1:-1:-1;12087:252:0;;-1:-1:-1;;;;;;;12087:252:0;23425:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23425:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23425:125:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23425:125:0;;-1:-1:-1;23425:125:0;;-1:-1:-1;;;;;;;23425:125:0;18919:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18919:20:0;;;;25476:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25476:53:0;;;;3688:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3688:20:0;;;;7958:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7958:151:0;;;;;25707:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25707:68:0;;;;3906:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3906:48:0;;;;29787:424;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29787:424:0;;;;;7265:175;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7265:175:0;-1:-1:-1;;;;;7265:175:0;;;;;;;23176:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23176:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23176:119:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23176:119:0;;-1:-1:-1;23176:119:0;;-1:-1:-1;;;;;;;23176:119:0;25590:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25590:49:0;;;;20337:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20337:109:0;-1:-1:-1;;;;;20337:109:0;;;;;22301:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22301:43:0;;;;9385:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9385:254:0;-1:-1:-1;;;;;9385:254:0;;;;;;;5453:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5453:124:0;-1:-1:-1;;;;;5453:124:0;;;;;;;;;;32132:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32132:197:0;-1:-1:-1;;;;;32132:197:0;;;;;19539:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19539:173:0;-1:-1:-1;;;;;19539:173:0;;;;;25420:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25420:51:0;;;;3589:18;;;;;;;;;;;;;;;-1:-1:-1;;3589:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6276:181::-;6362:10;6341:4;6354:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6354:28:0;;;;;;;;;;;:36;;;6397;;;;;;;6341:4;;6354:28;;6362:10;;6397:36;;;;;;;;-1:-1:-1;6447:4:0;6276:181;;;;:::o;22652:115::-;22734:27;22756:4;22734:5;22740:8;22734:15;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;22734:15:0;;;;;-1:-1:-1;22734:15:0;;;;;;;;;;;;-1:-1:-1;;22734:21:0;:27::i;:::-;22652:115;;:::o;15336:713::-;15496:4;;;-1:-1:-1;;;;;15520:17:0;;;;15512:26;;;;;;15553:10;15564;15553:22;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;15553:22:0;;;;;-1:-1:-1;15553:22:0;;;;;;;;;;;;;:31;;-1:-1:-1;15545:40:0;;-1:-1:-1;15545:40:0;;;;;15611:66;15644:4;15651:3;15656:6;15664:4;15670:6;15611:24;:66::i;:::-;15592:85;;15699:29;15707:8;15717:10;15699:7;:29::i;:::-;15684:44;-1:-1:-1;;;;;;15743:18:0;;;;15735:27;;;;;;15771:35;15788:4;15794:3;15799:6;15771:16;:35::i;:::-;15813:40;15830:4;15836:10;15848:4;15813:16;:40::i;:::-;15887:4;15862:10;15873;15862:22;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;15862:22:0;;;;;-1:-1:-1;15862:22:0;;;;;;;;;;;:29;;-1:-1:-1;;15862:29:0;;;;;;;;;;;15898:54;;;;;;;;-1:-1:-1;;15898:54:0;;15927:10;;-1:-1:-1;;;;;15898:54:0;;;;;;;;;;;;;;;;;;;15974:3;-1:-1:-1;;;;;15959:27:0;15968:4;-1:-1:-1;;;;;15959:27:0;;15979:6;15959:27;;;;;;;;;;;;;;;;;;15993:32;;;;;;;;16008:10;;-1:-1:-1;;;;;15993:32:0;;;;;;;;;;;;-1:-1:-1;16039:4:0;;15336:713;-1:-1:-1;;;;;;;15336:713:0:o;16477:368::-;16775:64;;;16785:18;16775:64;;;-1:-1:-1;;;;;16775:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16477:368::o;19998:119::-;19352:5;;-1:-1:-1;;;;;19352:5:0;19338:10;:19;19330:28;;;;;;20078:5;;-1:-1:-1;;;;;20063:14:0;;;;;;20078:5;20085:25;20063:5;20085:18;:25::i;:::-;20063:48;;;;;;;;;;;;;-1:-1:-1;;;;;20063:48:0;-1:-1:-1;;;;;20063:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20063:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20063:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;19998:119:0:o;11174:242::-;11262:4;-1:-1:-1;;;;;11283:24:0;;11302:4;11283:24;;11275:33;;;;;;11317:37;11334:7;11343:10;11317:16;:37::i;:::-;;11371:7;-1:-1:-1;;;;;11371:12:0;11384:4;11371:18;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11371:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11363:27;;;;;;;;-1:-1:-1;11406:4:0;11174:242;;;;;;:::o;7582:131::-;7626:18;7666:41;7681:11;7694:12;7666:14;:41::i;:::-;7653:54;;7582:131;:::o;28454:368::-;28517:13;;;;;;;;;;;;;;;;;24287:31;24297:10;28517:13;24287:9;:31::i;:::-;28539:13;27:10:-1;;39:1;23:18;;45:23;;28539:32:0;;;;-1:-1:-1;;28539:32:0;-1:-1:-1;;;;;28539:32:0;;;;;;;;28626:20;;-1:-1:-1;28578:45:0;;;:22;28539:32;28578:45;;;;;;;:68;;;;28719:31;;;;;;;:29;;:31;;;;;;;;;;;;;28539:32;28719:31;;;5:2:-1;;;;30:1;27;20:12;5:2;28719:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28719:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28719:31:0;28686;;;;;;;;-1:-1:-1;;;;;28686:29:0;;;;;:31;;;;;28719;;28686;;;;;;;28653:163;28686:29;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;28686:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28686:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28686:31:0;28752:30;;;;;;;;-1:-1:-1;;;;;28653:163:0;;;;;;;28752:28;;:30;;;;;28686:31;;28752:30;;;;;;;;28653:163;28752:30;;;5:2:-1;;;;30:1;27;20:12;5:2;28752:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28752:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28752:30:0;28784:31;;;;;;;;-1:-1:-1;;;;;28784:29:0;;;;;:31;;;;;28752:30;;28784:31;;;;;;;;:29;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;28784:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28784:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28784:31:0;28653:163;;;;;;28784:31;28653:163;;;;;;;;;;;;;;;28454:368;;:::o;17242:734::-;17305:7;17321:9;17337;17353:7;17411:3;:10;17425:2;17411:16;;17407:58;;;17454:1;17438:19;;;;17407:58;-1:-1:-1;;;17567:2:0;17558:12;;17552:19;17599:2;17590:12;;17584:19;17639:2;17630:12;;17624:19;17621:1;17616:28;17758:2;17754:6;;;;17750:36;;;17776:2;17771:7;17750:36;17861:1;:7;;17866:2;17861:7;;:18;;;;;17872:1;:7;;17877:2;17872:7;;17861:18;17857:114;;;17906:1;17890:19;;;;17857:114;17939:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17939:24:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17939:24:0;;;;;;;;17932:31;;17857:114;17242:734;;;;;;;:::o;27244:30::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27244:30:0;;-1:-1:-1;27244:30:0;:::o;22913:138::-;22997:4;23020:25;23040:4;23020:5;23026:8;23020:15;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;23020:15:0;;;;;-1:-1:-1;23020:15:0;;;;;;;;;;;;-1:-1:-1;;23020:19:0;:25::i;25534:51::-;;;;;;;;;;;;;;;;;;;:::o;6803:233::-;-1:-1:-1;;;;;6912:13:0;;6882:4;6912:13;;;:7;:13;;;;;;;;6926:10;6912:25;;;;;;;;6903:34;;;6895:43;;;;;;6947:33;6964:4;6970:2;6974:5;6947:16;:33::i;:::-;7002:2;-1:-1:-1;;;;;6987:25:0;6996:4;-1:-1:-1;;;;;6987:25:0;;7006:5;6987:25;;;;;;;;;;;;;;;;;;-1:-1:-1;7026:4:0;6803:233;;;;;:::o;3775:23::-;;;;:::o;29352:172::-;29434:10;;;;;;;;;;;;;;;;;24287:31;24297:10;29434;24287:9;:31::i;:::-;29453:33;29470:4;29476:2;29480:5;29453:16;:33::i;:::-;29508:2;-1:-1:-1;;;;;29495:23:0;29502:4;-1:-1:-1;;;;;29495:23:0;;29512:5;29495:23;;;;;;;;;;;;;;;;;;29352:172;;;;:::o;8754:165::-;-1:-1:-1;;;;;8879:20:0;;8830:15;8879:20;;;:13;:20;;;;;8864:49;;8901:11;8864:14;:49::i;27385:57::-;;;;;;;;;;;;;:::o;1816:289::-;1900:12;1929:35;1946:8;1957:6;1929:8;:35::i;:::-;1921:44;;;;;;;;1974:59;1989:10;2009:8;2020:6;2028:4;1974:59;;;;-1:-1:-1;;;;;1974:59:0;-1:-1:-1;;;;;1974:59:0;;;;;;-1:-1:-1;;;;;1974:59:0;-1:-1:-1;;;;;1974:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1974:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2050:8;-1:-1:-1;;;;;2050:22:0;;2073:10;2085:6;2093:4;2050:48;;;;;;;;;;;;;-1:-1:-1;;;;;2050:48:0;-1:-1:-1;;;;;2050:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2050:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2050:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2050:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2050:48:0;2042:57;;;;;;;4231:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4231:54:0;-1:-1:-1;4231:54:0;:::o;25644:58::-;;;;;;;;;;;;;;;;;;;:::o;4376:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4376:31:0;:::o;25854:35::-;;;;;;;;;;;;;;;-1:-1:-1;;25854:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26031:17;;;;;;;;;;;;;;;-1:-1:-1;;26031:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4494:64;;;;;;;;;;;;;;;;;;;;;;;;:::o;31608:217::-;31698:9;;;;;;;;;;;;;;;;;24287:31;24297:10;31698:9;24287;:31::i;:::-;31716:12;:4;31723:5;;31716:12;:::i;:::-;-1:-1:-1;31735:16:0;:6;31744:7;;31735:16;:::i;:::-;-1:-1:-1;31758:10:0;:3;31764:4;;31758:10;:::i;:::-;;31777:42;31801:4;31807:6;31815:3;31777:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31777:42:0;;;;;;;;-1:-1:-1;;31777:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31777:42:0;;;;;;;;-1:-1:-1;;31777:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31608:217;;;;;;;:::o;10110:398::-;10228:10;10191:4;10220:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10220:28:0;;;;;;;;;;10259:26;;;10255:164;;;10304:10;10327:1;10296:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10296:28:0;;;;;;;;;:32;10255:164;;;10382:29;:8;10395:15;10382:29;:12;:29;:::i;:::-;10359:10;10351:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10351:28:0;;;;;;;;;:60;10255:164;10434:10;10455:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10425:59:0;;10455:28;;;;;;;;;;;10425:59;;;;;;;;;10434:10;10425:59;;;;;;;;;;;-1:-1:-1;10498:4:0;;10110:398;-1:-1:-1;;;10110:398:0:o;30571:415::-;30642:14;30679:21;30727:22;30624:9;;;;;;;;;;;;;;;;;;24287:31;24297:10;24309:8;24287:9;:31::i;:::-;30667:4;30642:30;;30703:17;30713:6;30703:9;:17::i;:::-;30679:41;;30752:13;:11;:13::i;:::-;30727:38;;30774:43;30791:6;30807:1;30811:5;30774:16;:43::i;:::-;30838:25;;;:13;:25;;30824:66;30838:25;30865:24;:13;30883:5;30865:24;:17;:24;:::i;:::-;30824:13;:66::i;:::-;30897:53;30911:11;30924:25;:14;30943:5;30924:25;:18;:25;:::i;30897:53::-;30959:21;;;;;;;;-1:-1:-1;;;;;30959:21:0;;;;;;;;;;;;;30571:415;;;;;:::o;8321:145::-;-1:-1:-1;;;;;8425:20:0;;8376:15;8425:20;;;:13;:20;;;;;8410:50;;8447:12;8410:14;:50::i;:::-;8400:60;8321:145;-1:-1:-1;;8321:145:0:o;12087:252::-;12180:4;-1:-1:-1;;;;;12201:24:0;;12220:4;12201:24;;12193:33;;;;;;12235:42;12252:7;12261:15;12235:16;:42::i;23425:125::-;24446:33;24456:10;24468;;;;;;;;;;;;;;;;;;24446:9;:33::i;:::-;23518:26;23529:4;23535:8;23518:10;:26::i;18919:20::-;;;-1:-1:-1;;;;;18919:20:0;;:::o;25476:53::-;;;;;;;;;;;;;;;;;;;:::o;3688:20::-;;;;;;;;;;;;;;;-1:-1:-1;;3688:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7958:151;8023:18;8063:40;8078:11;8091;8063:14;:40::i;25707:68::-;;;;;;;;;;;;;;;;;;;:::o;3906:48::-;;;-1:-1:-1;;;;;3906:48:0;;:::o;29787:424::-;29860:14;29894:24;29949:22;29841:10;;;;;;;;;;;;;;;;;;24287:31;24297:10;24309:8;24287:9;:31::i;:::-;29877:10;29860:27;;29921:21;29939:1;29921:9;:21::i;:::-;29894:48;;29974:13;:11;:13::i;:::-;30010:25;;;:13;:25;;29949:38;-1:-1:-1;29996:69:0;30010:25;30037:27;:16;30058:5;30037:27;:20;:27;:::i;29996:69::-;30072:43;30097:1;30101:6;30109:5;30072:16;:43::i;:::-;30122:53;30136:11;30149:25;:14;30168:5;30149:25;:18;:25;:::i;30122:53::-;30184:21;;;;;;;;-1:-1:-1;;;;;30184:21:0;;;;;;;;;;;;;29787:424;;;;;:::o;7265:175::-;7326:4;7339:39;7356:10;7368:2;7372:5;7339:16;:39::i;:::-;7385:31;;;;;;;;-1:-1:-1;;;;;7385:31:0;;;7394:10;;7385:31;;;;;;;;;-1:-1:-1;7430:4:0;7265:175;;;;:::o;23176:119::-;24446:33;24456:10;24468;;;;;;;;;;;;;;;;;;24446:9;:33::i;:::-;23266:23;23274:4;23280:8;23266:7;:23::i;25590:49::-;;;;;;;;;;;;;;;;;;;:::o;20337:109::-;20419:21;;;;;;20435:4;20419:21;;;;;;20399:4;;-1:-1:-1;;;;;20419:15:0;;;;;:21;;;;;;;;;;;;;;;20399:4;20419:15;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;20419:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20419:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20419:21:0;;20337:109;-1:-1:-1;;20337:109:0:o;22301:43::-;;;;;;;;;;;;;;;;;;;:::o;9385:254::-;9513:10;9461:4;9505:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;9505:28:0;;;;;;;;;;:44;;9538:10;9505:44;:32;:44;:::i;:::-;9482:10;9474:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;9474:28:0;;;;;;;;;;;;:75;;;9556:59;;;;;;9474:28;;9556:59;;;;;;;;;;;-1:-1:-1;9629:4:0;9385:254;;;;:::o;5453:124::-;-1:-1:-1;;;;;5548:14:0;;;5525:7;5548:14;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;5453:124::o;32132:197::-;32217:16;;;;;;;;;;;;;;;;;24287:31;24297:10;32217:16;24287:9;:31::i;:::-;32242:19;:33;;-1:-1:-1;;;;;32242:33:0;;-1:-1:-1;;32242:33:0;;;;;;;;32284:39;;;;;;;;;;;;;;;;32132:197;;:::o;19539:173::-;19352:5;;-1:-1:-1;;;;;19352:5:0;19338:10;:19;19330:28;;;;;;-1:-1:-1;;;;;19616:22:0;;;;19608:31;;;;;;19667:5;;19646:37;;-1:-1:-1;;;;;19646:37:0;;;;19667:5;;19646:37;;19667:5;;19646:37;19690:5;:16;;-1:-1:-1;;19690:16:0;-1:-1:-1;;;;;19690:16:0;;;;;;;;;;19539:173::o;25420:51::-;;;;;;;;;;;;;;;;;;;:::o;21130:112::-;21220:15;21224:4;21230;21220:3;:15::i;:::-;21212:24;;;;;;;12647:445;12730:19;12774:17;12752:15;12762:4;12752:9;:15::i;:::-;12730:37;;12794:13;12804:2;12794:9;:13::i;:::-;12828:19;;12774:33;;-1:-1:-1;;;;;;12828:19:0;12820:42;12816:143;;12881:19;;:43;;;;;;-1:-1:-1;;;;;12881:43:0;;;;;;;;;;;;;;;;;;;;;;:19;;;;;:26;;:43;;;;;;;;;;;;;;:19;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;12881:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12881:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12881:43:0;;-1:-1:-1;12949:1:0;12941:9;;12933:18;;;;;;-1:-1:-1;;;;;12981:19:0;;;;;;:13;:19;;;;;12967:58;;13002:22;:11;13018:5;13002:22;:15;:22;:::i;12967:58::-;-1:-1:-1;;;;;13046:17:0;;;;;;:13;:17;;;;;13032:54;;13065:20;:9;13079:5;13065:20;:13;:20;:::i;13032:54::-;12647:445;;;;;:::o;12410:231::-;12507:15;12531:26;12596:39;12610:11;12623;12596:13;:39::i;:::-;12564:71;12410:231;-1:-1:-1;;;;;12410:231:0:o;21326:130::-;-1:-1:-1;;;;;21433:17:0;21410:4;21433:17;;;;;;;;;;;;;;;21326:130::o;2955:113::-;3013:7;3036:6;;;;3029:14;;;;-1:-1:-1;3057:5:0;;;2955:113::o;13191:366::-;13287:18;;:23;;13286:96;;-1:-1:-1;13328:18:0;;13369:12;;13316:11;;13328:25;;13351:1;13328:25;:22;:25;:::i;:::-;13316:38;;;;;;;;;;;;;;;;;;:50;;;:65;13286:96;13282:270;;;13410:34;;;;;;;;;13421:12;13410:34;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;13393:52:0;;;;;;;;;;;;;;;;;;;;;;;13282:270;;;13510:34;;;;;;;;;13521:12;13510:34;;;;;;;;13481:18;;13469:11;;13481:25;;13504:1;13481:25;:22;:25;:::i;:::-;13469:38;;;;;;;;;;;;;;;;;:75;;:38;;;;;:75;;;;;;;;;;;13191:366;;:::o;23940:143::-;24015:28;24038:4;24015:5;24021:8;24015:15;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;24015:15:0;;;;;-1:-1:-1;24015:15:0;;;;;;;;;;;;-1:-1:-1;;24015:22:0;:28::i;:::-;24050:27;24062:4;24068:8;24050:27;;;;-1:-1:-1;;;;;24050:27:0;-1:-1:-1;;;;;24050:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24050:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23940:143;;:::o;3135:133::-;3193:7;3221:5;;;3240:6;;;;3233:14;;;23675:135;23747:25;23767:4;23747:5;23753:8;23747:15;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;23747:15:0;;;;;-1:-1:-1;23747:15:0;;;;;;;;;;;;-1:-1:-1;;23747:19:0;:25::i;:::-;23779;23789:4;23795:8;23779:25;;;;-1:-1:-1;;;;;23779:25:0;-1:-1:-1;;;;;23779:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;13563:928:0;13659:20;13681:13;14141:11;14163;14236;13707;:18;;;;13729:1;13707:23;13703:59;;;13749:1;;-1:-1:-1;13749:1:0;;-1:-1:-1;13741:13:0;;13703:59;13839:18;;13827:11;;13839:25;;13862:1;13839:25;:22;:25;:::i;:::-;13827:38;;;;;;;;;;;;;;;;;;;;;:50;13812:65;;13808:193;;13908:18;;13896:11;;13908:25;;13931:1;13908:25;:22;:25;:::i;:::-;13896:38;;;;;;;;;;;;;;;;;;;;;:50;13960:18;;13948:11;;13960:25;;13983:1;13960:25;:22;:25;:::i;:::-;13948:38;;;;;;;;;;;;;;;;;;:44;;;13888:105;;;;;;13808:193;14027:11;14039:1;14027:14;;;;;;;;;;;;;;;;;;;;:26;;;14013:11;:40;14009:76;;;14072:1;;-1:-1:-1;14072:1:0;;-1:-1:-1;14064:13:0;;14009:76;14177:18;;14155:1;;-1:-1:-1;14177:25:0;;14200:1;14177:25;:22;:25;:::i;:::-;14163:39;;14209:207;14222:3;14216;:9;14209:207;;;14250:28;14276:1;14251:19;14259:10;:3;14267:1;14259:10;:7;:10;:::i;:::-;14251:3;;:19;:7;:19;:::i;:::-;14250:25;:28;:25;:28;:::i;:::-;14236:42;;14323:11;14291;14303:3;14291:16;;;;;;;;;;;;;;;;;;;;;;;:28;:43;14287:122;;14353:3;14347:9;;14287:122;;;14389:10;:3;14397:1;14389:10;:7;:10;:::i;:::-;14383:16;;14287:122;14209:207;;;14432:11;14444:3;14432:16;;;;;;;;;;;;;;;;;;;;:28;;;14462:11;14474:3;14462:16;;;;;;;;;;;;;;;;;;;;:22;;;14424:61;;;;13563:928;;;;;;;;;:::o;20944:104::-;-1:-1:-1;;;;;21017:17:0;21037:5;21017:17;;;;;;;;;;;:25;;-1:-1:-1;;21017:25:0;;;20944:104::o;20774:100::-;-1:-1:-1;;;;;20844:17:0;:11;:17;;;;;;;;;;;:24;;-1:-1:-1;;20844:24:0;20864:4;20844:24;;;20774:100::o;2568:270::-;2626:7;2717:9;2733:1;2729;:5;;;;;;;;;2568:270;-1:-1:-1;;;;2568:270:0:o;25259:7073::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25259:7073:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25259:7073:0;;;-1:-1:-1;25259:7073:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://1579eee8a75ce55eaa347a2e7d8a1928a66a6fdb5efeaf3e2387a94ff481d1b8
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.